diff --git a/shared/static/wasm/sx-platform-2.js b/shared/static/wasm/sx-platform-2.js index d8867161..4a48d667 100644 --- a/shared/static/wasm/sx-platform-2.js +++ b/shared/static/wasm/sx-platform-2.js @@ -398,6 +398,22 @@ "children:", islands[j].children.length); } console.log("[sx] boot done"); + + // Global keyboard shortcut dispatch — WASM host-callbacks on + // document/body don't fire, so handle from:body keyboard + // triggers in JS and call execute-request via the SX engine. + document.addEventListener("keyup", function(e) { + if (e.target && e.target.matches && e.target.matches("input,textarea,select")) return; + var sel = '[sx-trigger*="key==\'' + e.key + '\'"]'; + var els = document.querySelectorAll(sel); + for (var i = 0; i < els.length; i++) { + var el = els[i]; + if (!el.id) el.id = "_sx_kbd_" + Math.random().toString(36).slice(2); + try { + K.eval('(execute-request (dom-query-by-id "' + el.id + '") nil nil)'); + } catch(err) { console.warn("[sx] keyboard dispatch error:", err); } + } + }); } } }; diff --git a/shared/static/wasm/sx/adapter-dom.sxbc.json b/shared/static/wasm/sx/adapter-dom.sxbc.json new file mode 100644 index 00000000..2dfa4238 --- /dev/null +++ b/shared/static/wasm/sx/adapter-dom.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"8df7de8c13342103","module":{"arity":0,"bytecode":[1,1,0,128,0,0,5,1,3,0,128,2,0,5,51,5,0,128,4,0,5,52,7,0,0,128,6,0,5,1,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,1,32,0,1,33,0,1,34,0,1,35,0,1,36,0,1,37,0,1,38,0,1,39,0,1,40,0,1,41,0,1,42,0,1,43,0,1,44,0,1,45,0,1,46,0,1,47,0,1,48,0,1,49,0,1,50,0,1,51,0,1,52,0,1,53,0,1,54,0,52,31,0,23,128,30,0,5,51,56,0,128,55,0,5,51,58,0,128,57,0,5,51,60,0,128,59,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,5,51,68,0,128,67,0,5,51,70,0,128,69,0,5,51,72,0,128,71,0,5,51,74,0,128,73,0,5,51,76,0,128,75,0,5,51,78,0,128,77,0,5,51,80,0,128,79,0,5,51,82,0,128,81,0,5,3,128,83,0,5,51,85,0,128,84,0,5,51,87,0,128,86,0,5,51,89,0,128,88,0,5,51,91,0,128,90,0,5,51,93,0,128,92,0,50],"constants":[{"t":"s","v":"SVG_NS"},{"t":"s","v":"http://www.w3.org/2000/svg"},{"t":"s","v":"MATH_NS"},{"t":"s","v":"http://www.w3.org/1998/Math/MathML"},{"t":"s","v":"island-scope?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,48,1,52,1,0,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"scope-peek"},{"t":"s","v":"sx-island-scope"}]}},{"t":"s","v":"*memo-cache*"},{"t":"s","v":"dict"},{"t":"s","v":"*cyst-counter*"},{"t":"n","v":0},{"t":"s","v":"next-cyst-id"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,21,1,0,5,1,4,0,20,1,0,52,3,0,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"*cyst-counter*"},{"t":"n","v":1},{"t":"s","v":"str"},{"t":"s","v":"sx-cyst-"}]}},{"t":"s","v":"contains-deref?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,4,0,4,32,73,0,20,2,0,52,3,0,1,33,4,0,4,32,59,0,20,2,0,52,6,0,1,52,5,0,1,1,7,0,52,4,0,2,6,33,20,0,5,20,8,0,20,2,0,52,6,0,1,48,1,1,9,0,52,4,0,2,33,4,0,3,32,10,0,20,11,0,20,2,0,52,10,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"expr"},{"t":"s","v":"empty?"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"deref"},{"t":"s","v":"some"},{"t":"s","v":"contains-deref?"}]}},{"t":"s","v":"dom-on"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,33,33,0,1,6,0,20,4,0,52,8,0,1,52,7,0,1,52,5,0,2,33,6,0,51,9,0,32,3,0,51,10,0,32,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"dom-listen"},{"t":"s","v":"el"},{"t":"s","v":"name"},{"t":"s","v":"lambda?"},{"t":"s","v":"handler"},{"t":"s","v":"="},{"t":"n","v":0},{"t":"s","v":"len"},{"t":"s","v":"lambda-params"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,52,3,0,0,48,2,48,1,5,20,4,0,49,0,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"call-lambda"},{"t":"s","v":"handler"},{"t":"s","v":"list"},{"t":"s","v":"run-post-render-hooks"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,48,2,48,1,5,20,5,0,49,0,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"call-lambda"},{"t":"s","v":"handler"},{"t":"s","v":"list"},{"t":"s","v":"e"},{"t":"s","v":"run-post-render-hooks"}]}}]}},{"t":"s","v":"render-to-dom"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,3,48,1,5,20,2,0,52,1,0,1,6,1,3,0,52,4,0,2,33,9,0,5,20,5,0,49,0,32,128,1,6,1,6,0,52,4,0,2,33,9,0,5,20,5,0,49,0,32,108,1,6,1,7,0,52,4,0,2,33,16,0,5,20,8,0,20,2,0,52,9,0,1,49,1,32,81,1,6,1,10,0,52,4,0,2,33,12,0,5,20,11,0,20,2,0,49,1,32,58,1,6,1,12,0,52,4,0,2,33,16,0,5,20,11,0,20,2,0,52,13,0,1,49,1,32,31,1,6,1,14,0,52,4,0,2,33,31,0,5,20,15,0,20,16,0,20,17,0,20,2,0,20,18,0,48,2,48,1,20,18,0,20,19,0,49,3,32,245,0,6,1,20,0,52,4,0,2,33,17,0,5,20,11,0,20,21,0,20,2,0,48,1,49,1,32,217,0,6,1,22,0,52,4,0,2,33,7,0,5,20,2,0,32,199,0,6,1,23,0,52,4,0,2,33,39,0,5,20,25,0,48,0,52,24,0,1,33,18,0,20,26,0,1,27,0,20,2,0,52,28,0,1,48,2,32,1,0,2,5,20,2,0,32,149,0,6,1,29,0,52,4,0,2,33,28,0,5,20,2,0,1,31,0,52,30,0,2,33,6,0,20,2,0,32,5,0,20,5,0,49,0,32,110,0,6,1,32,0,52,4,0,2,33,36,0,5,20,2,0,52,33,0,1,33,8,0,20,5,0,49,0,32,14,0,20,34,0,20,2,0,20,18,0,20,19,0,49,3,32,63,0,5,20,35,0,20,2,0,48,1,33,39,0,20,25,0,48,0,33,11,0,20,36,0,20,2,0,49,1,32,17,0,20,11,0,20,37,0,20,2,0,48,1,52,13,0,1,49,1,32,12,0,20,11,0,20,2,0,52,13,0,1,49,1,50],"constants":[{"t":"s","v":"set-render-active!"},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"nil"},{"t":"s","v":"="},{"t":"s","v":"create-fragment"},{"t":"s","v":"boolean"},{"t":"s","v":"raw-html"},{"t":"s","v":"dom-parse-html"},{"t":"s","v":"raw-html-content"},{"t":"s","v":"string"},{"t":"s","v":"create-text-node"},{"t":"s","v":"number"},{"t":"s","v":"str"},{"t":"s","v":"symbol"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"dom-node"},{"t":"s","v":"spread"},{"t":"s","v":"not"},{"t":"s","v":"island-scope?"},{"t":"s","v":"scope-emit!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"spread-attrs"},{"t":"s","v":"dict"},{"t":"s","v":"has-key?"},{"t":"s","v":"__host_handle"},{"t":"s","v":"list"},{"t":"s","v":"empty?"},{"t":"s","v":"render-dom-list"},{"t":"s","v":"signal?"},{"t":"s","v":"reactive-text"},{"t":"s","v":"deref"}]}},{"t":"s","v":"render-dom-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,4,0,52,3,0,1,1,5,0,52,2,0,2,33,160,3,20,6,0,20,4,0,48,1,17,4,20,1,0,52,7,0,1,17,5,20,8,0,1,9,0,52,2,0,2,33,14,0,20,10,0,20,11,0,20,12,0,49,2,32,111,3,20,8,0,1,13,0,52,2,0,2,33,17,0,20,14,0,20,11,0,20,12,0,20,15,0,49,3,32,81,3,20,8,0,1,16,0,52,2,0,2,33,17,0,20,17,0,20,11,0,20,12,0,20,15,0,49,3,32,51,3,20,8,0,1,18,0,52,2,0,2,33,17,0,20,19,0,20,11,0,20,12,0,20,15,0,49,3,32,21,3,20,8,0,1,21,0,52,20,0,2,33,27,0,20,22,0,20,8,0,1,24,0,52,23,0,2,20,11,0,20,12,0,20,15,0,49,4,32,237,2,20,25,0,20,8,0,48,1,33,103,0,20,27,0,20,8,0,52,26,0,2,6,33,46,0,5,20,11,0,52,29,0,1,1,30,0,52,28,0,2,6,33,19,0,5,20,11,0,52,0,0,1,52,3,0,1,1,31,0,52,2,0,2,6,34,4,0,5,20,15,0,33,20,0,20,22,0,20,8,0,20,11,0,20,12,0,20,15,0,49,4,32,17,0,20,32,0,20,8,0,20,1,0,20,12,0,20,15,0,49,4,32,123,2,20,33,0,20,12,0,20,8,0,48,2,6,33,16,0,5,20,35,0,20,12,0,20,8,0,48,2,52,34,0,1,33,36,0,20,36,0,20,37,0,20,35,0,20,12,0,20,8,0,48,2,20,11,0,20,12,0,48,3,20,12,0,20,15,0,49,3,32,53,2,20,27,0,20,8,0,52,26,0,2,33,20,0,20,22,0,20,8,0,20,11,0,20,12,0,20,15,0,49,4,32,20,2,20,8,0,1,38,0,52,20,0,2,6,33,32,0,5,20,33,0,20,12,0,20,8,0,48,2,6,33,16,0,5,20,35,0,20,12,0,20,8,0,48,2,52,39,0,1,33,157,0,20,40,0,1,41,0,48,1,33,118,0,20,35,0,20,12,0,20,8,0,48,2,17,6,20,42,0,1,43,0,2,48,2,17,7,52,44,0,0,17,8,51,46,0,1,47,0,1,30,0,1,48,0,4,52,44,0,4,20,11,0,52,45,0,3,5,20,49,0,20,50,0,1,51,0,20,53,0,52,52,0,1,48,3,5,20,56,0,52,55,0,1,52,54,0,1,33,22,0,20,49,0,20,50,0,1,57,0,20,58,0,20,56,0,48,1,48,3,32,1,0,2,5,20,50,0,32,25,0,20,59,0,20,35,0,20,12,0,20,8,0,48,2,20,11,0,20,12,0,20,15,0,49,4,32,70,1,20,8,0,1,38,0,52,20,0,2,33,54,0,20,35,0,20,12,0,20,8,0,48,2,17,6,20,61,0,52,60,0,1,33,20,0,20,62,0,20,61,0,20,11,0,20,12,0,20,15,0,49,4,32,8,0,20,63,0,20,8,0,49,1,32,3,1,20,8,0,1,65,0,52,64,0,2,1,30,0,52,28,0,2,6,33,38,0,5,20,11,0,52,29,0,1,1,30,0,52,28,0,2,6,33,19,0,5,20,11,0,52,0,0,1,52,3,0,1,1,31,0,52,2,0,2,33,20,0,20,22,0,20,8,0,20,11,0,20,12,0,20,15,0,49,4,32,177,0,20,15,0,33,20,0,20,22,0,20,8,0,20,11,0,20,12,0,20,15,0,49,4,32,151,0,20,8,0,1,66,0,52,2,0,2,6,33,6,0,5,20,67,0,48,0,33,64,0,20,68,0,20,69,0,20,11,0,52,0,0,1,20,12,0,48,2,48,1,17,6,20,70,0,20,71,0,48,1,33,11,0,20,72,0,20,71,0,49,1,32,17,0,20,73,0,20,66,0,20,71,0,48,1,52,74,0,1,49,1,32,64,0,20,67,0,48,0,6,33,9,0,5,20,75,0,20,1,0,48,1,33,16,0,20,72,0,20,76,0,51,77,0,48,1,49,1,32,27,0,20,36,0,20,68,0,20,69,0,20,1,0,20,12,0,48,2,48,1,20,12,0,20,15,0,49,3,32,80,0,20,4,0,52,78,0,1,6,34,15,0,5,20,4,0,52,3,0,1,1,79,0,52,2,0,2,33,30,0,20,36,0,20,68,0,20,69,0,20,1,0,20,12,0,48,2,48,1,20,12,0,20,15,0,49,3,32,21,0,20,80,0,48,0,17,4,51,82,0,20,1,0,52,81,0,2,5,20,83,0,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"expr"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"rest"},{"t":"s","v":"name"},{"t":"s","v":"raw!"},{"t":"s","v":"render-dom-raw"},{"t":"s","v":"args"},{"t":"s","v":"env"},{"t":"s","v":"<>"},{"t":"s","v":"render-dom-fragment"},{"t":"s","v":"ns"},{"t":"s","v":"lake"},{"t":"s","v":"render-dom-lake"},{"t":"s","v":"marsh"},{"t":"s","v":"render-dom-marsh"},{"t":"s","v":"starts-with?"},{"t":"s","v":"html:"},{"t":"s","v":"render-dom-element"},{"t":"s","v":"slice"},{"t":"n","v":5},{"t":"s","v":"render-dom-form?"},{"t":"s","v":"contains?"},{"t":"s","v":"HTML_TAGS"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"keyword"},{"t":"s","v":"dispatch-render-form"},{"t":"s","v":"env-has?"},{"t":"s","v":"macro?"},{"t":"s","v":"env-get"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"expand-macro"},{"t":"s","v":"~"},{"t":"s","v":"island?"},{"t":"s","v":"scope-peek"},{"t":"s","v":"sx-render-markers"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"span"},{"t":"s","v":"dict"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,162,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,91,0,20,13,0,20,8,0,48,1,17,3,20,14,0,20,15,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,16,0,2,20,17,0,48,2,48,1,17,4,20,19,0,20,20,0,20,21,0,52,18,0,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,24,0,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"keyword-name"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"dict-set!"},{"t":"s","v":"kw-state"},{"t":"s","v":"kname"},{"t":"s","v":"kval"}]}},{"t":"s","v":"i"},{"t":"s","v":"skip"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"marker"},{"t":"s","v":"data-sx-island"},{"t":"s","v":"component-name"},{"t":"s","v":"island"},{"t":"s","v":"not"},{"t":"s","v":"empty-dict?"},{"t":"s","v":"kw-state"},{"t":"s","v":"data-sx-state"},{"t":"s","v":"sx-serialize"},{"t":"s","v":"render-dom-island"},{"t":"s","v":"component?"},{"t":"s","v":"comp"},{"t":"s","v":"render-dom-component"},{"t":"s","v":"render-dom-unknown-component"},{"t":"s","v":"index-of"},{"t":"s","v":"-"},{"t":"s","v":"deref"},{"t":"s","v":"island-scope?"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"signal?"},{"t":"s","v":"sig-or-val"},{"t":"s","v":"reactive-text"},{"t":"s","v":"create-text-node"},{"t":"s","v":"str"},{"t":"s","v":"contains-deref?"},{"t":"s","v":"computed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,49,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"expr"},{"t":"s","v":"env"}]}},{"t":"s","v":"lambda?"},{"t":"s","v":"list"},{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,1,20,6,0,52,5,0,1,52,4,0,1,33,14,0,20,7,0,20,8,0,20,6,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"x"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"not"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"frag"}]}},{"t":"s","v":"render-dom-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,3,0,32,22,0,20,1,0,1,4,0,52,0,0,2,33,6,0,20,5,0,32,3,0,20,6,0,17,4,20,7,0,20,1,0,20,8,0,48,2,17,5,20,9,0,1,10,0,2,48,2,5,51,12,0,1,14,0,1,15,0,1,16,0,4,52,13,0,4,20,17,0,52,11,0,3,5,51,19,0,20,20,0,1,10,0,48,1,52,18,0,2,5,20,21,0,1,10,0,48,1,5,20,22,0,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"tag"},{"t":"s","v":"svg"},{"t":"s","v":"SVG_NS"},{"t":"s","v":"math"},{"t":"s","v":"MATH_NS"},{"t":"s","v":"ns"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"new-ns"},{"t":"s","v":"scope-push!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,106,2,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,194,1,20,13,0,20,8,0,48,1,17,3,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,14,0,2,17,4,20,16,0,1,17,0,52,15,0,2,33,57,0,20,18,0,20,19,0,20,20,0,20,21,0,48,2,48,1,17,5,20,22,0,20,23,0,48,1,33,24,0,20,24,0,20,25,0,20,16,0,1,27,0,52,26,0,2,20,23,0,48,3,32,1,0,2,32,59,1,20,16,0,1,28,0,52,6,0,2,33,47,0,20,18,0,20,19,0,20,20,0,20,21,0,48,2,48,1,17,5,20,29,0,20,23,0,48,1,33,14,0,20,30,0,20,25,0,20,23,0,48,2,32,1,0,2,32,255,0,20,16,0,1,31,0,52,6,0,2,33,34,0,20,18,0,20,19,0,20,20,0,20,21,0,48,2,48,1,17,5,20,23,0,1,33,0,20,25,0,52,32,0,3,32,208,0,20,16,0,1,34,0,52,6,0,2,33,39,0,20,18,0,20,19,0,20,20,0,20,21,0,48,2,48,1,17,5,20,35,0,20,25,0,1,34,0,20,23,0,52,36,0,1,48,3,32,156,0,20,37,0,48,0,33,17,0,20,38,0,20,25,0,20,16,0,51,39,0,48,3,32,131,0,20,18,0,20,19,0,20,20,0,20,21,0,48,2,48,1,17,5,20,23,0,52,40,0,1,6,34,9,0,5,20,23,0,4,52,6,0,2,33,4,0,2,32,86,0,20,42,0,20,16,0,52,41,0,2,33,27,0,20,23,0,33,17,0,20,35,0,20,25,0,20,16,0,1,43,0,48,3,32,1,0,2,32,46,0,20,23,0,3,52,6,0,2,33,17,0,20,35,0,20,25,0,20,16,0,1,43,0,48,3,32,18,0,20,35,0,20,25,0,20,16,0,20,23,0,52,36,0,1,48,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,121,0,20,45,0,20,46,0,52,41,0,2,52,44,0,1,33,78,0,20,47,0,20,8,0,20,21,0,20,48,0,48,3,17,3,20,50,0,52,49,0,1,6,33,6,0,5,20,37,0,48,0,33,14,0,20,51,0,20,25,0,51,52,0,48,2,32,25,0,20,50,0,52,49,0,1,33,4,0,2,32,11,0,20,53,0,20,25,0,20,50,0,48,2,32,1,0,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"keyword-name"},{"t":"s","v":"nth"},{"t":"s","v":"starts-with?"},{"t":"s","v":"attr-name"},{"t":"s","v":"on-"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"attr-expr"},{"t":"s","v":"env"},{"t":"s","v":"callable?"},{"t":"s","v":"attr-val"},{"t":"s","v":"dom-on"},{"t":"s","v":"el"},{"t":"s","v":"slice"},{"t":"n","v":3},{"t":"s","v":"bind"},{"t":"s","v":"signal?"},{"t":"s","v":"bind-input"},{"t":"s","v":"ref"},{"t":"s","v":"dict-set!"},{"t":"s","v":"current"},{"t":"s","v":"key"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"str"},{"t":"s","v":"island-scope?"},{"t":"s","v":"reactive-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,49,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"attr-expr"},{"t":"s","v":"env"}]}},{"t":"s","v":"nil?"},{"t":"s","v":"contains?"},{"t":"s","v":"BOOLEAN_ATTRS"},{"t":"s","v":""},{"t":"s","v":"not"},{"t":"s","v":"VOID_ELEMENTS"},{"t":"s","v":"tag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"new-ns"},{"t":"s","v":"spread?"},{"t":"s","v":"child"},{"t":"s","v":"reactive-spread"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"arg"},{"t":"s","v":"env"},{"t":"s","v":"new-ns"}]}},{"t":"s","v":"dom-append"}]}},{"t":"s","v":"dict"},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,2,0,1,4,0,52,3,0,2,33,71,0,20,5,0,20,6,0,1,4,0,48,2,17,2,20,7,0,20,6,0,1,4,0,20,8,0,6,33,15,0,5,20,8,0,1,10,0,52,3,0,2,52,9,0,1,33,16,0,20,8,0,1,12,0,20,13,0,52,11,0,3,32,3,0,20,13,0,49,3,32,102,0,20,2,0,1,14,0,52,3,0,2,33,71,0,20,5,0,20,6,0,1,14,0,48,2,17,2,20,7,0,20,6,0,1,14,0,20,8,0,6,33,15,0,5,20,8,0,1,10,0,52,3,0,2,52,9,0,1,33,16,0,20,8,0,1,15,0,20,13,0,52,11,0,3,32,3,0,20,13,0,49,3,32,18,0,20,7,0,20,6,0,20,2,0,20,13,0,52,11,0,1,49,3,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"spread-dict"},{"t":"s","v":"key"},{"t":"s","v":"="},{"t":"s","v":"class"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"existing"},{"t":"s","v":"not"},{"t":"s","v":""},{"t":"s","v":"str"},{"t":"s","v":" "},{"t":"s","v":"val"},{"t":"s","v":"style"},{"t":"s","v":";"}]}},{"t":"s","v":"keys"},{"t":"s","v":"spread-dict"}]}},{"t":"s","v":"scope-emitted"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"el"}]}},{"t":"s","v":"render-dom-component"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,4,52,1,0,0,17,5,51,3,0,1,4,0,1,5,0,1,6,0,4,52,0,0,4,20,7,0,52,2,0,3,5,20,8,0,20,10,0,52,9,0,1,20,11,0,48,2,17,6,51,13,0,20,10,0,52,14,0,1,52,12,0,2,5,20,10,0,52,15,0,1,33,35,0,20,16,0,48,0,17,7,51,17,0,20,18,0,52,12,0,2,5,20,19,0,20,20,0,1,18,0,20,21,0,48,3,32,1,0,2,5,20,22,0,20,10,0,52,23,0,1,20,20,0,20,24,0,49,3,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,169,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,86,0,20,13,0,20,14,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,15,0,2,20,16,0,48,2,48,1,17,3,20,18,0,20,19,0,20,8,0,48,1,20,20,0,52,17,0,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,21,0,20,22,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"dict-set!"},{"t":"s","v":"kwargs"},{"t":"s","v":"keyword-name"},{"t":"s","v":"val"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"env-merge"},{"t":"s","v":"component-closure"},{"t":"s","v":"comp"},{"t":"s","v":"env"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,33,13,0,20,4,0,20,2,0,52,5,0,2,32,1,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"dict-has?"},{"t":"s","v":"kwargs"},{"t":"s","v":"dict-get"}]}},{"t":"s","v":"component-params"},{"t":"s","v":"component-has-children?"},{"t":"s","v":"create-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,1,20,6,0,52,5,0,1,52,4,0,1,33,14,0,20,7,0,20,8,0,20,6,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"c"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"not"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"child-frag"}]}},{"t":"s","v":"children"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"child-frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"component-body"},{"t":"s","v":"ns"}]}},{"t":"s","v":"render-dom-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,3,51,2,0,20,3,0,52,1,0,2,5,20,4,0,50],"constants":[{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,1,20,6,0,52,5,0,1,52,4,0,1,33,14,0,20,7,0,20,8,0,20,6,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"x"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"not"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"args"},{"t":"s","v":"frag"}]}},{"t":"s","v":"render-dom-raw"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,2,51,2,0,20,3,0,52,1,0,2,5,20,4,0,50],"constants":[{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,48,1,17,1,20,6,0,52,5,0,1,1,7,0,52,4,0,2,33,19,0,20,8,0,20,9,0,20,10,0,20,6,0,48,1,49,2,32,74,0,20,6,0,52,5,0,1,1,11,0,52,4,0,2,33,19,0,20,8,0,20,9,0,20,12,0,20,6,0,48,1,49,2,32,38,0,20,6,0,52,14,0,1,52,13,0,1,33,23,0,20,8,0,20,9,0,20,15,0,20,6,0,52,16,0,1,48,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"arg"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"string"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"dom-parse-html"},{"t":"s","v":"dom-node"},{"t":"s","v":"dom-clone"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"create-text-node"},{"t":"s","v":"str"}]}},{"t":"s","v":"args"},{"t":"s","v":"frag"}]}},{"t":"s","v":"render-dom-unknown-component"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,2,0,20,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"error"},{"t":"s","v":"str"},{"t":"s","v":"Unknown component: "},{"t":"s","v":"name"}]}},{"t":"s","v":"RENDER_DOM_FORMS"},{"t":"s","v":"list"},{"t":"s","v":"if"},{"t":"s","v":"when"},{"t":"s","v":"cond"},{"t":"s","v":"case"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"letrec"},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"s","v":"define"},{"t":"s","v":"defcomp"},{"t":"s","v":"defisland"},{"t":"s","v":"defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"map"},{"t":"s","v":"map-indexed"},{"t":"s","v":"filter"},{"t":"s","v":"for-each"},{"t":"s","v":"portal"},{"t":"s","v":"error-boundary"},{"t":"s","v":"scope"},{"t":"s","v":"provide"},{"t":"s","v":"cyst"},{"t":"s","v":"render-dom-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"RENDER_DOM_FORMS"},{"t":"s","v":"name"}]}},{"t":"s","v":"dispatch-render-form"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,236,0,20,3,0,48,0,33,124,0,20,4,0,1,5,0,48,1,17,4,52,6,0,0,17,5,2,17,6,20,7,0,51,8,0,48,1,5,20,10,0,52,9,0,1,33,6,0,20,10,0,32,77,0,20,11,0,48,0,17,7,20,12,0,20,13,0,20,14,0,48,2,5,20,10,0,33,47,0,20,15,0,20,10,0,48,1,33,11,0,20,16,0,20,10,0,48,1,32,7,0,20,10,0,52,6,0,1,21,17,0,5,20,12,0,20,13,0,20,10,0,48,2,32,1,0,2,5,20,13,0,32,101,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,4,20,24,0,33,24,0,20,25,0,20,21,0,1,26,0,52,20,0,2,20,23,0,20,27,0,49,3,32,46,0,20,21,0,52,29,0,1,1,30,0,52,28,0,2,33,24,0,20,25,0,20,21,0,1,30,0,52,20,0,2,20,23,0,20,27,0,49,3,32,5,0,20,11,0,49,0,32,30,8,20,1,0,1,31,0,52,0,0,2,33,172,0,20,3,0,48,0,33,91,0,20,4,0,1,32,0,48,1,17,4,52,6,0,0,17,5,2,17,6,20,7,0,51,33,0,48,1,5,20,10,0,52,9,0,1,33,6,0,20,10,0,32,44,0,20,11,0,48,0,17,7,20,12,0,20,13,0,20,14,0,48,2,5,20,10,0,33,14,0,20,12,0,20,13,0,20,10,0,48,2,32,1,0,2,5,20,13,0,32,70,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,52,34,0,1,33,8,0,20,11,0,49,0,32,32,0,20,11,0,48,0,17,4,51,36,0,1,26,0,20,21,0,52,29,0,1,52,37,0,2,52,35,0,2,5,20,13,0,32,101,7,20,1,0,1,38,0,52,0,0,2,33,147,0,20,3,0,48,0,33,91,0,20,4,0,1,39,0,48,1,17,4,52,6,0,0,17,5,2,17,6,20,7,0,51,40,0,48,1,5,20,10,0,52,9,0,1,33,6,0,20,10,0,32,44,0,20,11,0,48,0,17,7,20,12,0,20,13,0,20,14,0,48,2,5,20,10,0,33,14,0,20,12,0,20,13,0,20,10,0,48,2,32,1,0,2,5,20,13,0,32,45,0,20,41,0,20,21,0,52,42,0,1,20,23,0,48,2,17,4,20,43,0,33,17,0,20,25,0,20,43,0,20,23,0,20,27,0,49,3,32,5,0,20,11,0,49,0,32,197,6,20,1,0,1,44,0,52,0,0,2,33,30,0,20,25,0,20,18,0,20,19,0,20,21,0,20,23,0,48,2,48,1,20,23,0,20,27,0,49,3,32,154,6,20,1,0,1,45,0,52,0,0,2,6,34,11,0,5,20,1,0,1,46,0,52,0,0,2,33,96,0,20,47,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,17,4,20,21,0,52,29,0,1,1,30,0,52,0,0,2,33,24,0,20,25,0,20,21,0,1,26,0,52,20,0,2,20,48,0,20,27,0,49,3,32,32,0,20,11,0,48,0,17,5,51,49,0,1,26,0,20,21,0,52,29,0,1,52,37,0,2,52,35,0,2,5,20,13,0,32,30,6,20,1,0,1,50,0,52,0,0,2,33,113,0,20,21,0,1,22,0,52,20,0,2,17,4,20,21,0,1,26,0,52,51,0,2,17,5,20,52,0,20,23,0,48,1,17,6,51,53,0,20,54,0,52,35,0,2,5,51,55,0,20,54,0,52,35,0,2,5,20,56,0,52,29,0,1,1,22,0,52,28,0,2,33,17,0,51,57,0,20,56,0,52,58,0,1,52,35,0,2,32,1,0,2,5,20,25,0,20,56,0,52,59,0,1,20,48,0,20,27,0,49,3,32,160,5,20,1,0,1,60,0,52,0,0,2,6,34,11,0,5,20,1,0,1,61,0,52,0,0,2,33,76,0,20,21,0,52,29,0,1,1,26,0,52,0,0,2,33,24,0,20,25,0,20,21,0,1,22,0,52,20,0,2,20,23,0,20,27,0,49,3,32,32,0,20,11,0,48,0,17,4,51,62,0,1,22,0,20,21,0,52,29,0,1,52,37,0,2,52,35,0,2,5,20,13,0,32,56,5,20,63,0,20,1,0,48,1,33,25,0,20,18,0,20,19,0,20,21,0,20,23,0,48,2,48,1,5,20,11,0,49,0,32,20,5,20,1,0,1,64,0,52,0,0,2,33,38,1,20,21,0,1,26,0,52,20,0,2,17,4,20,3,0,48,0,6,33,81,0,5,20,66,0,52,65,0,1,1,6,0,52,0,0,2,6,33,62,0,5,20,66,0,52,29,0,1,1,22,0,52,28,0,2,6,33,43,0,5,20,66,0,52,67,0,1,52,65,0,1,1,68,0,52,0,0,2,6,33,20,0,5,20,69,0,20,66,0,52,67,0,1,48,1,1,70,0,52,0,0,2,33,115,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,5,20,18,0,20,19,0,20,66,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,6,20,71,0,20,72,0,48,1,33,20,0,20,73,0,20,74,0,20,72,0,20,23,0,20,27,0,49,4,32,31,0,20,70,0,20,72,0,48,1,17,7,20,11,0,48,0,17,8,51,75,0,20,76,0,52,35,0,2,5,20,13,0,32,71,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,5,20,18,0,20,19,0,20,21,0,1,26,0,52,20,0,2,20,23,0,48,2,48,1,17,6,20,11,0,48,0,17,7,51,75,0,20,76,0,52,35,0,2,5,20,13,0,32,225,3,20,1,0,1,77,0,52,0,0,2,33,74,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,4,20,18,0,20,19,0,20,21,0,1,26,0,52,20,0,2,20,23,0,48,2,48,1,17,5,20,11,0,48,0,17,6,51,79,0,20,76,0,52,78,0,2,5,20,13,0,32,138,3,20,1,0,1,80,0,52,0,0,2,33,30,0,20,25,0,20,18,0,20,19,0,20,21,0,20,23,0,48,2,48,1,20,23,0,20,27,0,49,3,32,95,3,20,1,0,1,81,0,52,0,0,2,33,21,0,20,82,0,20,21,0,52,42,0,1,20,23,0,20,27,0,49,3,32,61,3,20,1,0,1,83,0,52,0,0,2,33,21,0,20,84,0,20,21,0,52,42,0,1,20,23,0,20,27,0,49,3,32,27,3,20,1,0,1,35,0,52,0,0,2,33,74,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,4,20,18,0,20,19,0,20,21,0,1,26,0,52,20,0,2,20,23,0,48,2,48,1,17,5,20,11,0,48,0,17,6,51,75,0,20,76,0,52,35,0,2,5,20,13,0,32,196,2,20,1,0,1,85,0,52,0,0,2,33,202,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,4,20,21,0,1,26,0,52,51,0,2,17,5,2,17,6,2,17,7,20,11,0,48,0,17,8,20,87,0,52,29,0,1,1,26,0,52,86,0,2,6,33,43,0,5,20,87,0,52,67,0,1,52,65,0,1,1,88,0,52,0,0,2,6,33,20,0,5,20,89,0,20,87,0,52,67,0,1,48,1,1,90,0,52,0,0,2,33,43,0,20,18,0,20,19,0,20,87,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,21,91,0,5,20,87,0,1,26,0,52,51,0,2,21,92,0,32,6,0,20,87,0,21,92,0,5,20,93,0,20,94,0,20,91,0,48,2,5,51,95,0,20,92,0,52,35,0,2,5,20,96,0,20,94,0,48,1,5,20,13,0,32,237,1,20,1,0,1,97,0,52,0,0,2,33,106,0,20,18,0,20,19,0,20,21,0,1,22,0,52,20,0,2,20,23,0,48,2,48,1,17,4,20,18,0,20,19,0,20,21,0,1,26,0,52,20,0,2,20,23,0,48,2,48,1,17,5,20,11,0,48,0,17,6,20,93,0,20,98,0,20,99,0,48,2,5,51,36,0,1,30,0,20,21,0,52,29,0,1,52,37,0,2,52,35,0,2,5,20,96,0,20,98,0,48,1,5,20,13,0,32,118,1,20,1,0,1,100,0,52,0,0,2,33,78,1,20,21,0,52,29,0,1,1,26,0,52,28,0,2,6,33,49,0,5,20,21,0,1,22,0,52,20,0,2,52,65,0,1,1,88,0,52,0,0,2,6,33,23,0,5,20,89,0,20,21,0,1,22,0,52,20,0,2,48,1,1,101,0,52,0,0,2,33,30,0,20,18,0,20,19,0,20,21,0,1,26,0,52,20,0,2,20,23,0,48,2,48,1,52,102,0,1,32,5,0,20,103,0,48,0,17,4,20,105,0,20,106,0,52,104,0,2,17,5,20,107,0,6,33,12,0,5,20,108,0,20,107,0,1,109,0,48,2,33,6,0,20,107,0,32,184,0,20,110,0,1,111,0,2,48,2,17,6,52,6,0,0,17,7,20,21,0,52,29,0,1,1,26,0,52,28,0,2,6,33,49,0,5,20,21,0,1,22,0,52,20,0,2,52,65,0,1,1,88,0,52,0,0,2,6,33,23,0,5,20,89,0,20,21,0,1,22,0,52,20,0,2,48,1,1,101,0,52,0,0,2,33,13,0,20,21,0,1,30,0,52,51,0,2,32,10,0,20,21,0,1,22,0,52,51,0,2,17,8,20,112,0,20,113,0,1,114,0,20,106,0,48,3,5,20,115,0,51,116,0,51,117,0,48,2,17,9,20,12,0,20,113,0,20,118,0,48,2,5,20,119,0,20,113,0,1,120,0,20,121,0,48,3,5,20,105,0,20,106,0,20,113,0,52,122,0,3,5,20,113,0,32,27,0,20,25,0,20,18,0,20,19,0,20,21,0,20,23,0,48,2,48,1,20,23,0,20,27,0,49,3,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"name"},{"t":"s","v":"if"},{"t":"s","v":"island-scope?"},{"t":"s","v":"create-comment"},{"t":"s","v":"r-if"},{"t":"s","v":"list"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,20,5,0,48,2,48,1,17,1,20,6,0,33,24,0,20,7,0,20,3,0,1,8,0,52,2,0,2,20,5,0,20,9,0,48,3,32,46,0,20,3,0,52,11,0,1,1,12,0,52,10,0,2,33,24,0,20,7,0,20,3,0,1,12,0,52,2,0,2,20,5,0,20,9,0,48,3,32,5,0,20,13,0,48,0,17,0,20,14,0,20,15,0,48,1,33,58,0,51,17,0,20,18,0,52,16,0,2,5,20,19,0,20,20,0,48,1,33,11,0,20,21,0,20,20,0,48,1,32,7,0,20,20,0,52,22,0,1,21,18,0,5,20,23,0,20,15,0,20,20,0,49,2,32,6,0,20,20,0,21,24,0,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"n","v":1},{"t":"s","v":"env"},{"t":"s","v":"cond-val"},{"t":"s","v":"render-to-dom"},{"t":"n","v":2},{"t":"s","v":"ns"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":3},{"t":"s","v":"create-fragment"},{"t":"s","v":"dom-parent"},{"t":"s","v":"marker"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-remove"},{"t":"s","v":"n"}]}},{"t":"s","v":"current-nodes"},{"t":"s","v":"dom-is-fragment?"},{"t":"s","v":"result"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"list"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"initial-result"}]}},{"t":"s","v":"spread?"},{"t":"s","v":"initial-result"},{"t":"s","v":"create-fragment"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"marker"},{"t":"s","v":"dom-is-fragment?"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"current-nodes"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"n","v":1},{"t":"s","v":"env"},{"t":"s","v":"cond-val"},{"t":"s","v":"render-to-dom"},{"t":"n","v":2},{"t":"s","v":"ns"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":3},{"t":"s","v":"when"},{"t":"s","v":"r-when"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,104,0,51,3,0,20,4,0,52,2,0,2,5,52,5,0,0,21,4,0,5,20,6,0,20,7,0,20,9,0,1,10,0,52,8,0,2,20,11,0,48,2,48,1,33,55,0,20,12,0,48,0,17,0,51,13,0,1,15,0,20,9,0,52,16,0,1,52,14,0,2,52,2,0,2,5,20,17,0,20,18,0,48,1,21,4,0,5,20,19,0,20,1,0,20,18,0,49,2,32,1,0,2,32,77,0,20,6,0,20,7,0,20,9,0,1,10,0,52,8,0,2,20,11,0,48,2,48,1,33,50,0,20,12,0,48,0,17,0,51,13,0,1,15,0,20,9,0,52,16,0,1,52,14,0,2,52,2,0,2,5,20,17,0,20,18,0,48,1,21,4,0,5,20,18,0,21,20,0,32,1,0,2,50],"constants":[{"t":"s","v":"dom-parent"},{"t":"s","v":"marker"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-remove"},{"t":"s","v":"n"}]}},{"t":"s","v":"current-nodes"},{"t":"s","v":"list"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"n","v":1},{"t":"s","v":"env"},{"t":"s","v":"create-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,20,6,0,20,7,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"range"},{"t":"n","v":2},{"t":"s","v":"len"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"frag"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"initial-result"}]}},{"t":"s","v":"not"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,20,6,0,20,7,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"range"},{"t":"s","v":"cond"},{"t":"s","v":"r-cond"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,52,1,0,1,20,3,0,48,2,17,0,20,4,0,20,5,0,48,1,33,92,0,51,7,0,20,8,0,52,6,0,2,5,52,9,0,0,21,8,0,5,20,10,0,33,63,0,20,11,0,20,10,0,20,3,0,20,12,0,48,3,17,1,20,13,0,20,14,0,48,1,33,11,0,20,15,0,20,14,0,48,1,32,7,0,20,14,0,52,9,0,1,21,8,0,5,20,16,0,20,5,0,20,14,0,49,2,32,1,0,2,32,65,0,20,10,0,33,58,0,20,11,0,20,10,0,20,3,0,20,12,0,48,3,17,1,20,13,0,20,14,0,48,1,33,11,0,20,15,0,20,14,0,48,1,32,7,0,20,14,0,52,9,0,1,21,8,0,5,20,14,0,21,17,0,32,1,0,2,50],"constants":[{"t":"s","v":"eval-cond"},{"t":"s","v":"rest"},{"t":"s","v":"expr"},{"t":"s","v":"env"},{"t":"s","v":"dom-parent"},{"t":"s","v":"marker"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-remove"},{"t":"s","v":"n"}]}},{"t":"s","v":"current-nodes"},{"t":"s","v":"list"},{"t":"s","v":"branch"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"ns"},{"t":"s","v":"dom-is-fragment?"},{"t":"s","v":"result"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"initial-result"}]}},{"t":"s","v":"eval-cond"},{"t":"s","v":"rest"},{"t":"s","v":"branch"},{"t":"s","v":"case"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"process-bindings"},{"t":"s","v":"local"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,20,5,0,48,3,17,1,20,8,0,52,7,0,1,52,6,0,1,33,14,0,20,9,0,20,10,0,20,8,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"local"},{"t":"s","v":"ns"},{"t":"s","v":"not"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"letrec"},{"t":"s","v":"slice"},{"t":"s","v":"env-extend"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,11,0,20,3,0,52,2,0,1,52,6,0,1,17,1,20,7,0,20,8,0,20,9,0,2,49,3,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"str"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"pname"}]}},{"t":"s","v":"bindings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,11,0,20,3,0,52,2,0,1,52,6,0,1,17,1,20,7,0,20,8,0,20,9,0,20,10,0,20,11,0,20,3,0,1,13,0,52,12,0,2,20,8,0,48,2,48,1,49,3,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"str"},{"t":"s","v":"env-set!"},{"t":"s","v":"local"},{"t":"s","v":"pname"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"n","v":1}]}},{"t":"s","v":"body"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,49,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"e"},{"t":"s","v":"local"}]}},{"t":"s","v":"init"},{"t":"s","v":"last"},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,20,5,0,48,3,17,1,20,8,0,52,7,0,1,52,6,0,1,33,14,0,20,9,0,20,10,0,20,8,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"not"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"definition-form?"},{"t":"s","v":"map"},{"t":"s","v":"type-of"},{"t":"s","v":"coll-expr"},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"deref"},{"t":"s","v":"signal?"},{"t":"s","v":"sig"},{"t":"s","v":"reactive-list"},{"t":"s","v":"f"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,24,0,20,2,0,20,1,0,20,4,0,52,3,0,1,20,5,0,20,6,0,48,4,32,25,0,20,7,0,20,1,0,20,4,0,52,3,0,1,52,8,0,2,20,5,0,20,6,0,48,3,17,1,20,9,0,20,10,0,20,11,0,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"render-lambda-dom"},{"t":"s","v":"list"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"apply"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"val"}]}},{"t":"s","v":"coll"},{"t":"s","v":"map-indexed"},{"t":"s","v":"for-each-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,27,0,20,2,0,20,1,0,20,4,0,20,5,0,52,3,0,2,20,6,0,20,7,0,48,4,32,28,0,20,8,0,20,1,0,20,4,0,20,5,0,52,3,0,2,52,9,0,2,20,6,0,20,7,0,48,3,17,2,20,10,0,20,11,0,20,12,0,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"render-lambda-dom"},{"t":"s","v":"list"},{"t":"s","v":"i"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"apply"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"val"}]}},{"t":"s","v":"filter"},{"t":"s","v":"portal"},{"t":"s","v":"render-dom-portal"},{"t":"s","v":"error-boundary"},{"t":"s","v":"render-dom-error-boundary"},{"t":"s","v":"scope"},{"t":"s","v":">="},{"t":"s","v":"rest-args"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"value"},{"t":"s","v":"scope-val"},{"t":"s","v":"body-exprs"},{"t":"s","v":"scope-push!"},{"t":"s","v":"scope-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"e"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"scope-pop!"},{"t":"s","v":"provide"},{"t":"s","v":"prov-name"},{"t":"s","v":"prov-val"},{"t":"s","v":"cyst"},{"t":"s","v":"key"},{"t":"s","v":"str"},{"t":"s","v":"next-cyst-id"},{"t":"s","v":"get"},{"t":"s","v":"*memo-cache*"},{"t":"s","v":"cyst-key"},{"t":"s","v":"cached"},{"t":"s","v":"host-get"},{"t":"s","v":"isConnected"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"container"},{"t":"s","v":"data-sx-cyst"},{"t":"s","v":"with-island-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"disposers"},{"t":"s","v":"d"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,0,51,2,0,20,3,0,52,1,0,2,5,20,4,0,50],"constants":[{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"child"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"body-exprs"},{"t":"s","v":"frag"}]}},{"t":"s","v":"body-dom"},{"t":"s","v":"dom-set-data"},{"t":"s","v":"sx-disposers"},{"t":"s","v":"disposers"},{"t":"s","v":"dict-set!"}]}},{"t":"s","v":"render-lambda-dom"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,52,1,0,1,20,3,0,48,2,17,4,51,5,0,20,2,0,52,6,0,1,52,4,0,2,5,20,7,0,20,2,0,52,8,0,1,20,9,0,20,10,0,49,3,50],"constants":[{"t":"s","v":"env-merge"},{"t":"s","v":"lambda-closure"},{"t":"s","v":"f"},{"t":"s","v":"env"},{"t":"s","v":"for-each-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"nth"},{"t":"s","v":"args"},{"t":"s","v":"i"}]}},{"t":"s","v":"lambda-params"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"lambda-body"},{"t":"s","v":"local"},{"t":"s","v":"ns"}]}},{"t":"s","v":"render-dom-island"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,4,52,1,0,0,17,5,51,3,0,1,4,0,1,5,0,1,6,0,4,52,0,0,4,20,7,0,52,2,0,3,5,20,8,0,20,10,0,52,9,0,1,20,11,0,48,2,17,6,20,10,0,52,12,0,1,17,7,51,14,0,20,10,0,52,15,0,1,52,13,0,2,5,20,10,0,52,16,0,1,33,35,0,20,17,0,48,0,17,8,51,18,0,20,19,0,52,13,0,2,5,20,20,0,20,21,0,1,19,0,20,22,0,48,3,32,1,0,2,5,20,23,0,1,24,0,2,48,2,17,8,52,1,0,0,17,9,20,25,0,20,26,0,1,27,0,20,28,0,48,3,5,20,31,0,52,30,0,1,52,29,0,1,33,22,0,20,25,0,20,26,0,1,32,0,20,33,0,20,31,0,48,1,48,3,32,1,0,2,5,20,34,0,20,26,0,1,35,0,48,2,5,20,36,0,51,37,0,51,38,0,48,2,17,10,20,39,0,20,26,0,20,40,0,48,2,5,20,41,0,20,26,0,1,42,0,20,43,0,48,3,5,20,26,0,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,169,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,86,0,20,13,0,20,14,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,15,0,2,20,16,0,48,2,48,1,17,3,20,18,0,20,19,0,20,8,0,48,1,20,20,0,52,17,0,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,21,0,20,22,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"dict-set!"},{"t":"s","v":"kwargs"},{"t":"s","v":"keyword-name"},{"t":"s","v":"val"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"env-merge"},{"t":"s","v":"component-closure"},{"t":"s","v":"island"},{"t":"s","v":"env"},{"t":"s","v":"component-name"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,33,13,0,20,4,0,20,2,0,52,5,0,2,32,1,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"dict-has?"},{"t":"s","v":"kwargs"},{"t":"s","v":"dict-get"}]}},{"t":"s","v":"component-params"},{"t":"s","v":"component-has-children?"},{"t":"s","v":"create-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"child-frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"c"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"children"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"child-frag"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"span"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"container"},{"t":"s","v":"data-sx-island"},{"t":"s","v":"island-name"},{"t":"s","v":"not"},{"t":"s","v":"empty-dict?"},{"t":"s","v":"kwargs"},{"t":"s","v":"data-sx-state"},{"t":"s","v":"sx-serialize"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"island-hydrated"},{"t":"s","v":"with-island-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"disposers"},{"t":"s","v":"disposable"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,52,1,0,1,20,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"component-body"},{"t":"s","v":"island"},{"t":"s","v":"local"},{"t":"s","v":"ns"}]}},{"t":"s","v":"dom-append"},{"t":"s","v":"body-dom"},{"t":"s","v":"dom-set-data"},{"t":"s","v":"sx-disposers"},{"t":"s","v":"disposers"}]}},{"t":"s","v":"render-dom-lake"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,17,3,1,0,0,17,4,52,1,0,0,17,5,51,3,0,1,5,0,1,6,0,1,7,0,4,52,4,0,4,20,8,0,52,2,0,3,5,20,9,0,20,10,0,2,48,2,17,6,20,11,0,20,12,0,1,13,0,20,14,0,6,34,4,0,5,1,15,0,48,3,5,51,17,0,20,18,0,52,16,0,2,5,20,12,0,50],"constants":[{"t":"s","v":"div"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,206,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,123,0,20,13,0,20,8,0,48,1,17,3,20,14,0,20,15,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,16,0,2,20,17,0,48,2,48,1,17,4,20,18,0,1,19,0,52,6,0,2,33,9,0,20,20,0,21,21,0,32,23,0,20,18,0,1,22,0,52,6,0,2,33,9,0,20,20,0,21,23,0,32,1,0,2,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,24,0,20,25,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"keyword-name"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"kname"},{"t":"s","v":"id"},{"t":"s","v":"kval"},{"t":"s","v":"lake-id"},{"t":"s","v":"tag"},{"t":"s","v":"lake-tag"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"dict"},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"lake-tag"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-lake"},{"t":"s","v":"lake-id"},{"t":"s","v":""},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"el"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"c"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"children"}]}},{"t":"s","v":"render-dom-marsh"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,17,3,1,0,0,17,4,2,17,5,52,1,0,0,17,6,51,3,0,1,5,0,1,6,0,1,7,0,4,52,4,0,4,20,8,0,52,2,0,3,5,20,9,0,20,10,0,2,48,2,17,7,20,11,0,20,12,0,1,13,0,20,14,0,6,34,4,0,5,1,15,0,48,3,5,20,16,0,33,17,0,20,17,0,20,12,0,1,18,0,20,16,0,48,3,32,1,0,2,5,20,17,0,20,12,0,1,19,0,20,20,0,48,3,5,51,22,0,20,23,0,52,21,0,2,5,20,12,0,50],"constants":[{"t":"s","v":"div"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,228,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,145,0,20,13,0,20,8,0,48,1,17,3,20,14,0,20,15,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,16,0,2,20,17,0,48,2,48,1,17,4,20,18,0,1,19,0,52,6,0,2,33,9,0,20,20,0,21,21,0,32,45,0,20,18,0,1,22,0,52,6,0,2,33,9,0,20,20,0,21,23,0,32,23,0,20,18,0,1,24,0,52,6,0,2,33,9,0,20,20,0,21,25,0,32,1,0,2,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,26,0,20,27,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"keyword-name"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"kname"},{"t":"s","v":"id"},{"t":"s","v":"kval"},{"t":"s","v":"marsh-id"},{"t":"s","v":"tag"},{"t":"s","v":"marsh-tag"},{"t":"s","v":"transform"},{"t":"s","v":"marsh-transform"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"dict"},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"marsh-tag"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-marsh"},{"t":"s","v":"marsh-id"},{"t":"s","v":""},{"t":"s","v":"marsh-transform"},{"t":"s","v":"dom-set-data"},{"t":"s","v":"sx-marsh-transform"},{"t":"s","v":"sx-marsh-env"},{"t":"s","v":"env"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"el"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"c"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"children"}]}},{"t":"s","v":"reactive-text"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,48,1,52,1,0,1,48,1,17,1,20,4,0,51,5,0,48,1,5,20,6,0,50],"constants":[{"t":"s","v":"create-text-node"},{"t":"s","v":"str"},{"t":"s","v":"deref"},{"t":"s","v":"sig"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,20,4,0,48,1,52,2,0,1,49,2,50],"constants":[{"t":"s","v":"dom-set-text-content"},{"t":"s","v":"node"},{"t":"s","v":"str"},{"t":"s","v":"deref"},{"t":"s","v":"sig"}]}},{"t":"s","v":"node"}]}},{"t":"s","v":"reactive-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,17,3,20,5,0,52,4,0,1,33,6,0,20,6,0,32,13,0,20,5,0,1,8,0,20,6,0,52,7,0,3,17,4,20,9,0,20,1,0,1,2,0,20,10,0,48,3,5,20,11,0,51,12,0,49,1,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-reactive-attrs"},{"t":"s","v":""},{"t":"s","v":"empty?"},{"t":"s","v":"existing"},{"t":"s","v":"attr-name"},{"t":"s","v":"str"},{"t":"s","v":","},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"updated"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,0,20,1,0,20,2,0,48,1,33,11,0,20,3,0,20,2,0,48,1,32,3,0,20,2,0,17,1,20,5,0,52,4,0,1,6,34,9,0,5,20,5,0,4,52,6,0,2,33,14,0,20,7,0,20,8,0,20,9,0,49,2,32,46,0,20,5,0,3,52,6,0,2,33,17,0,20,10,0,20,8,0,20,9,0,1,11,0,49,3,32,18,0,20,10,0,20,8,0,20,9,0,20,5,0,52,12,0,1,49,3,50],"constants":[{"t":"s","v":"compute-fn"},{"t":"s","v":"signal?"},{"t":"s","v":"raw"},{"t":"s","v":"deref"},{"t":"s","v":"nil?"},{"t":"s","v":"val"},{"t":"s","v":"="},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"el"},{"t":"s","v":"attr-name"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":""},{"t":"s","v":"str"}]}}]}},{"t":"s","v":"reactive-spread"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,52,0,0,0,17,3,20,1,0,20,2,0,1,3,0,48,2,6,34,4,0,5,1,4,0,17,4,20,5,0,20,2,0,1,3,0,20,7,0,52,6,0,1,33,6,0,1,8,0,32,10,0,20,7,0,1,10,0,52,9,0,2,48,3,5,20,11,0,51,12,0,49,1,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-reactive-attrs"},{"t":"s","v":""},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"empty?"},{"t":"s","v":"existing"},{"t":"s","v":"_spread"},{"t":"s","v":"str"},{"t":"s","v":",_spread"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,100,0,20,3,0,20,4,0,1,5,0,48,2,6,34,4,0,5,1,6,0,17,0,51,8,0,20,10,0,1,11,0,52,9,0,2,52,7,0,2,17,1,51,12,0,20,13,0,52,7,0,2,17,2,20,14,0,52,1,0,1,33,14,0,20,15,0,20,4,0,1,5,0,48,2,32,21,0,20,16,0,20,4,0,1,5,0,1,11,0,20,14,0,52,17,0,2,48,3,32,1,0,2,5,51,19,0,20,20,0,52,18,0,2,5,20,21,0,48,0,17,0,20,23,0,52,22,0,1,33,192,0,20,23,0,52,24,0,1,17,1,20,26,0,1,5,0,52,25,0,2,6,34,4,0,5,1,6,0,17,2,51,8,0,20,27,0,1,11,0,52,9,0,2,52,7,0,2,17,3,51,28,0,20,26,0,52,29,0,1,52,7,0,2,17,4,20,30,0,21,2,0,5,20,31,0,21,20,0,5,20,30,0,52,1,0,1,52,0,0,1,33,79,0,20,3,0,20,4,0,1,5,0,48,2,6,34,4,0,5,1,6,0,17,5,20,16,0,20,4,0,1,5,0,20,10,0,6,33,15,0,5,20,10,0,1,6,0,52,32,0,2,52,0,0,1,33,16,0,20,10,0,1,11,0,20,27,0,52,33,0,3,32,3,0,20,27,0,48,3,32,1,0,2,5,51,34,0,20,31,0,52,18,0,2,5,20,35,0,49,0,32,15,0,52,36,0,0,21,2,0,5,52,36,0,0,21,20,0,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"prev-classes"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"class"},{"t":"s","v":""},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"c"},{"t":"s","v":""}]}},{"t":"s","v":"split"},{"t":"s","v":"current"},{"t":"s","v":" "},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,2,0,20,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"pc"},{"t":"s","v":"c"}]}},{"t":"s","v":"prev-classes"}]}},{"t":"s","v":"tokens"},{"t":"s","v":"kept"},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"join"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"el"},{"t":"s","v":"k"}]}},{"t":"s","v":"prev-extra-keys"},{"t":"s","v":"render-fn"},{"t":"s","v":"spread?"},{"t":"s","v":"result"},{"t":"s","v":"spread-attrs"},{"t":"s","v":"dict-get"},{"t":"s","v":"attrs"},{"t":"s","v":"cls-str"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"k"},{"t":"s","v":"class"}]}},{"t":"s","v":"keys"},{"t":"s","v":"new-classes"},{"t":"s","v":"extra-keys"},{"t":"s","v":"="},{"t":"s","v":"str"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,5,0,20,2,0,52,4,0,2,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"dom-set-attr"},{"t":"s","v":"el"},{"t":"s","v":"k"},{"t":"s","v":"str"},{"t":"s","v":"dict-get"},{"t":"s","v":"attrs"}]}},{"t":"s","v":"run-post-render-hooks"},{"t":"s","v":"list"}]}}]}},{"t":"s","v":"reactive-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,4,52,2,0,0,17,5,20,3,0,51,4,0,48,1,5,20,5,0,50],"constants":[{"t":"s","v":"create-comment"},{"t":"s","v":"island-fragment"},{"t":"s","v":"list"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,5,52,3,0,0,21,2,0,5,20,4,0,48,0,33,33,0,20,5,0,48,0,17,0,20,6,0,20,7,0,48,1,21,2,0,5,20,8,0,20,9,0,20,7,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-remove"},{"t":"s","v":"n"}]}},{"t":"s","v":"current-nodes"},{"t":"s","v":"list"},{"t":"s","v":"test-fn"},{"t":"s","v":"render-fn"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"frag"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"marker"}]}},{"t":"s","v":"marker"}]}},{"t":"s","v":"render-list-item"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,24,0,20,2,0,20,1,0,20,4,0,52,3,0,1,20,5,0,20,6,0,49,4,32,25,0,20,7,0,20,1,0,20,4,0,52,3,0,1,52,8,0,2,20,5,0,20,6,0,49,3,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"map-fn"},{"t":"s","v":"render-lambda-dom"},{"t":"s","v":"list"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"apply"}]}},{"t":"s","v":"extract-key"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,2,20,3,0,33,18,0,20,4,0,20,1,0,1,2,0,48,2,5,20,3,0,32,39,0,20,5,0,20,1,0,1,2,0,48,2,17,3,20,6,0,33,10,0,20,6,0,52,7,0,1,32,10,0,1,8,0,20,9,0,52,7,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"node"},{"t":"s","v":"key"},{"t":"s","v":"k"},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"dom-get-data"},{"t":"s","v":"dk"},{"t":"s","v":"str"},{"t":"s","v":"__idx_"},{"t":"s","v":"index"}]}},{"t":"s","v":"reactive-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,4,20,1,0,1,2,0,48,1,17,5,52,3,0,0,17,6,52,4,0,0,17,7,20,5,0,20,6,0,20,7,0,48,2,5,20,8,0,51,9,0,48,1,5,20,6,0,50],"constants":[{"t":"s","v":"create-fragment"},{"t":"s","v":"create-comment"},{"t":"s","v":"island-list"},{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"},{"t":"s","v":"marker"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,0,20,2,0,20,3,0,48,1,33,120,0,52,4,0,0,17,1,52,5,0,0,17,2,4,17,3,51,7,0,20,8,0,52,6,0,2,5,20,10,0,52,9,0,1,33,41,0,20,11,0,20,3,0,48,1,5,20,12,0,48,0,17,4,51,14,0,20,15,0,52,13,0,2,5,20,16,0,20,3,0,20,17,0,48,2,32,26,0,51,18,0,20,19,0,52,13,0,2,5,20,3,0,17,4,51,20,0,20,15,0,52,13,0,2,5,20,21,0,21,22,0,5,20,15,0,21,19,0,32,10,0,51,23,0,20,8,0,52,6,0,2,50],"constants":[{"t":"s","v":"deref"},{"t":"s","v":"items-sig"},{"t":"s","v":"dom-parent"},{"t":"s","v":"marker"},{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"for-each-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,48,4,17,2,20,5,0,20,6,0,20,7,0,48,2,17,3,20,9,0,52,8,0,1,6,33,15,0,5,20,11,0,1,12,0,52,10,0,2,52,8,0,1,33,7,0,3,21,9,0,32,1,0,2,5,20,14,0,20,11,0,52,13,0,2,33,23,0,20,16,0,20,11,0,20,14,0,20,11,0,52,17,0,2,52,15,0,3,32,13,0,20,16,0,20,11,0,20,6,0,52,15,0,3,5,20,18,0,20,19,0,20,11,0,49,2,50],"constants":[{"t":"s","v":"render-list-item"},{"t":"s","v":"map-fn"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"extract-key"},{"t":"s","v":"rendered"},{"t":"s","v":"idx"},{"t":"s","v":"not"},{"t":"s","v":"has-keys"},{"t":"s","v":"starts-with?"},{"t":"s","v":"key"},{"t":"s","v":"__idx_"},{"t":"s","v":"dict-has?"},{"t":"s","v":"key-map"},{"t":"s","v":"dict-set!"},{"t":"s","v":"new-map"},{"t":"s","v":"dict-get"},{"t":"s","v":"append!"},{"t":"s","v":"new-keys"}]}},{"t":"s","v":"items"},{"t":"s","v":"not"},{"t":"s","v":"has-keys"},{"t":"s","v":"dom-remove-children-after"},{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,20,4,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"dict-get"},{"t":"s","v":"new-map"},{"t":"s","v":"k"}]}},{"t":"s","v":"new-keys"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"frag"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,18,0,20,4,0,20,6,0,20,3,0,52,5,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"dict-has?"},{"t":"s","v":"new-map"},{"t":"s","v":"old-key"},{"t":"s","v":"dom-remove"},{"t":"s","v":"dict-get"},{"t":"s","v":"key-map"}]}},{"t":"s","v":"key-order"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,3,0,20,4,0,48,1,17,2,20,7,0,20,8,0,52,6,0,2,52,5,0,1,33,14,0,20,9,0,20,4,0,20,7,0,48,2,32,1,0,2,5,20,7,0,21,4,0,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"new-map"},{"t":"s","v":"k"},{"t":"s","v":"dom-next-sibling"},{"t":"s","v":"cursor"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"node"},{"t":"s","v":"next"},{"t":"s","v":"dom-insert-after"}]}},{"t":"s","v":"new-map"},{"t":"s","v":"key-map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,48,4,17,2,20,5,0,20,6,0,20,7,0,48,2,17,3,20,9,0,20,10,0,20,6,0,52,8,0,3,5,20,11,0,20,12,0,20,10,0,48,2,5,20,13,0,20,14,0,20,6,0,49,2,50],"constants":[{"t":"s","v":"render-list-item"},{"t":"s","v":"map-fn"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"ns"},{"t":"s","v":"extract-key"},{"t":"s","v":"rendered"},{"t":"s","v":"idx"},{"t":"s","v":"dict-set!"},{"t":"s","v":"key-map"},{"t":"s","v":"key"},{"t":"s","v":"append!"},{"t":"s","v":"key-order"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"}]}}]}}]}},{"t":"s","v":"bind-input"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,6,34,4,0,5,1,4,0,52,0,0,1,17,2,20,6,0,1,7,0,52,5,0,2,6,34,11,0,5,20,6,0,1,8,0,52,5,0,2,17,3,20,9,0,33,22,0,20,10,0,20,2,0,1,11,0,20,12,0,20,13,0,48,1,48,3,32,23,0,20,10,0,20,2,0,1,14,0,20,12,0,20,13,0,48,1,52,15,0,1,48,3,5,20,16,0,51,17,0,48,1,5,20,18,0,20,2,0,20,9,0,33,6,0,1,19,0,32,3,0,1,20,0,51,21,0,49,3,50],"constants":[{"t":"s","v":"lower"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"type"},{"t":"s","v":""},{"t":"s","v":"="},{"t":"s","v":"input-type"},{"t":"s","v":"checkbox"},{"t":"s","v":"radio"},{"t":"s","v":"is-checkbox"},{"t":"s","v":"dom-set-prop"},{"t":"s","v":"checked"},{"t":"s","v":"deref"},{"t":"s","v":"sig"},{"t":"s","v":"value"},{"t":"s","v":"str"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,22,0,20,1,0,20,2,0,1,3,0,20,4,0,20,5,0,48,1,49,3,32,53,0,20,4,0,20,5,0,48,1,52,6,0,1,17,0,20,8,0,20,2,0,1,9,0,48,2,20,10,0,52,7,0,2,33,17,0,20,1,0,20,2,0,1,9,0,20,10,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"is-checkbox"},{"t":"s","v":"dom-set-prop"},{"t":"s","v":"el"},{"t":"s","v":"checked"},{"t":"s","v":"deref"},{"t":"s","v":"sig"},{"t":"s","v":"str"},{"t":"s","v":"!="},{"t":"s","v":"dom-get-prop"},{"t":"s","v":"value"},{"t":"s","v":"v"}]}},{"t":"s","v":"dom-on"},{"t":"s","v":"change"},{"t":"s","v":"input"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,22,0,20,1,0,20,2,0,20,3,0,20,4,0,1,5,0,48,2,49,2,32,19,0,20,1,0,20,2,0,20,3,0,20,4,0,1,6,0,48,2,49,2,50],"constants":[{"t":"s","v":"is-checkbox"},{"t":"s","v":"reset!"},{"t":"s","v":"sig"},{"t":"s","v":"dom-get-prop"},{"t":"s","v":"el"},{"t":"s","v":"checked"},{"t":"s","v":"value"}]}}]}},{"t":"s","v":"*use-cek-reactive*"},{"t":"s","v":"enable-cek-reactive!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[3,21,0,0,50],"constants":[{"t":"s","v":"*use-cek-reactive*"}]}},{"t":"s","v":"cek-reactive-text"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,2,51,2,0,17,3,20,3,0,20,4,0,20,5,0,20,6,0,20,8,0,20,6,0,20,9,0,3,48,3,52,7,0,1,48,3,48,1,17,4,20,10,0,20,11,0,20,13,0,52,12,0,1,48,2,5,20,11,0,50],"constants":[{"t":"s","v":"create-text-node"},{"t":"s","v":""},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,52,2,0,1,49,2,50],"constants":[{"t":"s","v":"dom-set-text-content"},{"t":"s","v":"node"},{"t":"s","v":"str"},{"t":"s","v":"val"}]}},{"t":"s","v":"cek-run"},{"t":"s","v":"make-cek-state"},{"t":"s","v":"expr"},{"t":"s","v":"env"},{"t":"s","v":"list"},{"t":"s","v":"make-reactive-reset-frame"},{"t":"s","v":"update-fn"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":"node"},{"t":"s","v":"str"},{"t":"s","v":"initial"}]}},{"t":"s","v":"cek-reactive-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,0,0,17,4,20,1,0,20,2,0,1,3,0,48,2,6,34,4,0,5,1,4,0,17,5,20,6,0,52,5,0,1,33,6,0,20,7,0,32,13,0,20,6,0,1,9,0,20,7,0,52,8,0,3,17,6,20,10,0,20,2,0,1,3,0,20,11,0,48,3,5,20,12,0,20,13,0,20,14,0,20,15,0,20,17,0,20,15,0,20,18,0,3,48,3,52,16,0,1,48,3,48,1,17,5,20,19,0,20,18,0,20,20,0,52,16,0,1,49,2,50],"constants":[{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,6,34,9,0,5,20,1,0,4,52,2,0,2,33,14,0,20,3,0,20,4,0,20,5,0,49,2,32,46,0,20,1,0,3,52,2,0,2,33,17,0,20,6,0,20,4,0,20,5,0,1,7,0,49,3,32,18,0,20,6,0,20,4,0,20,5,0,20,1,0,52,8,0,1,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"val"},{"t":"s","v":"="},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"el"},{"t":"s","v":"attr-name"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":""},{"t":"s","v":"str"}]}},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-reactive-attrs"},{"t":"s","v":""},{"t":"s","v":"empty?"},{"t":"s","v":"existing"},{"t":"s","v":"attr-name"},{"t":"s","v":"str"},{"t":"s","v":","},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"updated"},{"t":"s","v":"cek-run"},{"t":"s","v":"make-cek-state"},{"t":"s","v":"expr"},{"t":"s","v":"env"},{"t":"s","v":"list"},{"t":"s","v":"make-reactive-reset-frame"},{"t":"s","v":"update-fn"},{"t":"s","v":"cek-call"},{"t":"s","v":"initial"}]}},{"t":"s","v":"render-dom-portal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,52,2,0,1,20,4,0,48,2,48,1,17,3,20,5,0,20,6,0,48,1,6,34,9,0,5,20,7,0,20,6,0,48,1,17,4,20,9,0,52,8,0,1,33,21,0,20,10,0,1,12,0,20,6,0,1,13,0,52,11,0,3,49,1,32,73,0,20,10,0,1,12,0,20,6,0,52,11,0,2,48,1,17,5,20,14,0,48,0,17,6,51,16,0,20,3,0,52,17,0,1,52,15,0,2,5,20,18,0,20,19,0,48,1,17,7,20,20,0,20,9,0,20,19,0,48,2,5,20,21,0,51,22,0,48,1,5,20,23,0,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"env"},{"t":"s","v":"dom-query"},{"t":"s","v":"selector"},{"t":"s","v":"dom-ensure-element"},{"t":"s","v":"not"},{"t":"s","v":"target"},{"t":"s","v":"create-comment"},{"t":"s","v":"str"},{"t":"s","v":"portal: "},{"t":"s","v":" (not found)"},{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"child"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"rest"},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"frag"},{"t":"s","v":"dom-append"},{"t":"s","v":"register-in-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-remove"},{"t":"s","v":"n"}]}},{"t":"s","v":"portal-nodes"}]}},{"t":"s","v":"marker"}]}},{"t":"s","v":"render-dom-error-boundary"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,1,0,52,2,0,1,17,4,20,3,0,1,4,0,2,48,2,17,5,20,5,0,1,6,0,48,1,17,6,20,7,0,20,8,0,1,9,0,1,10,0,48,3,5,20,11,0,51,12,0,48,1,5,20,8,0,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"rest"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"signal"},{"t":"n","v":0},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"container"},{"t":"s","v":"data-sx-boundary"},{"t":"s","v":"true"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,2,0,20,3,0,1,4,0,1,5,0,48,3,5,20,6,0,1,7,0,2,48,2,5,20,8,0,51,9,0,51,10,0,49,2,50],"constants":[{"t":"s","v":"deref"},{"t":"s","v":"retry-version"},{"t":"s","v":"dom-set-prop"},{"t":"s","v":"container"},{"t":"s","v":"innerHTML"},{"t":"s","v":""},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"try-catch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,0,51,2,0,20,3,0,52,1,0,2,5,20,4,0,20,5,0,20,6,0,48,2,5,20,7,0,1,8,0,49,1,50],"constants":[{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"child"},{"t":"s","v":"env"},{"t":"s","v":"ns"}]}},{"t":"s","v":"body-exprs"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"},{"t":"s","v":"frag"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"sx-island-scope"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,5,20,2,0,20,3,0,20,4,0,20,5,0,48,2,48,1,17,1,51,6,0,17,2,20,8,0,52,7,0,1,33,27,0,20,9,0,20,8,0,20,11,0,20,12,0,52,10,0,2,20,5,0,20,13,0,48,4,32,28,0,20,14,0,20,8,0,20,11,0,20,12,0,52,10,0,2,52,15,0,2,20,5,0,20,13,0,48,3,17,3,20,16,0,20,17,0,20,18,0,49,2,50],"constants":[{"t":"s","v":"scope-pop!"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"fallback-expr"},{"t":"s","v":"env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,51,2,0,49,2,50],"constants":[{"t":"s","v":"swap!"},{"t":"s","v":"retry-version"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"n"},{"t":"n","v":1}]}}]}},{"t":"s","v":"lambda?"},{"t":"s","v":"fallback-fn"},{"t":"s","v":"render-lambda-dom"},{"t":"s","v":"list"},{"t":"s","v":"err"},{"t":"s","v":"retry-fn"},{"t":"s","v":"ns"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"apply"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"},{"t":"s","v":"fallback-dom"}]}}]}}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/adapter-html.sxbc.json b/shared/static/wasm/sx/adapter-html.sxbc.json new file mode 100644 index 00000000..8badd21a --- /dev/null +++ b/shared/static/wasm/sx/adapter-html.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"2e656e58d5cf5c11","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,1,6,0,1,7,0,1,8,0,1,9,0,1,10,0,1,11,0,1,12,0,1,13,0,1,14,0,1,15,0,1,16,0,1,17,0,1,18,0,1,19,0,1,20,0,1,21,0,1,22,0,1,23,0,1,24,0,1,25,0,1,26,0,1,27,0,52,5,0,22,128,4,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,3,48,1,5,20,2,0,52,1,0,1,6,1,3,0,52,4,0,2,33,7,0,5,1,5,0,32,45,1,6,1,6,0,52,4,0,2,33,12,0,5,20,7,0,20,2,0,49,1,32,22,1,6,1,8,0,52,4,0,2,33,11,0,5,20,2,0,52,9,0,1,32,0,1,6,1,10,0,52,4,0,2,33,19,0,5,20,2,0,33,6,0,1,11,0,32,3,0,1,12,0,32,226,0,6,1,13,0,52,4,0,2,33,31,0,5,20,2,0,52,14,0,1,33,6,0,1,5,0,32,11,0,20,15,0,20,2,0,20,16,0,49,2,32,184,0,6,1,17,0,52,4,0,2,33,28,0,5,20,18,0,20,19,0,20,20,0,20,2,0,20,16,0,48,2,48,1,20,16,0,49,2,32,145,0,6,1,21,0,52,4,0,2,33,17,0,5,20,7,0,20,22,0,20,2,0,48,1,49,1,32,117,0,6,1,23,0,52,4,0,2,33,11,0,5,20,2,0,52,24,0,1,32,95,0,6,1,25,0,52,4,0,2,33,23,0,5,20,26,0,1,27,0,20,2,0,52,28,0,1,48,2,5,1,5,0,32,61,0,6,1,29,0,52,4,0,2,33,25,0,5,20,30,0,20,31,0,20,2,0,48,1,20,32,0,20,2,0,48,1,49,2,32,25,0,5,20,18,0,20,19,0,20,20,0,20,2,0,20,16,0,48,2,48,1,20,16,0,49,2,50],"constants":[{"t":"s","v":"set-render-active!"},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"nil"},{"t":"s","v":"="},{"t":"s","v":""},{"t":"s","v":"string"},{"t":"s","v":"escape-html"},{"t":"s","v":"number"},{"t":"s","v":"str"},{"t":"s","v":"boolean"},{"t":"s","v":"true"},{"t":"s","v":"false"},{"t":"s","v":"list"},{"t":"s","v":"empty?"},{"t":"s","v":"render-list-to-html"},{"t":"s","v":"env"},{"t":"s","v":"symbol"},{"t":"s","v":"render-value-to-html"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"raw-html"},{"t":"s","v":"raw-html-content"},{"t":"s","v":"spread"},{"t":"s","v":"scope-emit!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"spread-attrs"},{"t":"s","v":"thunk"},{"t":"s","v":"render-to-html"},{"t":"s","v":"thunk-expr"},{"t":"s","v":"thunk-env"}]}},{"t":"s","v":"render-value-to-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,6,1,2,0,52,3,0,2,33,7,0,5,1,4,0,32,206,0,6,1,5,0,52,3,0,2,33,12,0,5,20,6,0,20,1,0,49,1,32,183,0,6,1,7,0,52,3,0,2,33,11,0,5,20,1,0,52,8,0,1,32,161,0,6,1,9,0,52,3,0,2,33,19,0,5,20,1,0,33,6,0,1,10,0,32,3,0,1,11,0,32,131,0,6,1,12,0,52,3,0,2,33,15,0,5,20,13,0,20,1,0,20,14,0,49,2,32,105,0,6,1,15,0,52,3,0,2,33,11,0,5,20,1,0,52,16,0,1,32,83,0,6,1,17,0,52,3,0,2,33,23,0,5,20,18,0,1,19,0,20,1,0,52,20,0,1,48,2,5,1,4,0,32,49,0,6,1,21,0,52,3,0,2,33,25,0,5,20,22,0,20,23,0,20,1,0,48,1,20,24,0,20,1,0,48,1,49,2,32,13,0,5,20,6,0,20,1,0,52,8,0,1,49,1,50],"constants":[{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"nil"},{"t":"s","v":"="},{"t":"s","v":""},{"t":"s","v":"string"},{"t":"s","v":"escape-html"},{"t":"s","v":"number"},{"t":"s","v":"str"},{"t":"s","v":"boolean"},{"t":"s","v":"true"},{"t":"s","v":"false"},{"t":"s","v":"list"},{"t":"s","v":"render-list-to-html"},{"t":"s","v":"env"},{"t":"s","v":"raw-html"},{"t":"s","v":"raw-html-content"},{"t":"s","v":"spread"},{"t":"s","v":"scope-emit!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"spread-attrs"},{"t":"s","v":"thunk"},{"t":"s","v":"render-to-html"},{"t":"s","v":"thunk-expr"},{"t":"s","v":"thunk-env"}]}},{"t":"s","v":"RENDER_HTML_FORMS"},{"t":"s","v":"list"},{"t":"s","v":"if"},{"t":"s","v":"when"},{"t":"s","v":"cond"},{"t":"s","v":"case"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"letrec"},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"s","v":"define"},{"t":"s","v":"defcomp"},{"t":"s","v":"defisland"},{"t":"s","v":"defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"deftype"},{"t":"s","v":"defeffect"},{"t":"s","v":"map"},{"t":"s","v":"map-indexed"},{"t":"s","v":"filter"},{"t":"s","v":"for-each"},{"t":"s","v":"scope"},{"t":"s","v":"provide"},{"t":"s","v":"render-html-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"RENDER_HTML_FORMS"},{"t":"s","v":"name"}]}},{"t":"s","v":"render-list-to-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,1,2,0,32,67,2,20,1,0,52,3,0,1,17,2,20,7,0,52,6,0,1,1,8,0,52,5,0,2,52,4,0,1,33,20,0,1,2,0,51,11,0,20,1,0,52,10,0,2,52,9,0,2,32,17,2,20,12,0,20,7,0,48,1,17,3,20,1,0,52,13,0,1,17,4,20,14,0,1,15,0,52,5,0,2,33,20,0,1,2,0,51,16,0,20,17,0,52,10,0,2,52,9,0,2,32,221,1,20,14,0,1,18,0,52,5,0,2,33,20,0,1,2,0,51,19,0,20,17,0,52,10,0,2,52,9,0,2,32,188,1,20,14,0,1,20,0,52,5,0,2,33,14,0,20,21,0,20,17,0,20,22,0,49,2,32,161,1,20,14,0,1,23,0,52,5,0,2,33,14,0,20,24,0,20,17,0,20,22,0,49,2,32,134,1,20,14,0,1,25,0,52,5,0,2,6,34,26,0,5,20,14,0,1,26,0,52,5,0,2,6,34,11,0,5,20,14,0,1,27,0,52,5,0,2,33,20,0,1,2,0,51,16,0,20,17,0,52,10,0,2,52,9,0,2,32,71,1,20,29,0,20,14,0,52,28,0,2,33,17,0,20,30,0,20,14,0,20,17,0,20,22,0,49,3,32,41,1,20,14,0,1,32,0,52,31,0,2,6,33,32,0,5,20,33,0,20,22,0,20,14,0,48,2,6,33,16,0,5,20,35,0,20,22,0,20,14,0,48,2,52,34,0,1,33,25,0,20,36,0,20,35,0,20,22,0,20,14,0,48,2,20,17,0,20,22,0,49,3,32,223,0,20,14,0,1,32,0,52,31,0,2,33,91,0,20,35,0,20,22,0,20,14,0,48,2,17,5,20,38,0,52,37,0,1,33,17,0,20,39,0,20,38,0,20,17,0,20,22,0,49,3,32,48,0,20,38,0,52,40,0,1,33,25,0,20,41,0,20,42,0,20,38,0,20,17,0,20,22,0,48,3,20,22,0,49,2,32,13,0,1,44,0,20,14,0,1,45,0,52,43,0,3,32,119,0,20,46,0,20,14,0,48,1,33,17,0,20,47,0,20,14,0,20,1,0,20,22,0,49,3,32,91,0,20,33,0,20,22,0,20,14,0,48,2,6,33,16,0,5,20,35,0,20,22,0,20,14,0,48,2,52,40,0,1,33,33,0,20,41,0,20,42,0,20,35,0,20,22,0,20,14,0,48,2,20,17,0,20,22,0,48,3,20,22,0,49,2,32,24,0,20,48,0,20,49,0,20,50,0,20,1,0,20,22,0,48,2,48,1,20,22,0,49,2,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"expr"},{"t":"s","v":""},{"t":"s","v":"first"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"render-value-to-html"},{"t":"s","v":"x"},{"t":"s","v":"env"}]}},{"t":"s","v":"symbol-name"},{"t":"s","v":"rest"},{"t":"s","v":"name"},{"t":"s","v":"<>"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"x"},{"t":"s","v":"env"}]}},{"t":"s","v":"args"},{"t":"s","v":"raw!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,3,0,20,4,0,48,2,48,1,52,0,0,1,50],"constants":[{"t":"s","v":"str"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"x"},{"t":"s","v":"env"}]}},{"t":"s","v":"lake"},{"t":"s","v":"render-html-lake"},{"t":"s","v":"env"},{"t":"s","v":"marsh"},{"t":"s","v":"render-html-marsh"},{"t":"s","v":"portal"},{"t":"s","v":"error-boundary"},{"t":"s","v":"promise-delayed"},{"t":"s","v":"contains?"},{"t":"s","v":"HTML_TAGS"},{"t":"s","v":"render-html-element"},{"t":"s","v":"starts-with?"},{"t":"s","v":"~"},{"t":"s","v":"env-has?"},{"t":"s","v":"island?"},{"t":"s","v":"env-get"},{"t":"s","v":"render-html-island"},{"t":"s","v":"component?"},{"t":"s","v":"val"},{"t":"s","v":"render-html-component"},{"t":"s","v":"macro?"},{"t":"s","v":"render-to-html"},{"t":"s","v":"expand-macro"},{"t":"s","v":"str"},{"t":"s","v":""},{"t":"s","v":"render-html-form?"},{"t":"s","v":"dispatch-html-form"},{"t":"s","v":"render-value-to-html"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"}]}},{"t":"s","v":"dispatch-html-form"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,96,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,9,0,33,21,0,20,10,0,20,6,0,1,11,0,52,5,0,2,20,8,0,49,2,32,41,0,20,6,0,52,13,0,1,1,14,0,52,12,0,2,33,21,0,20,10,0,20,6,0,1,14,0,52,5,0,2,20,8,0,49,2,32,3,0,1,15,0,32,47,5,20,1,0,1,16,0,52,0,0,2,33,105,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,52,17,0,1,33,6,0,1,15,0,32,66,0,20,6,0,52,13,0,1,1,14,0,52,0,0,2,33,21,0,20,10,0,20,6,0,1,11,0,52,5,0,2,20,8,0,49,2,32,28,0,1,15,0,51,20,0,1,11,0,20,6,0,52,13,0,1,52,21,0,2,52,19,0,2,52,18,0,2,32,185,4,20,1,0,1,22,0,52,0,0,2,33,43,0,20,23,0,20,6,0,52,24,0,1,20,8,0,48,2,17,3,20,25,0,33,14,0,20,10,0,20,25,0,20,8,0,49,2,32,3,0,1,15,0,32,129,4,20,1,0,1,26,0,52,0,0,2,33,27,0,20,10,0,20,3,0,20,4,0,20,6,0,20,8,0,48,2,48,1,20,8,0,49,2,32,89,4,20,1,0,1,27,0,52,0,0,2,33,110,0,20,6,0,1,7,0,52,5,0,2,17,3,20,6,0,1,11,0,52,28,0,2,17,4,20,29,0,20,8,0,48,1,17,5,51,31,0,20,32,0,52,30,0,2,5,51,33,0,20,32,0,52,30,0,2,5,20,34,0,52,13,0,1,1,7,0,52,12,0,2,33,17,0,51,35,0,20,34,0,52,36,0,1,52,30,0,2,32,1,0,2,5,20,10,0,20,34,0,52,37,0,1,20,38,0,49,2,32,222,3,20,1,0,1,39,0,52,0,0,2,6,34,11,0,5,20,1,0,1,40,0,52,0,0,2,33,89,0,20,41,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,17,3,20,6,0,52,13,0,1,1,14,0,52,0,0,2,33,21,0,20,10,0,20,6,0,1,11,0,52,5,0,2,20,38,0,49,2,32,28,0,1,15,0,51,42,0,1,11,0,20,6,0,52,13,0,1,52,21,0,2,52,19,0,2,52,18,0,2,32,105,3,20,1,0,1,43,0,52,0,0,2,6,34,11,0,5,20,1,0,1,44,0,52,0,0,2,33,69,0,20,6,0,52,13,0,1,1,11,0,52,0,0,2,33,21,0,20,10,0,20,6,0,1,7,0,52,5,0,2,20,8,0,49,2,32,28,0,1,15,0,51,20,0,1,7,0,20,6,0,52,13,0,1,52,21,0,2,52,19,0,2,52,18,0,2,32,8,3,20,45,0,20,1,0,48,1,33,23,0,20,3,0,20,4,0,20,6,0,20,8,0,48,2,48,1,5,1,15,0,32,230,2,20,1,0,1,19,0,52,0,0,2,33,70,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,3,0,20,4,0,20,6,0,1,11,0,52,5,0,2,20,8,0,48,2,48,1,17,4,1,15,0,51,46,0,20,47,0,52,19,0,2,52,18,0,2,32,147,2,20,1,0,1,48,0,52,0,0,2,33,70,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,3,0,20,4,0,20,6,0,1,11,0,52,5,0,2,20,8,0,48,2,48,1,17,4,1,15,0,51,49,0,20,47,0,52,48,0,2,52,18,0,2,32,64,2,20,1,0,1,50,0,52,0,0,2,33,27,0,20,10,0,20,3,0,20,4,0,20,6,0,20,8,0,48,2,48,1,20,8,0,49,2,32,24,2,20,1,0,1,30,0,52,0,0,2,33,70,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,3,0,20,4,0,20,6,0,1,11,0,52,5,0,2,20,8,0,48,2,48,1,17,4,1,15,0,51,46,0,20,47,0,52,19,0,2,52,18,0,2,32,197,1,20,1,0,1,51,0,52,0,0,2,33,238,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,6,0,1,11,0,52,28,0,2,17,4,2,17,5,2,17,6,20,53,0,52,13,0,1,1,11,0,52,52,0,2,6,33,43,0,5,20,53,0,52,55,0,1,52,54,0,1,1,56,0,52,0,0,2,6,33,20,0,5,20,57,0,20,53,0,52,55,0,1,48,1,1,58,0,52,0,0,2,33,43,0,20,3,0,20,4,0,20,53,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,21,59,0,5,20,53,0,1,11,0,52,28,0,2,21,60,0,32,6,0,20,53,0,21,60,0,5,20,61,0,20,62,0,20,59,0,48,2,5,20,60,0,52,13,0,1,1,7,0,52,0,0,2,33,18,0,20,10,0,20,60,0,52,55,0,1,20,8,0,48,2,32,17,0,1,15,0,51,63,0,20,60,0,52,19,0,2,52,18,0,2,17,7,20,64,0,20,62,0,48,1,5,20,65,0,32,202,0,20,1,0,1,66,0,52,0,0,2,33,165,0,20,3,0,20,4,0,20,6,0,1,7,0,52,5,0,2,20,8,0,48,2,48,1,17,3,20,3,0,20,4,0,20,6,0,1,11,0,52,5,0,2,20,8,0,48,2,48,1,17,4,1,14,0,17,5,20,6,0,52,13,0,1,1,14,0,52,67,0,2,17,6,20,61,0,20,68,0,20,69,0,48,2,5,20,70,0,1,7,0,52,0,0,2,33,21,0,20,10,0,20,6,0,20,71,0,52,5,0,2,20,8,0,48,2,32,31,0,1,15,0,51,20,0,20,71,0,20,71,0,20,70,0,52,72,0,2,52,21,0,2,52,19,0,2,52,18,0,2,17,7,20,64,0,20,68,0,48,1,5,20,65,0,32,24,0,20,73,0,20,3,0,20,4,0,20,6,0,20,8,0,48,2,48,1,20,8,0,49,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"name"},{"t":"s","v":"if"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"n","v":1},{"t":"s","v":"env"},{"t":"s","v":"cond-val"},{"t":"s","v":"render-to-html"},{"t":"n","v":2},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":3},{"t":"s","v":""},{"t":"s","v":"when"},{"t":"s","v":"not"},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"env"}]}},{"t":"s","v":"range"},{"t":"s","v":"cond"},{"t":"s","v":"eval-cond"},{"t":"s","v":"rest"},{"t":"s","v":"branch"},{"t":"s","v":"case"},{"t":"s","v":"letrec"},{"t":"s","v":"slice"},{"t":"s","v":"env-extend"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,11,0,20,3,0,52,2,0,1,52,6,0,1,17,1,20,7,0,20,8,0,20,9,0,2,49,3,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"str"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"pname"}]}},{"t":"s","v":"bindings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,11,0,20,3,0,52,2,0,1,52,6,0,1,17,1,20,7,0,20,8,0,20,9,0,20,10,0,20,11,0,20,3,0,1,13,0,52,12,0,2,20,8,0,48,2,48,1,49,3,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"str"},{"t":"s","v":"env-set!"},{"t":"s","v":"local"},{"t":"s","v":"pname"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"n","v":1}]}},{"t":"s","v":"body"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,49,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"e"},{"t":"s","v":"local"}]}},{"t":"s","v":"init"},{"t":"s","v":"last"},{"t":"s","v":"local"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"process-bindings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"nth"},{"t":"s","v":"expr"},{"t":"s","v":"i"},{"t":"s","v":"local"}]}},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"s","v":"definition-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,21,0,20,2,0,20,1,0,20,4,0,52,3,0,1,20,5,0,49,3,32,22,0,20,6,0,20,1,0,20,4,0,52,3,0,1,52,7,0,2,20,5,0,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"render-lambda-html"},{"t":"s","v":"list"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"render-to-html"},{"t":"s","v":"apply"}]}},{"t":"s","v":"coll"},{"t":"s","v":"map-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,24,0,20,2,0,20,1,0,20,4,0,20,5,0,52,3,0,2,20,6,0,49,3,32,25,0,20,7,0,20,1,0,20,4,0,20,5,0,52,3,0,2,52,8,0,2,20,6,0,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"render-lambda-html"},{"t":"s","v":"list"},{"t":"s","v":"i"},{"t":"s","v":"item"},{"t":"s","v":"env"},{"t":"s","v":"render-to-html"},{"t":"s","v":"apply"}]}},{"t":"s","v":"filter"},{"t":"s","v":"scope"},{"t":"s","v":">="},{"t":"s","v":"rest-args"},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"value"},{"t":"s","v":"scope-val"},{"t":"s","v":"body-exprs"},{"t":"s","v":"scope-push!"},{"t":"s","v":"scope-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"e"},{"t":"s","v":"env"}]}},{"t":"s","v":"scope-pop!"},{"t":"s","v":"result"},{"t":"s","v":"provide"},{"t":"s","v":"-"},{"t":"s","v":"prov-name"},{"t":"s","v":"prov-val"},{"t":"s","v":"body-count"},{"t":"s","v":"body-start"},{"t":"s","v":"+"},{"t":"s","v":"render-value-to-html"}]}},{"t":"s","v":"render-lambda-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,52,1,0,1,20,3,0,48,2,17,3,51,5,0,20,2,0,52,6,0,1,52,4,0,2,5,20,7,0,20,2,0,52,8,0,1,20,9,0,49,2,50],"constants":[{"t":"s","v":"env-merge"},{"t":"s","v":"lambda-closure"},{"t":"s","v":"f"},{"t":"s","v":"env"},{"t":"s","v":"for-each-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"nth"},{"t":"s","v":"args"},{"t":"s","v":"i"}]}},{"t":"s","v":"lambda-params"},{"t":"s","v":"render-to-html"},{"t":"s","v":"lambda-body"},{"t":"s","v":"local"}]}},{"t":"s","v":"render-html-component"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,3,52,1,0,0,17,4,51,3,0,1,4,0,1,5,0,1,6,0,4,52,0,0,4,20,7,0,52,2,0,3,5,20,8,0,20,10,0,52,9,0,1,20,11,0,48,2,17,5,51,13,0,20,10,0,52,14,0,1,52,12,0,2,5,20,10,0,52,15,0,1,33,35,0,20,16,0,20,17,0,1,18,0,1,21,0,51,23,0,20,18,0,52,22,0,2,52,20,0,2,52,19,0,1,48,3,32,1,0,2,5,20,24,0,20,10,0,52,25,0,1,20,17,0,49,2,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,169,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,86,0,20,13,0,20,14,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,15,0,2,20,16,0,48,2,48,1,17,3,20,18,0,20,19,0,20,8,0,48,1,20,20,0,52,17,0,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,21,0,20,22,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"dict-set!"},{"t":"s","v":"kwargs"},{"t":"s","v":"keyword-name"},{"t":"s","v":"val"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"env-merge"},{"t":"s","v":"component-closure"},{"t":"s","v":"comp"},{"t":"s","v":"env"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,33,13,0,20,4,0,20,2,0,52,5,0,2,32,1,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"dict-has?"},{"t":"s","v":"kwargs"},{"t":"s","v":"dict-get"}]}},{"t":"s","v":"component-params"},{"t":"s","v":"component-has-children?"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"children"},{"t":"s","v":"make-raw-html"},{"t":"s","v":"join"},{"t":"s","v":""},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"c"},{"t":"s","v":"env"}]}},{"t":"s","v":"render-to-html"},{"t":"s","v":"component-body"}]}},{"t":"s","v":"render-html-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,4,0,52,3,0,1,17,4,20,4,0,1,6,0,52,5,0,2,17,5,20,8,0,20,9,0,52,7,0,2,17,6,20,10,0,33,24,0,1,12,0,20,9,0,20,13,0,20,14,0,48,1,1,15,0,52,11,0,4,32,87,0,20,16,0,1,17,0,2,48,2,5,1,19,0,51,21,0,20,22,0,52,20,0,2,52,18,0,2,17,7,51,24,0,20,25,0,1,17,0,48,1,52,23,0,2,5,20,26,0,1,17,0,48,1,5,1,12,0,20,9,0,20,13,0,20,14,0,48,1,1,27,0,20,28,0,1,29,0,20,9,0,1,27,0,52,11,0,8,50],"constants":[{"t":"s","v":"parse-element-args"},{"t":"s","v":"args"},{"t":"s","v":"env"},{"t":"s","v":"first"},{"t":"s","v":"parsed"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"contains?"},{"t":"s","v":"VOID_ELEMENTS"},{"t":"s","v":"tag"},{"t":"s","v":"is-void"},{"t":"s","v":"str"},{"t":"s","v":"<"},{"t":"s","v":"render-attrs"},{"t":"s","v":"attrs"},{"t":"s","v":" />"},{"t":"s","v":"scope-push!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"join"},{"t":"s","v":""},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"c"},{"t":"s","v":"env"}]}},{"t":"s","v":"children"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"merge-spread-attrs"},{"t":"s","v":"attrs"},{"t":"s","v":"spread-dict"}]}},{"t":"s","v":"scope-emitted"},{"t":"s","v":"scope-pop!"},{"t":"s","v":">"},{"t":"s","v":"content"},{"t":"s","v":""},{"t":"s","v":"content"},{"t":"s","v":""},{"t":"s","v":"content"},{"t":"s","v":""},{"t":"s","v":"body-html"},{"t":"s","v":""}]}},{"t":"s","v":"serialize-island-state"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,8,0,20,2,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"empty-dict?"},{"t":"s","v":"kwargs"},{"t":"s","v":"sx-serialize"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/adapter-sx.sxbc.json b/shared/static/wasm/sx/adapter-sx.sxbc.json new file mode 100644 index 00000000..8ef5ea78 --- /dev/null +++ b/shared/static/wasm/sx/adapter-sx.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"9e42f7d4c0a56dfb","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,1,16,0,1,17,0,1,18,0,1,19,0,1,20,0,1,21,0,1,22,0,1,23,0,1,24,0,1,25,0,1,26,0,1,27,0,1,28,0,1,29,0,1,30,0,1,31,0,1,32,0,1,33,0,1,34,0,1,35,0,1,36,0,1,37,0,1,38,0,1,39,0,1,40,0,1,41,0,1,42,0,1,43,0,1,44,0,1,45,0,1,46,0,1,47,0,1,48,0,1,49,0,1,50,0,52,15,0,35,128,14,0,5,1,52,0,1,53,0,1,54,0,1,55,0,1,56,0,1,57,0,1,58,0,52,15,0,7,128,51,0,5,51,60,0,128,59,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,50],"constants":[{"t":"s","v":"render-to-sx"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,2,20,5,0,52,4,0,1,1,6,0,52,3,0,2,33,11,0,20,7,0,20,5,0,49,1,32,30,0,20,5,0,52,4,0,1,1,8,0,52,3,0,2,33,6,0,20,5,0,32,7,0,20,5,0,52,9,0,1,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"expr"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"result"},{"t":"s","v":"sx-expr"},{"t":"s","v":"sx-expr-source"},{"t":"s","v":"string"},{"t":"s","v":"serialize"}]}},{"t":"s","v":"aser"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,3,48,1,5,20,2,0,52,1,0,1,6,1,3,0,52,4,0,2,33,7,0,5,20,2,0,32,36,1,6,1,5,0,52,4,0,2,33,7,0,5,20,2,0,32,18,1,6,1,6,0,52,4,0,2,33,7,0,5,20,2,0,32,0,1,6,1,7,0,52,4,0,2,33,5,0,5,2,32,240,0,6,1,8,0,52,4,0,2,33,127,0,5,20,9,0,20,2,0,48,1,17,3,20,10,0,20,11,0,20,12,0,48,2,33,14,0,20,13,0,20,11,0,20,12,0,48,2,32,85,0,20,12,0,52,14,0,1,33,10,0,20,12,0,52,15,0,1,32,65,0,20,12,0,1,16,0,52,4,0,2,33,4,0,3,32,48,0,20,12,0,1,17,0,52,4,0,2,33,4,0,4,32,31,0,20,12,0,1,7,0,52,4,0,2,33,4,0,2,32,14,0,1,20,0,20,12,0,52,19,0,2,52,18,0,1,32,102,0,6,1,21,0,52,4,0,2,33,12,0,5,20,22,0,20,2,0,48,1,32,79,0,6,1,23,0,52,4,0,2,33,32,0,5,20,2,0,52,24,0,1,33,7,0,52,23,0,0,32,11,0,20,25,0,20,2,0,20,11,0,48,2,32,36,0,6,1,26,0,52,4,0,2,33,21,0,5,20,27,0,1,28,0,20,2,0,52,29,0,1,48,2,5,2,32,4,0,5,20,2,0,17,2,20,31,0,52,30,0,1,33,20,0,20,27,0,1,28,0,20,31,0,52,29,0,1,48,2,5,2,32,3,0,20,31,0,50],"constants":[{"t":"s","v":"set-render-active!"},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"number"},{"t":"s","v":"="},{"t":"s","v":"string"},{"t":"s","v":"boolean"},{"t":"s","v":"nil"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"env-has?"},{"t":"s","v":"env"},{"t":"s","v":"name"},{"t":"s","v":"env-get"},{"t":"s","v":"primitive?"},{"t":"s","v":"get-primitive"},{"t":"s","v":"true"},{"t":"s","v":"false"},{"t":"s","v":"error"},{"t":"s","v":"str"},{"t":"s","v":"Undefined symbol: "},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"list"},{"t":"s","v":"empty?"},{"t":"s","v":"aser-list"},{"t":"s","v":"spread"},{"t":"s","v":"scope-emit!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"spread-attrs"},{"t":"s","v":"spread?"},{"t":"s","v":"result"}]}},{"t":"s","v":"aser-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,2,20,1,0,52,2,0,1,17,3,20,6,0,52,5,0,1,1,7,0,52,4,0,2,52,3,0,1,33,13,0,51,9,0,20,1,0,52,8,0,2,32,213,2,20,10,0,20,6,0,48,1,17,4,20,11,0,1,12,0,52,4,0,2,33,14,0,20,13,0,20,14,0,20,15,0,49,2,32,176,2,20,11,0,1,16,0,52,4,0,2,33,17,0,20,17,0,1,16,0,20,14,0,20,15,0,49,3,32,146,2,20,11,0,1,19,0,52,18,0,2,33,219,0,20,20,0,20,15,0,20,11,0,48,2,33,14,0,20,21,0,20,15,0,20,11,0,48,2,32,1,0,2,17,5,20,20,0,20,15,0,1,22,0,48,2,33,8,0,20,22,0,48,0,32,1,0,4,17,6,20,23,0,6,33,8,0,5,20,23,0,52,24,0,1,33,25,0,20,25,0,20,26,0,20,23,0,20,14,0,20,15,0,48,3,20,15,0,49,2,32,117,0,20,23,0,6,33,76,0,5,20,23,0,52,27,0,1,6,33,64,0,5,20,23,0,52,28,0,1,52,3,0,1,6,33,48,0,5,20,29,0,6,34,16,0,5,20,30,0,20,23,0,48,1,1,31,0,52,4,0,2,6,33,20,0,5,20,30,0,20,23,0,48,1,1,32,0,52,4,0,2,52,3,0,1,33,17,0,20,33,0,20,23,0,20,14,0,20,15,0,49,3,32,14,0,20,17,0,20,11,0,20,14,0,20,15,0,49,3,32,170,1,20,11,0,1,34,0,52,4,0,2,33,17,0,20,17,0,20,11,0,20,14,0,20,15,0,49,3,32,140,1,20,11,0,1,35,0,52,4,0,2,33,17,0,20,17,0,20,11,0,20,14,0,20,15,0,49,3,32,110,1,20,37,0,20,11,0,52,36,0,2,33,17,0,20,17,0,20,11,0,20,14,0,20,15,0,49,3,32,80,1,20,38,0,20,11,0,48,1,6,34,9,0,5,20,39,0,20,11,0,48,1,33,17,0,20,40,0,20,11,0,20,1,0,20,15,0,49,3,32,39,1,20,20,0,20,15,0,20,11,0,48,2,6,33,16,0,5,20,21,0,20,15,0,20,11,0,48,2,52,24,0,1,33,33,0,20,25,0,20,26,0,20,21,0,20,15,0,20,11,0,48,2,20,14,0,20,15,0,48,3,20,15,0,49,2,32,228,0,20,41,0,20,42,0,20,6,0,20,15,0,48,2,48,1,17,5,51,43,0,20,14,0,52,8,0,2,17,6,20,44,0,20,45,0,48,1,6,33,44,0,5,20,45,0,52,46,0,1,52,3,0,1,6,33,28,0,5,20,45,0,52,27,0,1,52,3,0,1,6,33,12,0,5,20,45,0,52,28,0,1,52,3,0,1,33,13,0,20,45,0,20,48,0,52,47,0,2,32,126,0,20,45,0,52,46,0,1,33,22,0,20,41,0,20,49,0,20,45,0,20,48,0,20,15,0,48,3,49,1,32,94,0,20,45,0,52,27,0,1,33,28,0,20,17,0,1,19,0,20,45,0,52,51,0,1,52,50,0,2,20,14,0,20,15,0,49,3,32,56,0,20,45,0,52,28,0,1,33,28,0,20,17,0,1,19,0,20,45,0,52,51,0,1,52,50,0,2,20,14,0,20,15,0,49,3,32,18,0,1,53,0,20,45,0,52,54,0,1,52,50,0,2,52,52,0,1,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"expr"},{"t":"s","v":"rest"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"x"},{"t":"s","v":"env"}]}},{"t":"s","v":"symbol-name"},{"t":"s","v":"name"},{"t":"s","v":"<>"},{"t":"s","v":"aser-fragment"},{"t":"s","v":"args"},{"t":"s","v":"env"},{"t":"s","v":"raw!"},{"t":"s","v":"aser-call"},{"t":"s","v":"starts-with?"},{"t":"s","v":"~"},{"t":"s","v":"env-has?"},{"t":"s","v":"env-get"},{"t":"s","v":"expand-components?"},{"t":"s","v":"comp"},{"t":"s","v":"macro?"},{"t":"s","v":"aser"},{"t":"s","v":"expand-macro"},{"t":"s","v":"component?"},{"t":"s","v":"island?"},{"t":"s","v":"expand-all"},{"t":"s","v":"component-affinity"},{"t":"s","v":"server"},{"t":"s","v":"client"},{"t":"s","v":"aser-expand-component"},{"t":"s","v":"lake"},{"t":"s","v":"marsh"},{"t":"s","v":"contains?"},{"t":"s","v":"HTML_TAGS"},{"t":"s","v":"special-form?"},{"t":"s","v":"ho-form?"},{"t":"s","v":"aser-special"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,49,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"a"},{"t":"s","v":"env"}]}},{"t":"s","v":"callable?"},{"t":"s","v":"f"},{"t":"s","v":"lambda?"},{"t":"s","v":"apply"},{"t":"s","v":"evaled-args"},{"t":"s","v":"call-lambda"},{"t":"s","v":"str"},{"t":"s","v":"component-name"},{"t":"s","v":"error"},{"t":"s","v":"Not callable: "},{"t":"s","v":"inspect"}]}},{"t":"s","v":"aser-reserialize"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,1,4,0,52,1,0,2,52,0,0,1,33,10,0,20,3,0,52,5,0,1,32,123,0,20,3,0,52,6,0,1,33,6,0,1,7,0,32,107,0,20,3,0,52,8,0,1,17,1,20,9,0,52,2,0,1,1,10,0,52,1,0,2,52,0,0,1,33,10,0,20,3,0,52,5,0,1,32,67,0,20,11,0,20,9,0,48,1,17,2,20,12,0,52,4,0,1,17,3,20,3,0,52,13,0,1,17,4,4,17,5,1,14,0,17,6,51,16,0,20,17,0,52,15,0,2,5,1,19,0,1,21,0,20,22,0,52,20,0,2,1,23,0,52,18,0,3,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"list"},{"t":"s","v":"serialize"},{"t":"s","v":"empty?"},{"t":"s","v":"()"},{"t":"s","v":"first"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"tag"},{"t":"s","v":"rest"},{"t":"n","v":0},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,18,0,4,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,149,1,20,5,0,52,4,0,1,1,6,0,52,3,0,2,6,33,37,1,5,20,2,0,52,1,0,1,20,9,0,52,8,0,1,52,7,0,2,6,33,14,1,5,20,5,0,1,12,0,52,11,0,2,52,10,0,1,6,33,251,0,5,20,5,0,1,14,0,52,13,0,2,6,34,236,0,5,20,5,0,1,15,0,52,13,0,2,6,34,221,0,5,20,5,0,1,16,0,52,13,0,2,6,34,206,0,5,20,5,0,1,17,0,52,13,0,2,6,34,191,0,5,20,5,0,1,18,0,52,13,0,2,6,34,176,0,5,20,5,0,1,19,0,52,13,0,2,6,34,161,0,5,20,5,0,1,20,0,52,13,0,2,6,34,146,0,5,20,5,0,1,21,0,52,13,0,2,6,34,131,0,5,20,5,0,1,22,0,52,13,0,2,6,34,116,0,5,20,5,0,1,23,0,52,13,0,2,6,34,101,0,5,20,5,0,1,24,0,52,13,0,2,6,34,86,0,5,20,5,0,1,25,0,52,13,0,2,6,34,71,0,5,20,5,0,1,26,0,52,13,0,2,6,34,56,0,5,20,5,0,1,27,0,52,13,0,2,6,34,41,0,5,20,5,0,1,28,0,52,13,0,2,6,34,26,0,5,20,5,0,1,29,0,52,13,0,2,6,34,11,0,5,20,5,0,1,30,0,52,13,0,2,33,64,0,20,31,0,20,32,0,1,34,0,20,5,0,52,33,0,2,48,2,5,20,31,0,20,32,0,20,9,0,20,2,0,52,1,0,1,52,36,0,2,52,35,0,1,48,2,5,3,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,27,0,20,31,0,20,32,0,20,37,0,20,5,0,48,1,48,2,5,20,2,0,52,1,0,1,21,2,0,50],"constants":[{"t":"s","v":"skip"},{"t":"s","v":"inc"},{"t":"s","v":"i"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"string"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":" "},{"t":"s","v":"starts-with?"},{"t":"s","v":"class"},{"t":"s","v":"id"},{"t":"s","v":"sx-"},{"t":"s","v":"data-"},{"t":"s","v":"style"},{"t":"s","v":"href"},{"t":"s","v":"src"},{"t":"s","v":"type"},{"t":"s","v":"name"},{"t":"s","v":"value"},{"t":"s","v":"placeholder"},{"t":"s","v":"action"},{"t":"s","v":"method"},{"t":"s","v":"target"},{"t":"s","v":"role"},{"t":"s","v":"for"},{"t":"s","v":"on"},{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"serialize"},{"t":"s","v":"nth"},{"t":"s","v":"aser-reserialize"}]}},{"t":"s","v":"args"},{"t":"s","v":"str"},{"t":"s","v":"("},{"t":"s","v":"join"},{"t":"s","v":" "},{"t":"s","v":"parts"},{"t":"s","v":")"}]}},{"t":"s","v":"aser-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,51,2,0,20,3,0,52,1,0,2,5,20,5,0,52,4,0,1,33,6,0,1,6,0,32,57,0,20,5,0,52,8,0,1,1,9,0,52,7,0,2,33,15,0,20,10,0,20,5,0,52,11,0,1,49,1,32,25,0,20,10,0,1,13,0,1,15,0,20,5,0,52,14,0,2,1,16,0,52,12,0,3,49,1,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,20,4,0,52,3,0,1,33,4,0,2,32,81,0,20,4,0,52,6,0,1,1,7,0,52,5,0,2,33,19,0,20,8,0,20,9,0,20,10,0,20,4,0,48,1,49,2,32,45,0,20,4,0,52,6,0,1,1,11,0,52,5,0,2,33,13,0,51,13,0,20,4,0,52,12,0,2,32,15,0,20,8,0,20,9,0,20,4,0,52,14,0,1,49,2,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"c"},{"t":"s","v":"env"},{"t":"s","v":"nil?"},{"t":"s","v":"result"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"sx-expr"},{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"sx-expr-source"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,55,0,20,2,0,52,4,0,1,1,5,0,52,3,0,2,33,19,0,20,6,0,20,7,0,20,8,0,20,2,0,48,1,49,2,32,16,0,20,6,0,20,7,0,20,9,0,20,2,0,48,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"item"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"sx-expr"},{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"sx-expr-source"},{"t":"s","v":"aser-reserialize"}]}},{"t":"s","v":"serialize"}]}},{"t":"s","v":"children"},{"t":"s","v":"empty?"},{"t":"s","v":"parts"},{"t":"s","v":""},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"make-sx-expr"},{"t":"s","v":"first"},{"t":"s","v":"str"},{"t":"s","v":"(<> "},{"t":"s","v":"join"},{"t":"s","v":" "},{"t":"s","v":")"}]}},{"t":"s","v":"aser-call"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,3,52,0,0,0,17,4,4,17,5,1,1,0,17,6,20,2,0,1,3,0,2,48,2,5,51,5,0,20,6,0,52,4,0,2,5,51,7,0,20,8,0,1,3,0,48,1,52,4,0,2,5,20,9,0,1,3,0,48,1,5,20,11,0,52,0,0,1,20,12,0,20,13,0,52,10,0,3,17,7,20,14,0,1,16,0,1,18,0,20,19,0,52,17,0,2,1,20,0,52,15,0,3,49,1,50],"constants":[{"t":"s","v":"list"},{"t":"n","v":0},{"t":"s","v":"scope-push!"},{"t":"s","v":"element-attrs"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,18,0,4,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,43,1,20,5,0,52,4,0,1,1,6,0,52,3,0,2,6,33,19,0,5,20,2,0,52,1,0,1,20,9,0,52,8,0,1,52,7,0,2,33,136,0,20,10,0,20,9,0,20,2,0,52,1,0,1,52,11,0,2,20,12,0,48,2,17,1,20,15,0,52,14,0,1,52,13,0,1,33,78,0,20,16,0,20,17,0,1,19,0,20,20,0,20,5,0,48,1,52,18,0,2,48,2,5,20,15,0,52,4,0,1,1,21,0,52,3,0,2,33,19,0,20,16,0,20,17,0,20,22,0,20,15,0,48,1,48,2,32,15,0,20,16,0,20,17,0,20,15,0,52,23,0,1,48,2,32,1,0,2,5,3,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,123,0,20,10,0,20,5,0,20,12,0,48,2,17,1,20,15,0,52,14,0,1,52,13,0,1,33,84,0,20,15,0,52,4,0,1,1,21,0,52,3,0,2,33,19,0,20,16,0,20,24,0,20,22,0,20,15,0,48,1,48,2,32,45,0,20,15,0,52,4,0,1,1,25,0,52,3,0,2,33,13,0,51,27,0,20,15,0,52,26,0,2,32,15,0,20,16,0,20,24,0,20,15,0,52,23,0,1,48,2,32,1,0,2,5,20,2,0,52,1,0,1,21,2,0,50],"constants":[{"t":"s","v":"skip"},{"t":"s","v":"inc"},{"t":"s","v":"i"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"aser"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"val"},{"t":"s","v":"append!"},{"t":"s","v":"attr-parts"},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"keyword-name"},{"t":"s","v":"sx-expr"},{"t":"s","v":"sx-expr-source"},{"t":"s","v":"serialize"},{"t":"s","v":"child-parts"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,54,0,20,2,0,52,4,0,1,1,5,0,52,3,0,2,33,19,0,20,6,0,20,7,0,20,8,0,20,2,0,48,1,49,2,32,15,0,20,6,0,20,7,0,20,2,0,52,9,0,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"item"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"sx-expr"},{"t":"s","v":"append!"},{"t":"s","v":"child-parts"},{"t":"s","v":"sx-expr-source"},{"t":"s","v":"serialize"}]}}]}},{"t":"s","v":"args"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,3,0,20,4,0,1,6,0,20,2,0,52,5,0,2,48,2,5,20,3,0,20,4,0,20,8,0,52,7,0,1,49,2,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"spread-dict"},{"t":"s","v":"k"},{"t":"s","v":"append!"},{"t":"s","v":"attr-parts"},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"serialize"},{"t":"s","v":"v"}]}},{"t":"s","v":"keys"},{"t":"s","v":"spread-dict"}]}},{"t":"s","v":"scope-peek"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"concat"},{"t":"s","v":"name"},{"t":"s","v":"attr-parts"},{"t":"s","v":"child-parts"},{"t":"s","v":"make-sx-expr"},{"t":"s","v":"str"},{"t":"s","v":"("},{"t":"s","v":"join"},{"t":"s","v":" "},{"t":"s","v":"parts"},{"t":"s","v":")"}]}},{"t":"s","v":"aser-expand-component"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,2,0,20,3,0,20,1,0,52,4,0,1,48,2,17,4,1,5,0,17,5,4,17,6,52,6,0,0,17,7,51,8,0,20,9,0,52,7,0,2,5,51,10,0,20,11,0,52,7,0,2,5,20,12,0,20,1,0,48,1,33,56,0,51,14,0,20,15,0,52,13,0,2,17,8,20,16,0,20,17,0,1,15,0,20,20,0,52,19,0,1,1,21,0,52,18,0,2,33,10,0,20,20,0,52,22,0,1,32,3,0,20,20,0,48,3,32,1,0,2,5,20,23,0,20,1,0,52,24,0,1,20,17,0,49,2,50],"constants":[{"t":"s","v":"component-params"},{"t":"s","v":"comp"},{"t":"s","v":"env-merge"},{"t":"s","v":"env"},{"t":"s","v":"component-closure"},{"t":"n","v":0},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"}]}},{"t":"s","v":"params"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,18,0,4,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,119,0,20,5,0,52,4,0,1,1,6,0,52,3,0,2,6,33,19,0,5,20,2,0,52,1,0,1,20,9,0,52,8,0,1,52,7,0,2,33,57,0,20,10,0,20,11,0,20,12,0,20,5,0,48,1,20,13,0,20,9,0,20,2,0,52,1,0,1,52,14,0,2,20,15,0,48,2,48,3,5,3,21,0,0,5,20,2,0,52,1,0,1,21,2,0,32,22,0,20,16,0,20,17,0,20,5,0,48,2,5,20,2,0,52,1,0,1,21,2,0,50],"constants":[{"t":"s","v":"skip"},{"t":"s","v":"inc"},{"t":"s","v":"i"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"keyword-name"},{"t":"s","v":"aser"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"args"},{"t":"s","v":"component-has-children"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"c"},{"t":"s","v":"env"}]}},{"t":"s","v":"children"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"s","v":"asered-children"},{"t":"n","v":1},{"t":"s","v":"first"},{"t":"s","v":"aser"},{"t":"s","v":"component-body"}]}},{"t":"s","v":"SPECIAL_FORM_NAMES"},{"t":"s","v":"list"},{"t":"s","v":"if"},{"t":"s","v":"when"},{"t":"s","v":"cond"},{"t":"s","v":"case"},{"t":"s","v":"and"},{"t":"s","v":"or"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"lambda"},{"t":"s","v":"fn"},{"t":"s","v":"define"},{"t":"s","v":"defcomp"},{"t":"s","v":"defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"defhandler"},{"t":"s","v":"defpage"},{"t":"s","v":"defquery"},{"t":"s","v":"defaction"},{"t":"s","v":"defrelation"},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"s","v":"quote"},{"t":"s","v":"quasiquote"},{"t":"s","v":"->"},{"t":"s","v":"set!"},{"t":"s","v":"letrec"},{"t":"s","v":"dynamic-wind"},{"t":"s","v":"defisland"},{"t":"s","v":"deftype"},{"t":"s","v":"defeffect"},{"t":"s","v":"scope"},{"t":"s","v":"provide"},{"t":"s","v":"context"},{"t":"s","v":"emit!"},{"t":"s","v":"emitted"},{"t":"s","v":"HO_FORM_NAMES"},{"t":"s","v":"map"},{"t":"s","v":"map-indexed"},{"t":"s","v":"filter"},{"t":"s","v":"reduce"},{"t":"s","v":"some"},{"t":"s","v":"every?"},{"t":"s","v":"for-each"},{"t":"s","v":"special-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"SPECIAL_FORM_NAMES"},{"t":"s","v":"name"}]}},{"t":"s","v":"ho-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"HO_FORM_NAMES"},{"t":"s","v":"name"}]}},{"t":"s","v":"aser-special"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,3,0,1,4,0,52,2,0,2,33,86,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,33,21,0,20,10,0,20,8,0,1,12,0,52,11,0,2,20,9,0,49,2,32,39,0,20,8,0,52,14,0,1,1,15,0,52,13,0,2,33,21,0,20,10,0,20,8,0,1,15,0,52,11,0,2,20,9,0,49,2,32,1,0,2,32,122,5,20,3,0,1,16,0,52,2,0,2,33,55,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,52,17,0,1,33,4,0,2,32,21,0,2,17,4,51,19,0,20,8,0,52,0,0,1,52,18,0,2,5,20,20,0,32,54,5,20,3,0,1,21,0,52,2,0,2,33,37,0,20,22,0,20,8,0,20,9,0,48,2,17,4,20,23,0,33,14,0,20,10,0,20,23,0,20,9,0,49,2,32,1,0,2,32,4,5,20,3,0,1,24,0,52,2,0,2,33,48,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,8,0,52,0,0,1,17,5,20,25,0,20,26,0,20,27,0,20,9,0,49,3,32,199,4,20,3,0,1,28,0,52,2,0,2,6,34,11,0,5,20,3,0,1,29,0,52,2,0,2,33,41,0,20,30,0,20,8,0,52,7,0,1,20,9,0,48,2,17,4,2,17,5,51,31,0,20,8,0,52,0,0,1,52,18,0,2,5,20,20,0,32,130,4,20,3,0,1,32,0,52,2,0,2,6,34,11,0,5,20,3,0,1,33,0,52,2,0,2,33,20,0,2,17,4,51,19,0,20,8,0,52,18,0,2,5,20,20,0,32,82,4,20,3,0,1,34,0,52,2,0,2,33,20,0,3,17,4,51,36,0,20,8,0,52,35,0,2,5,20,20,0,32,49,4,20,3,0,1,37,0,52,2,0,2,33,20,0,4,17,4,51,38,0,20,8,0,52,35,0,2,5,20,20,0,32,16,4,20,3,0,1,39,0,52,2,0,2,33,60,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,17,5,51,40,0,20,41,0,52,39,0,2,32,199,3,20,3,0,1,42,0,52,2,0,2,33,60,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,17,5,51,43,0,20,41,0,52,42,0,2,32,126,3,20,3,0,1,18,0,52,2,0,2,33,84,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,17,5,52,44,0,0,17,6,51,45,0,20,41,0,52,18,0,2,5,20,47,0,52,46,0,1,33,4,0,2,32,3,0,20,47,0,32,29,3,20,3,0,1,48,0,52,2,0,2,33,27,0,20,5,0,20,6,0,20,1,0,20,9,0,48,2,48,1,5,20,1,0,52,49,0,1,32,245,2,20,3,0,1,50,0,52,2,0,2,6,34,146,0,5,20,3,0,1,51,0,52,2,0,2,6,34,131,0,5,20,3,0,1,52,0,52,2,0,2,6,34,116,0,5,20,3,0,1,53,0,52,2,0,2,6,34,101,0,5,20,3,0,1,54,0,52,2,0,2,6,34,86,0,5,20,3,0,1,55,0,52,2,0,2,6,34,71,0,5,20,3,0,1,56,0,52,2,0,2,6,34,56,0,5,20,3,0,1,57,0,52,2,0,2,6,34,41,0,5,20,3,0,1,58,0,52,2,0,2,6,34,26,0,5,20,3,0,1,59,0,52,2,0,2,6,34,11,0,5,20,3,0,1,60,0,52,2,0,2,33,21,0,20,5,0,20,6,0,20,1,0,20,9,0,48,2,48,1,5,2,32,61,2,20,3,0,1,61,0,52,2,0,2,33,192,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,8,0,52,0,0,1,17,5,2,17,6,2,17,7,20,63,0,52,14,0,1,1,15,0,52,62,0,2,6,33,43,0,5,20,63,0,52,7,0,1,52,64,0,1,1,65,0,52,2,0,2,6,33,20,0,5,20,66,0,20,63,0,52,7,0,1,48,1,1,67,0,52,2,0,2,33,43,0,20,5,0,20,6,0,20,63,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,21,68,0,5,20,63,0,1,15,0,52,69,0,2,21,70,0,32,6,0,20,63,0,21,70,0,5,20,71,0,20,72,0,20,68,0,48,2,5,2,17,8,51,19,0,20,70,0,52,18,0,2,5,20,73,0,20,72,0,48,1,5,20,20,0,32,112,1,20,3,0,1,74,0,52,2,0,2,33,95,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,17,5,2,17,6,20,71,0,20,75,0,20,76,0,48,2,5,51,19,0,20,8,0,1,15,0,52,69,0,2,52,18,0,2,5,20,73,0,20,75,0,48,1,5,20,20,0,32,4,1,20,3,0,1,77,0,52,2,0,2,33,100,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,8,0,52,14,0,1,1,15,0,52,62,0,2,33,26,0,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,32,1,0,2,17,5,20,78,0,20,79,0,48,1,17,6,20,81,0,52,80,0,1,33,6,0,20,82,0,32,3,0,20,81,0,32,147,0,20,3,0,1,83,0,52,2,0,2,33,63,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,5,0,20,6,0,20,8,0,1,12,0,52,11,0,2,20,9,0,48,2,48,1,17,5,20,84,0,20,85,0,20,86,0,48,2,5,2,32,71,0,20,3,0,1,87,0,52,2,0,2,33,42,0,20,5,0,20,6,0,20,8,0,52,7,0,1,20,9,0,48,2,48,1,17,4,20,78,0,20,85,0,48,1,6,34,5,0,5,52,44,0,0,32,16,0,20,5,0,20,6,0,20,1,0,20,9,0,48,2,49,1,50],"constants":[{"t":"s","v":"rest"},{"t":"s","v":"expr"},{"t":"s","v":"="},{"t":"s","v":"name"},{"t":"s","v":"if"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"env"},{"t":"s","v":"aser"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"when"},{"t":"s","v":"not"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,21,3,0,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"body"},{"t":"s","v":"env"},{"t":"s","v":"result"}]}},{"t":"s","v":"result"},{"t":"s","v":"cond"},{"t":"s","v":"eval-cond"},{"t":"s","v":"branch"},{"t":"s","v":"case"},{"t":"s","v":"eval-case-aser"},{"t":"s","v":"match-val"},{"t":"s","v":"clauses"},{"t":"s","v":"let"},{"t":"s","v":"let*"},{"t":"s","v":"process-bindings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,21,3,0,50],"constants":[{"t":"s","v":"aser"},{"t":"s","v":"body"},{"t":"s","v":"local"},{"t":"s","v":"result"}]}},{"t":"s","v":"begin"},{"t":"s","v":"do"},{"t":"s","v":"and"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,48,1,21,4,0,5,20,4,0,52,5,0,1,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"arg"},{"t":"s","v":"env"},{"t":"s","v":"result"},{"t":"s","v":"not"}]}},{"t":"s","v":"or"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,2,48,1,21,4,0,5,20,4,0,50],"constants":[{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"arg"},{"t":"s","v":"env"},{"t":"s","v":"result"}]}},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,58,0,20,2,0,20,1,0,52,3,0,1,20,4,0,48,2,17,1,20,5,0,20,6,0,20,1,0,52,8,0,1,52,7,0,1,20,9,0,48,3,5,20,10,0,20,1,0,52,11,0,1,20,6,0,49,2,32,15,0,20,12,0,20,1,0,20,9,0,52,13,0,1,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"env-merge"},{"t":"s","v":"lambda-closure"},{"t":"s","v":"env"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"first"},{"t":"s","v":"lambda-params"},{"t":"s","v":"item"},{"t":"s","v":"aser"},{"t":"s","v":"lambda-body"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"}]}},{"t":"s","v":"coll"},{"t":"s","v":"map-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,84,0,20,2,0,20,1,0,52,3,0,1,20,4,0,48,2,17,2,20,5,0,20,6,0,20,1,0,52,8,0,1,52,7,0,1,20,9,0,48,3,5,20,5,0,20,6,0,20,1,0,52,8,0,1,1,11,0,52,10,0,2,20,12,0,48,3,5,20,13,0,20,1,0,52,14,0,1,20,6,0,49,2,32,18,0,20,15,0,20,1,0,20,9,0,20,12,0,52,16,0,2,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"env-merge"},{"t":"s","v":"lambda-closure"},{"t":"s","v":"env"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"first"},{"t":"s","v":"lambda-params"},{"t":"s","v":"i"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"item"},{"t":"s","v":"aser"},{"t":"s","v":"lambda-body"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"}]}},{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,66,0,20,2,0,20,1,0,52,3,0,1,20,4,0,48,2,17,1,20,5,0,20,6,0,20,1,0,52,8,0,1,52,7,0,1,20,9,0,48,3,5,20,10,0,20,11,0,20,12,0,20,1,0,52,13,0,1,20,6,0,48,2,49,2,32,15,0,20,14,0,20,1,0,20,9,0,52,15,0,1,49,2,50],"constants":[{"t":"s","v":"lambda?"},{"t":"s","v":"f"},{"t":"s","v":"env-merge"},{"t":"s","v":"lambda-closure"},{"t":"s","v":"env"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"first"},{"t":"s","v":"lambda-params"},{"t":"s","v":"item"},{"t":"s","v":"append!"},{"t":"s","v":"results"},{"t":"s","v":"aser"},{"t":"s","v":"lambda-body"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"}]}},{"t":"s","v":"empty?"},{"t":"s","v":"results"},{"t":"s","v":"defisland"},{"t":"s","v":"serialize"},{"t":"s","v":"define"},{"t":"s","v":"defcomp"},{"t":"s","v":"defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"defhandler"},{"t":"s","v":"defpage"},{"t":"s","v":"defquery"},{"t":"s","v":"defaction"},{"t":"s","v":"defrelation"},{"t":"s","v":"deftype"},{"t":"s","v":"defeffect"},{"t":"s","v":"scope"},{"t":"s","v":">="},{"t":"s","v":"rest-args"},{"t":"s","v":"type-of"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"value"},{"t":"s","v":"scope-val"},{"t":"s","v":"slice"},{"t":"s","v":"body-args"},{"t":"s","v":"scope-push!"},{"t":"s","v":"scope-name"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"provide"},{"t":"s","v":"prov-name"},{"t":"s","v":"prov-val"},{"t":"s","v":"context"},{"t":"s","v":"scope-peek"},{"t":"s","v":"ctx-name"},{"t":"s","v":"nil?"},{"t":"s","v":"val"},{"t":"s","v":"default-val"},{"t":"s","v":"emit!"},{"t":"s","v":"scope-emit!"},{"t":"s","v":"emit-name"},{"t":"s","v":"emit-val"},{"t":"s","v":"emitted"}]}},{"t":"s","v":"eval-case-aser"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,4,0,2,32,192,0,20,2,0,52,4,0,1,17,3,20,2,0,1,6,0,52,5,0,2,17,4,20,9,0,52,8,0,1,1,10,0,52,7,0,2,6,33,16,0,5,20,11,0,20,9,0,48,1,1,12,0,52,7,0,2,6,34,55,0,5,20,9,0,52,8,0,1,1,13,0,52,7,0,2,6,33,36,0,5,20,14,0,20,9,0,48,1,1,15,0,52,7,0,2,6,34,16,0,5,20,14,0,20,9,0,48,1,1,12,0,52,7,0,2,33,14,0,20,16,0,20,17,0,20,18,0,49,2,32,61,0,20,19,0,20,20,0,20,21,0,20,9,0,20,18,0,48,2,48,1,52,7,0,2,33,14,0,20,16,0,20,17,0,20,18,0,49,2,32,21,0,20,22,0,20,19,0,20,2,0,1,3,0,52,23,0,2,20,18,0,49,3,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"clauses"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"test"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"else"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":":else"},{"t":"s","v":"aser"},{"t":"s","v":"body"},{"t":"s","v":"env"},{"t":"s","v":"match-val"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"eval-case-aser"},{"t":"s","v":"slice"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/boot-helpers.sxbc.json b/shared/static/wasm/sx/boot-helpers.sxbc.json new file mode 100644 index 00000000..84aeed1e --- /dev/null +++ b/shared/static/wasm/sx/boot-helpers.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"b8d307935bc3b91a","module":{"arity":0,"bytecode":[1,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,27,0,128,46,0,5,51,27,0,128,47,0,5,51,27,0,128,48,0,5,51,27,0,128,49,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,27,0,128,54,0,5,51,27,0,128,55,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,51,65,0,128,64,0,5,51,67,0,128,66,0,5,51,69,0,128,68,0,5,51,71,0,128,70,0,5,51,73,0,128,72,0,5,51,75,0,128,74,0,5,51,77,0,128,76,0,5,51,79,0,128,78,0,5,51,81,0,128,80,0,5,51,83,0,128,82,0,5,51,85,0,128,84,0,5,51,87,0,128,86,0,5,51,89,0,128,88,0,5,51,91,0,128,90,0,5,51,93,0,128,92,0,5,51,95,0,128,94,0,5,51,97,0,128,96,0,5,51,99,0,128,98,0,5,51,101,0,128,100,0,5,51,27,0,128,102,0,5,51,104,0,128,103,0,5,51,106,0,128,105,0,5,51,108,0,128,107,0,5,51,110,0,128,109,0,5,51,112,0,128,111,0,5,51,114,0,128,113,0,5,51,116,0,128,115,0,5,51,118,0,128,117,0,5,51,120,0,128,119,0,5,51,27,0,128,121,0,5,51,27,0,128,122,0,5,51,124,0,128,123,0,5,51,126,0,128,125,0,5,51,128,0,128,127,0,5,51,27,0,128,129,0,5,51,27,0,128,130,0,5,51,27,0,128,131,0,5,51,27,0,128,132,0,5,51,27,0,128,133,0,50],"constants":[{"t":"s","v":"_sx-bound-prefix"},{"t":"s","v":"_sxBound"},{"t":"s","v":"mark-processed!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,20,4,0,52,2,0,2,3,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"el"},{"t":"s","v":"str"},{"t":"s","v":"_sx-bound-prefix"},{"t":"s","v":"key"}]}},{"t":"s","v":"is-processed?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,20,4,0,52,2,0,2,48,2,17,2,20,5,0,33,4,0,3,32,1,0,4,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"str"},{"t":"s","v":"_sx-bound-prefix"},{"t":"s","v":"key"},{"t":"s","v":"v"}]}},{"t":"s","v":"clear-processed!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,20,4,0,52,2,0,2,2,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"el"},{"t":"s","v":"str"},{"t":"s","v":"_sx-bound-prefix"},{"t":"s","v":"key"}]}},{"t":"s","v":"callable?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,3,0,1,4,0,52,2,0,2,6,34,26,0,5,20,3,0,1,5,0,52,2,0,2,6,34,11,0,5,20,3,0,1,6,0,52,2,0,2,50],"constants":[{"t":"s","v":"type-of"},{"t":"s","v":"v"},{"t":"s","v":"="},{"t":"s","v":"t"},{"t":"s","v":"lambda"},{"t":"s","v":"native-fn"},{"t":"s","v":"continuation"}]}},{"t":"s","v":"to-kebab"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,52,1,0,0,17,1,1,2,0,17,2,2,17,3,51,3,0,17,3,20,4,0,1,2,0,48,1,5,1,6,0,20,7,0,52,5,0,2,50],"constants":[{"t":"s","v":"Convert camelCase to kebab-case."},{"t":"s","v":"list"},{"t":"n","v":0},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,33,117,0,20,3,0,20,1,0,52,4,0,2,17,1,20,6,0,1,7,0,52,5,0,2,6,33,11,0,5,20,6,0,1,9,0,52,8,0,2,33,47,0,20,1,0,1,11,0,52,10,0,2,33,14,0,20,12,0,20,13,0,1,14,0,48,2,32,1,0,2,5,20,12,0,20,13,0,20,6,0,52,15,0,1,48,2,32,11,0,20,12,0,20,13,0,20,6,0,48,2,5,20,16,0,20,1,0,1,18,0,52,17,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"len"},{"t":"s","v":"s"},{"t":"s","v":"nth"},{"t":"s","v":">="},{"t":"s","v":"ch"},{"t":"s","v":"A"},{"t":"s","v":"<="},{"t":"s","v":"Z"},{"t":"s","v":">"},{"t":"n","v":0},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"-"},{"t":"s","v":"lower"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"s","v":"join"},{"t":"s","v":""},{"t":"s","v":"result"}]}},{"t":"s","v":"sx-load-components"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,6,33,15,0,5,20,1,0,52,3,0,1,1,4,0,52,2,0,2,33,23,0,20,5,0,20,1,0,48,1,17,1,51,7,0,20,8,0,52,6,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"Parse and evaluate component definitions from text."},{"t":"s","v":"text"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"sx-parse"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"cek-eval"},{"t":"s","v":"expr"}]}},{"t":"s","v":"exprs"}]}},{"t":"s","v":"call-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,48,1,17,2,20,5,0,52,4,0,1,52,3,0,1,33,15,0,20,6,0,20,5,0,52,7,0,1,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"Parse and evaluate an SX expression string."},{"t":"s","v":"sx-parse"},{"t":"s","v":"expr-text"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"exprs"},{"t":"s","v":"cek-eval"},{"t":"s","v":"first"}]}},{"t":"s","v":"base-env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,49,0,50],"constants":[{"t":"s","v":"Return the current global environment."},{"t":"s","v":"global-env"}]}},{"t":"s","v":"get-render-env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,48,0,17,1,20,2,0,6,33,12,0,5,20,2,0,52,4,0,1,52,3,0,1,33,14,0,20,5,0,20,6,0,20,2,0,49,2,32,3,0,20,6,0,50],"constants":[{"t":"s","v":"Get the rendering environment (global env, optionally merged with extra)."},{"t":"s","v":"base-env"},{"t":"s","v":"extra"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"env-merge"},{"t":"s","v":"env"}]}},{"t":"s","v":"merge-envs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,6,33,4,0,5,20,2,0,33,14,0,20,3,0,20,1,0,20,2,0,49,2,32,21,0,20,1,0,6,34,14,0,5,20,2,0,6,34,6,0,5,20,4,0,49,0,50],"constants":[{"t":"s","v":"Merge two environments."},{"t":"s","v":"a"},{"t":"s","v":"b"},{"t":"s","v":"env-merge"},{"t":"s","v":"global-env"}]}},{"t":"s","v":"sx-render-with-env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,1,2,0,48,1,17,2,20,3,0,20,4,0,1,5,0,48,2,17,3,20,6,0,20,7,0,48,1,17,4,51,9,0,20,10,0,52,8,0,2,5,20,11,0,50],"constants":[{"t":"s","v":"Parse SX source and render to DOM fragment."},{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createDocumentFragment"},{"t":"s","v":"sx-parse"},{"t":"s","v":"source"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,6,33,15,0,5,20,2,0,52,4,0,1,1,5,0,52,3,0,2,33,56,0,20,6,0,20,7,0,1,8,0,1,9,0,48,3,17,2,20,10,0,20,11,0,1,12,0,20,2,0,48,3,5,20,6,0,20,13,0,1,14,0,20,15,0,20,11,0,1,16,0,48,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-html"},{"t":"s","v":"expr"},{"t":"s","v":"html"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createElement"},{"t":"s","v":"template"},{"t":"s","v":"host-set!"},{"t":"s","v":"temp"},{"t":"s","v":"innerHTML"},{"t":"s","v":"frag"},{"t":"s","v":"appendChild"},{"t":"s","v":"host-get"},{"t":"s","v":"content"}]}},{"t":"s","v":"exprs"},{"t":"s","v":"frag"}]}},{"t":"s","v":"parse-env-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,2,50],"constants":[{"t":"s","v":"Parse data-sx-env attribute (JSON key-value pairs)."}]}},{"t":"s","v":"store-env-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,50],"constants":[]}},{"t":"s","v":"resolve-mount-target"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,33,11,0,20,3,0,20,2,0,49,1,32,3,0,20,2,0,50],"constants":[{"t":"s","v":"Resolve a CSS selector string to a DOM element."},{"t":"s","v":"string?"},{"t":"s","v":"target"},{"t":"s","v":"dom-query"}]}},{"t":"s","v":"remove-head-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,48,1,17,1,20,3,0,33,11,0,20,4,0,20,3,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"Remove a element matching selector."},{"t":"s","v":"dom-query"},{"t":"s","v":"sel"},{"t":"s","v":"el"},{"t":"s","v":"dom-remove"}]}},{"t":"s","v":"set-sx-comp-cookie"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"set-cookie"},{"t":"s","v":"sx-components"},{"t":"s","v":"hash"}]}},{"t":"s","v":"clear-sx-comp-cookie"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"set-cookie"},{"t":"s","v":"sx-components"},{"t":"s","v":""}]}},{"t":"s","v":"log-parse-error"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,3,0,1,4,0,20,5,0,52,1,0,4,49,1,50],"constants":[{"t":"s","v":"log-error"},{"t":"s","v":"str"},{"t":"s","v":"Parse error in "},{"t":"s","v":"label"},{"t":"s","v":": "},{"t":"s","v":"err"}]}},{"t":"s","v":"loaded-component-names"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,48,2,17,0,52,3,0,0,17,1,51,5,0,20,6,0,52,4,0,2,5,20,7,0,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"dom-body"},{"t":"s","v":"script[data-components]"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,17,1,20,6,0,52,5,0,1,1,7,0,52,4,0,2,33,20,0,51,9,0,20,6,0,1,11,0,52,10,0,2,52,8,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"script"},{"t":"s","v":"data-components"},{"t":"s","v":""},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"s","v":"text"},{"t":"n","v":0},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,18,0,20,5,0,20,6,0,20,3,0,52,2,0,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"s","v":"trim"},{"t":"s","v":"name"},{"t":"n","v":0},{"t":"s","v":"append!"},{"t":"s","v":"names"}]}},{"t":"s","v":"split"},{"t":"s","v":","}]}},{"t":"s","v":"scripts"},{"t":"s","v":"names"}]}},{"t":"s","v":"csrf-token"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,0,20,2,0,33,14,0,20,3,0,20,2,0,1,4,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-query"},{"t":"s","v":"meta[name=\"csrf-token\"]"},{"t":"s","v":"meta"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"content"}]}},{"t":"s","v":"validate-for-request"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[3,50],"constants":[]}},{"t":"s","v":"build-request-body"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,3,0,1,4,0,52,2,0,2,6,34,11,0,5,20,3,0,1,5,0,52,2,0,2,33,179,0,20,6,0,6,33,28,0,5,20,7,0,20,6,0,48,1,6,34,4,0,5,1,8,0,52,0,0,1,1,9,0,52,2,0,2,33,120,0,20,10,0,1,11,0,20,6,0,48,2,17,4,20,10,0,1,12,0,20,13,0,48,2,17,5,20,14,0,20,15,0,1,16,0,48,2,17,6,1,18,0,20,19,0,6,33,15,0,5,20,19,0,52,21,0,1,1,22,0,52,20,0,2,33,35,0,20,18,0,20,18,0,1,25,0,52,24,0,2,33,6,0,1,26,0,32,3,0,1,25,0,20,19,0,52,23,0,3,32,3,0,20,18,0,1,27,0,2,1,28,0,2,52,17,0,6,32,18,0,1,18,0,20,18,0,1,27,0,2,1,28,0,2,52,17,0,6,32,185,0,20,6,0,6,33,28,0,5,20,7,0,20,6,0,48,1,6,34,4,0,5,1,8,0,52,0,0,1,1,9,0,52,2,0,2,33,129,0,20,29,0,20,6,0,1,30,0,48,2,6,34,4,0,5,1,31,0,17,4,20,30,0,1,32,0,52,2,0,2,33,36,0,20,10,0,1,11,0,20,6,0,48,2,17,5,1,18,0,20,18,0,1,27,0,20,13,0,1,28,0,2,52,17,0,6,32,56,0,20,10,0,1,11,0,20,6,0,48,2,17,5,20,10,0,1,12,0,20,13,0,48,2,17,6,1,18,0,20,18,0,1,27,0,20,14,0,20,15,0,1,16,0,48,2,1,28,0,1,31,0,52,17,0,6,32,18,0,1,18,0,20,18,0,1,27,0,2,1,28,0,2,52,17,0,6,50],"constants":[{"t":"s","v":"upper"},{"t":"s","v":"method"},{"t":"s","v":"="},{"t":"s","v":"m"},{"t":"s","v":"GET"},{"t":"s","v":"HEAD"},{"t":"s","v":"el"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":""},{"t":"s","v":"FORM"},{"t":"s","v":"host-new"},{"t":"s","v":"FormData"},{"t":"s","v":"URLSearchParams"},{"t":"s","v":"fd"},{"t":"s","v":"host-call"},{"t":"s","v":"params"},{"t":"s","v":"toString"},{"t":"s","v":"dict"},{"t":"s","v":"url"},{"t":"s","v":"qs"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"str"},{"t":"s","v":"contains?"},{"t":"s","v":"?"},{"t":"s","v":"&"},{"t":"s","v":"body"},{"t":"s","v":"content-type"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"enctype"},{"t":"s","v":"application/x-www-form-urlencoded"},{"t":"s","v":"multipart/form-data"}]}},{"t":"s","v":"abort-previous-target"},{"t":"s","v":"abort-previous"},{"t":"s","v":"track-controller"},{"t":"s","v":"track-controller-target"},{"t":"s","v":"new-abort-controller"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,49,1,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"AbortController"}]}},{"t":"s","v":"abort-signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"ctrl"},{"t":"s","v":"signal"}]}},{"t":"s","v":"apply-optimistic"},{"t":"s","v":"revert-optimistic"},{"t":"s","v":"dom-has-attr?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"hasAttribute"},{"t":"s","v":"name"}]}},{"t":"s","v":"show-indicator"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,46,0,20,4,0,20,3,0,48,1,17,2,20,5,0,33,26,0,20,6,0,20,5,0,1,7,0,48,2,5,20,8,0,20,5,0,1,9,0,48,2,32,1,0,2,32,1,0,2,5,20,3,0,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-indicator"},{"t":"s","v":"indicator-sel"},{"t":"s","v":"dom-query"},{"t":"s","v":"indicator"},{"t":"s","v":"dom-remove-class"},{"t":"s","v":"hidden"},{"t":"s","v":"dom-add-class"},{"t":"s","v":"sx-indicator-visible"}]}},{"t":"s","v":"disable-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,32,0,20,4,0,20,5,0,48,0,20,3,0,48,2,17,2,51,7,0,20,8,0,52,6,0,2,5,20,8,0,32,4,0,52,9,0,0,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-disabled-elt"},{"t":"s","v":"disable-sel"},{"t":"s","v":"dom-query-all"},{"t":"s","v":"dom-body"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,1,3,0,49,3,50],"constants":[{"t":"s","v":"dom-set-attr"},{"t":"s","v":"e"},{"t":"s","v":"disabled"},{"t":"s","v":""}]}},{"t":"s","v":"elts"},{"t":"s","v":"list"}]}},{"t":"s","v":"clear-loading-state"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,5,20,3,0,20,1,0,1,4,0,48,2,5,20,5,0,33,46,0,20,6,0,20,5,0,48,1,17,3,20,7,0,33,26,0,20,8,0,20,7,0,1,9,0,48,2,5,20,0,0,20,7,0,1,10,0,48,2,32,1,0,2,32,1,0,2,5,20,11,0,33,13,0,51,13,0,20,11,0,52,12,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-remove-class"},{"t":"s","v":"el"},{"t":"s","v":"sx-request"},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"aria-busy"},{"t":"s","v":"indicator"},{"t":"s","v":"dom-query"},{"t":"s","v":"ind"},{"t":"s","v":"dom-add-class"},{"t":"s","v":"hidden"},{"t":"s","v":"sx-indicator-visible"},{"t":"s","v":"disabled-elts"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"e"},{"t":"s","v":"disabled"}]}}]}},{"t":"s","v":"abort-error?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,1,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"host-get"},{"t":"s","v":"err"},{"t":"s","v":"name"},{"t":"s","v":"AbortError"}]}},{"t":"s","v":"promise-catch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,3,0,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"host-callback"},{"t":"s","v":"f"},{"t":"s","v":"host-call"},{"t":"s","v":"p"},{"t":"s","v":"catch"},{"t":"s","v":"cb"}]}},{"t":"s","v":"fetch-request"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,3,20,1,0,1,3,0,52,0,0,2,6,34,4,0,5,1,4,0,17,4,20,1,0,1,5,0,52,0,0,2,6,34,5,0,5,52,6,0,0,17,5,20,1,0,1,7,0,52,0,0,2,17,6,20,1,0,1,8,0,52,0,0,2,17,7,20,1,0,1,9,0,52,0,0,2,17,8,20,9,0,33,18,0,20,10,0,3,1,11,0,51,12,0,20,9,0,49,4,32,145,0,20,13,0,1,14,0,48,1,17,9,20,13,0,1,15,0,48,1,17,10,51,17,0,20,5,0,52,18,0,1,52,16,0,2,5,20,19,0,20,20,0,1,3,0,20,3,0,48,3,5,20,19,0,20,20,0,1,5,0,20,21,0,48,3,5,20,7,0,33,17,0,20,19,0,20,20,0,1,7,0,20,7,0,48,3,32,1,0,2,5,20,8,0,33,17,0,20,19,0,20,20,0,1,8,0,20,8,0,48,3,32,1,0,2,5,20,22,0,20,23,0,20,24,0,48,0,1,25,0,20,2,0,20,20,0,48,4,51,26,0,20,27,0,49,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"config"},{"t":"s","v":"url"},{"t":"s","v":"method"},{"t":"s","v":"GET"},{"t":"s","v":"headers"},{"t":"s","v":"dict"},{"t":"s","v":"body"},{"t":"s","v":"signal"},{"t":"s","v":"preloaded"},{"t":"s","v":"success-fn"},{"t":"n","v":200},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,50],"constants":[]}},{"t":"s","v":"host-new"},{"t":"s","v":"Headers"},{"t":"s","v":"Object"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,5,0,20,3,0,52,4,0,2,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"h"},{"t":"s","v":"set"},{"t":"s","v":"k"},{"t":"s","v":"get"},{"t":"s","v":"headers"}]}},{"t":"s","v":"keys"},{"t":"s","v":"host-set!"},{"t":"s","v":"js-opts"},{"t":"s","v":"h"},{"t":"s","v":"promise-then"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"fetch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,0,0,20,1,0,1,3,0,48,2,17,2,51,4,0,17,3,20,5,0,20,6,0,20,1,0,1,7,0,48,2,51,8,0,20,9,0,49,3,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"response"},{"t":"s","v":"ok"},{"t":"s","v":"status"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,1,3,0,48,2,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"response"},{"t":"s","v":"headers"},{"t":"s","v":"get"},{"t":"s","v":"name"}]}},{"t":"s","v":"promise-then"},{"t":"s","v":"host-call"},{"t":"s","v":"text"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"success-fn"},{"t":"s","v":"ok"},{"t":"s","v":"status"},{"t":"s","v":"get-header"},{"t":"s","v":"text"}]}},{"t":"s","v":"error-fn"}]}},{"t":"s","v":"error-fn"}]}},{"t":"s","v":"fetch-location"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,6,34,9,0,5,20,0,0,1,2,0,48,1,17,1,20,3,0,33,11,0,20,4,0,20,5,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"dom-query"},{"t":"s","v":"[sx-boost]"},{"t":"s","v":"#main-panel"},{"t":"s","v":"target"},{"t":"s","v":"browser-navigate"},{"t":"s","v":"url"}]}},{"t":"s","v":"fetch-and-restore"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,2,0,1,3,0,1,4,0,1,5,0,20,5,0,1,6,0,2,1,7,0,2,52,1,0,10,51,8,0,51,9,0,49,3,50],"constants":[{"t":"s","v":"fetch-request"},{"t":"s","v":"dict"},{"t":"s","v":"url"},{"t":"s","v":"method"},{"t":"s","v":"GET"},{"t":"s","v":"headers"},{"t":"s","v":"body"},{"t":"s","v":"signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,43,0,20,1,0,20,2,0,20,3,0,48,2,5,20,4,0,20,2,0,48,1,5,20,5,0,20,6,0,48,0,1,7,0,1,8,0,20,9,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"resp-ok"},{"t":"s","v":"dom-set-inner-html"},{"t":"s","v":"main"},{"t":"s","v":"text"},{"t":"s","v":"post-swap"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"scrollTo"},{"t":"n","v":0},{"t":"s","v":"scroll-y"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,3,0,52,1,0,2,49,1,50],"constants":[{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"fetch-and-restore error: "},{"t":"s","v":"err"}]}}]}},{"t":"s","v":"fetch-preload"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,2,0,1,3,0,1,4,0,1,5,0,20,5,0,1,6,0,2,1,7,0,2,52,1,0,10,51,8,0,51,9,0,49,3,50],"constants":[{"t":"s","v":"fetch-request"},{"t":"s","v":"dict"},{"t":"s","v":"url"},{"t":"s","v":"method"},{"t":"s","v":"GET"},{"t":"s","v":"headers"},{"t":"s","v":"body"},{"t":"s","v":"signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,17,0,20,1,0,20,2,0,20,3,0,20,4,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"resp-ok"},{"t":"s","v":"preload-cache-set"},{"t":"s","v":"cache"},{"t":"s","v":"url"},{"t":"s","v":"text"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,50],"constants":[]}}]}},{"t":"s","v":"fetch-streaming"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,1,4,0,49,4,50],"constants":[{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"target"},{"t":"s","v":"pathname"},{"t":"s","v":"headers"},{"t":"n","v":0}]}},{"t":"s","v":"dom-parse-html-document"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,20,3,0,1,4,0,20,5,0,1,6,0,49,4,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"DOMParser"},{"t":"s","v":"host-call"},{"t":"s","v":"parser"},{"t":"s","v":"parseFromString"},{"t":"s","v":"text"},{"t":"s","v":"text/html"}]}},{"t":"s","v":"dom-body-inner-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,0,0,20,1,0,1,2,0,48,2,1,3,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"doc"},{"t":"s","v":"body"},{"t":"s","v":"innerHTML"}]}},{"t":"s","v":"create-script-clone"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,20,3,0,1,4,0,1,5,0,48,3,17,2,20,6,0,20,7,0,1,8,0,48,2,17,3,2,17,4,51,9,0,17,4,20,10,0,1,11,0,48,1,5,20,12,0,20,13,0,1,14,0,20,6,0,20,7,0,1,14,0,48,2,48,3,5,20,13,0,50],"constants":[{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createElement"},{"t":"s","v":"script"},{"t":"s","v":"host-get"},{"t":"s","v":"dead"},{"t":"s","v":"attributes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,3,0,1,4,0,48,2,52,0,0,2,33,68,0,20,5,0,20,3,0,1,6,0,20,1,0,48,3,17,1,20,5,0,20,7,0,1,8,0,20,2,0,20,9,0,1,10,0,48,2,20,2,0,20,9,0,1,11,0,48,2,48,4,5,20,12,0,20,1,0,1,14,0,52,13,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"host-get"},{"t":"s","v":"attrs"},{"t":"s","v":"length"},{"t":"s","v":"host-call"},{"t":"s","v":"item"},{"t":"s","v":"live"},{"t":"s","v":"setAttribute"},{"t":"s","v":"attr"},{"t":"s","v":"name"},{"t":"s","v":"value"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"n","v":0},{"t":"s","v":"host-set!"},{"t":"s","v":"live"},{"t":"s","v":"textContent"}]}},{"t":"s","v":"cross-origin?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,34,11,0,5,20,1,0,1,3,0,52,0,0,2,33,19,0,20,1,0,20,5,0,48,0,52,0,0,2,52,4,0,1,32,1,0,4,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"url"},{"t":"s","v":"http://"},{"t":"s","v":"https://"},{"t":"s","v":"not"},{"t":"s","v":"browser-location-origin"}]}},{"t":"s","v":"browser-scroll-to"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"scrollTo"},{"t":"s","v":"x"},{"t":"s","v":"y"}]}},{"t":"s","v":"with-transition"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,17,0,5,20,1,0,20,2,0,1,3,0,48,1,1,4,0,48,2,33,27,0,20,5,0,20,2,0,1,3,0,48,1,1,4,0,20,6,0,20,7,0,48,1,49,3,32,5,0,20,7,0,49,0,50],"constants":[{"t":"s","v":"enabled"},{"t":"s","v":"host-get"},{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"startViewTransition"},{"t":"s","v":"host-call"},{"t":"s","v":"host-callback"},{"t":"s","v":"thunk"}]}},{"t":"s","v":"observe-intersection"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,1,0,48,1,17,4,20,2,0,1,3,0,20,0,0,51,4,0,48,1,48,2,17,5,20,5,0,20,6,0,1,7,0,20,8,0,48,3,5,20,6,0,50],"constants":[{"t":"s","v":"host-callback"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,1,4,0,20,5,0,51,6,0,48,1,48,3,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,33,56,0,20,3,0,33,14,0,20,4,0,51,5,0,20,3,0,48,2,32,8,0,20,6,0,20,1,0,48,1,5,20,7,0,33,17,0,20,8,0,20,9,0,1,10,0,20,11,0,49,3,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"entry"},{"t":"s","v":"isIntersecting"},{"t":"s","v":"delay"},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"callback"},{"t":"s","v":"entry"}]}},{"t":"s","v":"callback"},{"t":"s","v":"once?"},{"t":"s","v":"host-call"},{"t":"s","v":"observer"},{"t":"s","v":"unobserve"},{"t":"s","v":"el"}]}},{"t":"s","v":"host-call"},{"t":"s","v":"entries"},{"t":"s","v":"forEach"},{"t":"s","v":"host-callback"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,50],"constants":[{"t":"s","v":"e"}]}}]}},{"t":"s","v":"host-new"},{"t":"s","v":"IntersectionObserver"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,2,17,2,51,3,0,17,2,20,4,0,1,5,0,49,1,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"entries"},{"t":"s","v":"length"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,114,0,20,3,0,20,4,0,1,5,0,20,1,0,48,3,17,1,20,6,0,6,33,12,0,5,20,7,0,20,6,0,1,8,0,48,2,33,56,0,20,9,0,33,14,0,20,10,0,51,11,0,20,9,0,48,2,32,8,0,20,12,0,20,6,0,48,1,5,20,13,0,33,17,0,20,3,0,20,14,0,1,15,0,20,16,0,48,3,32,1,0,2,32,1,0,2,5,20,17,0,20,1,0,1,19,0,52,18,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"arr-len"},{"t":"s","v":"host-call"},{"t":"s","v":"entries"},{"t":"s","v":"item"},{"t":"s","v":"entry"},{"t":"s","v":"host-get"},{"t":"s","v":"isIntersecting"},{"t":"s","v":"delay"},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"callback"},{"t":"s","v":"entry"}]}},{"t":"s","v":"callback"},{"t":"s","v":"once?"},{"t":"s","v":"observer"},{"t":"s","v":"unobserve"},{"t":"s","v":"el"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"n","v":0}]}},{"t":"s","v":"host-call"},{"t":"s","v":"observer"},{"t":"s","v":"observe"},{"t":"s","v":"el"}]}},{"t":"s","v":"event-source-connect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,48,2,17,2,20,3,0,20,4,0,1,5,0,20,6,0,48,3,5,20,4,0,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"EventSource"},{"t":"s","v":"url"},{"t":"s","v":"host-set!"},{"t":"s","v":"source"},{"t":"s","v":"_sxElement"},{"t":"s","v":"el"}]}},{"t":"s","v":"event-source-listen"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,4,0,51,5,0,48,1,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"source"},{"t":"s","v":"addEventListener"},{"t":"s","v":"event-name"},{"t":"s","v":"host-callback"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"handler"},{"t":"s","v":"e"}]}}]}},{"t":"s","v":"bind-boost-link"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,51,3,0,49,3,50],"constants":[{"t":"s","v":"dom-listen"},{"t":"s","v":"el"},{"t":"s","v":"click"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,33,96,0,20,3,0,20,2,0,48,1,5,20,4,0,20,5,0,1,6,0,48,2,52,0,0,1,33,17,0,20,7,0,20,5,0,1,6,0,20,8,0,48,3,32,1,0,2,5,20,4,0,20,5,0,1,9,0,48,2,52,0,0,1,33,17,0,20,7,0,20,5,0,1,9,0,1,10,0,48,3,32,1,0,2,5,20,11,0,20,5,0,2,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"event-modifier-key?"},{"t":"s","v":"e"},{"t":"s","v":"prevent-default"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"el"},{"t":"s","v":"sx-get"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"href"},{"t":"s","v":"sx-push-url"},{"t":"s","v":"true"},{"t":"s","v":"execute-request"}]}}]}},{"t":"s","v":"bind-boost-form"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,51,3,0,49,3,50],"constants":[{"t":"s","v":"dom-listen"},{"t":"s","v":"form"},{"t":"s","v":"submit"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,2,0,20,3,0,2,2,49,3,50],"constants":[{"t":"s","v":"prevent-default"},{"t":"s","v":"e"},{"t":"s","v":"execute-request"},{"t":"s","v":"form"}]}}]}},{"t":"s","v":"bind-client-route-click"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,51,3,0,49,3,50],"constants":[{"t":"s","v":"dom-listen"},{"t":"s","v":"link"},{"t":"s","v":"click"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,33,213,0,20,3,0,20,2,0,48,1,5,20,4,0,1,5,0,48,1,17,1,20,6,0,33,50,0,20,7,0,20,6,0,1,8,0,48,2,17,3,20,9,0,6,33,15,0,5,20,9,0,1,11,0,52,10,0,2,52,0,0,1,33,6,0,20,9,0,32,3,0,1,12,0,32,3,0,1,12,0,17,2,20,13,0,20,14,0,20,15,0,48,1,20,16,0,48,2,33,27,0,20,17,0,2,1,18,0,20,15,0,48,3,5,20,19,0,1,20,0,1,20,0,49,2,32,84,0,20,21,0,20,22,0,1,23,0,48,2,52,0,0,1,33,17,0,20,24,0,20,22,0,1,23,0,20,15,0,48,3,32,1,0,2,5,20,21,0,20,22,0,1,25,0,48,2,52,0,0,1,33,17,0,20,24,0,20,22,0,1,25,0,1,11,0,48,3,32,1,0,2,5,20,26,0,20,22,0,2,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"event-modifier-key?"},{"t":"s","v":"e"},{"t":"s","v":"prevent-default"},{"t":"s","v":"dom-query"},{"t":"s","v":"[sx-boost]"},{"t":"s","v":"boost-el"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-boost"},{"t":"s","v":"attr"},{"t":"s","v":"="},{"t":"s","v":"true"},{"t":"s","v":"#main-panel"},{"t":"s","v":"try-client-route"},{"t":"s","v":"url-pathname"},{"t":"s","v":"href"},{"t":"s","v":"target-sel"},{"t":"s","v":"browser-push-state"},{"t":"s","v":""},{"t":"s","v":"browser-scroll-to"},{"t":"n","v":0},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"link"},{"t":"s","v":"sx-get"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"sx-push-url"},{"t":"s","v":"execute-request"}]}}]}},{"t":"s","v":"sw-post-message"},{"t":"s","v":"try-parse-json"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"json-parse"},{"t":"s","v":"text"}]}},{"t":"s","v":"strip-component-scripts"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,17,1,1,1,0,17,2,1,2,0,17,3,2,17,4,51,3,0,17,4,20,4,0,20,5,0,48,1,5,20,5,0,50],"constants":[{"t":"s","v":"text"},{"t":"s","v":""},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,4,0,1,5,0,52,3,0,2,33,9,0,20,1,0,21,6,0,32,150,0,20,4,0,20,2,0,52,8,0,1,52,7,0,2,17,2,20,1,0,20,4,0,20,2,0,52,8,0,1,52,7,0,2,52,9,0,2,17,3,20,10,0,20,11,0,52,0,0,2,17,4,20,12,0,1,5,0,52,3,0,2,33,9,0,20,1,0,21,6,0,32,77,0,20,10,0,1,13,0,20,12,0,52,9,0,3,17,5,20,1,0,1,13,0,20,4,0,52,9,0,3,17,6,20,10,0,20,12,0,20,11,0,52,8,0,1,52,7,0,2,52,9,0,2,17,7,20,14,0,20,15,0,48,1,5,20,16,0,20,18,0,20,19,0,52,17,0,2,49,1,50],"constants":[{"t":"s","v":"index-of"},{"t":"s","v":"s"},{"t":"s","v":"start-tag"},{"t":"s","v":"="},{"t":"s","v":"start-idx"},{"t":"n","v":-1},{"t":"s","v":"result"},{"t":"s","v":"+"},{"t":"s","v":"len"},{"t":"s","v":"slice"},{"t":"s","v":"rest-str"},{"t":"s","v":"end-tag"},{"t":"s","v":"end-offset"},{"t":"n","v":0},{"t":"s","v":"sx-load-components"},{"t":"s","v":"comp-text"},{"t":"s","v":"loop"},{"t":"s","v":"str"},{"t":"s","v":"before"},{"t":"s","v":"after"}]}},{"t":"s","v":"loop"},{"t":"s","v":"result"}]}},{"t":"s","v":"extract-response-css"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,17,1,1,1,0,17,2,1,2,0,17,3,2,17,4,51,3,0,17,4,20,4,0,20,5,0,48,1,5,20,5,0,50],"constants":[{"t":"s","v":"text"},{"t":"s","v":""},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,4,0,1,5,0,52,3,0,2,33,9,0,20,1,0,21,6,0,32,175,0,20,1,0,20,4,0,20,2,0,52,9,0,1,52,8,0,2,52,7,0,2,17,2,20,10,0,20,11,0,52,0,0,2,17,3,20,12,0,1,5,0,52,3,0,2,33,9,0,20,1,0,21,6,0,32,118,0,20,10,0,1,13,0,20,12,0,52,7,0,3,17,4,20,1,0,1,13,0,20,4,0,52,7,0,3,17,5,20,10,0,20,12,0,20,11,0,52,9,0,1,52,8,0,2,52,7,0,2,17,6,20,14,0,1,15,0,48,1,17,7,20,16,0,20,17,0,1,18,0,1,19,0,48,3,17,8,20,20,0,20,21,0,1,22,0,20,23,0,48,3,5,20,24,0,20,21,0,48,1,5,20,25,0,20,27,0,20,28,0,52,26,0,2,49,1,50],"constants":[{"t":"s","v":"index-of"},{"t":"s","v":"s"},{"t":"s","v":"start-tag"},{"t":"s","v":"="},{"t":"s","v":"start-idx"},{"t":"n","v":-1},{"t":"s","v":"result"},{"t":"s","v":"slice"},{"t":"s","v":"+"},{"t":"s","v":"len"},{"t":"s","v":"rest-str"},{"t":"s","v":"end-tag"},{"t":"s","v":"end-offset"},{"t":"n","v":0},{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createElement"},{"t":"s","v":"style"},{"t":"s","v":"host-set!"},{"t":"s","v":"style-el"},{"t":"s","v":"textContent"},{"t":"s","v":"css-text"},{"t":"s","v":"dom-append-to-head"},{"t":"s","v":"loop"},{"t":"s","v":"str"},{"t":"s","v":"before"},{"t":"s","v":"after"}]}},{"t":"s","v":"loop"},{"t":"s","v":"result"}]}},{"t":"s","v":"sx-render"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,20,3,0,1,4,0,48,2,17,2,20,5,0,20,6,0,48,1,17,3,20,7,0,1,8,0,3,48,2,5,51,10,0,20,11,0,52,9,0,2,5,20,12,0,1,8,0,48,1,5,20,13,0,50],"constants":[{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createDocumentFragment"},{"t":"s","v":"sx-parse"},{"t":"s","v":"text"},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-render-markers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,2,48,1,2,48,3,17,1,20,3,0,33,14,0,20,4,0,20,5,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"expr"},{"t":"s","v":"get-render-env"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"exprs"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"frag"}]}},{"t":"s","v":"sx-hydrate"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,49,1,50],"constants":[{"t":"s","v":"sx-hydrate-elements"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"}]}},{"t":"s","v":"sx-process-scripts"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,1,3,0,48,2,17,1,51,5,0,20,6,0,52,4,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"script[type=\"text/sx\"]"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,77,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,1,6,0,48,2,17,1,20,7,0,6,33,15,0,5,20,7,0,52,9,0,1,1,10,0,52,8,0,2,33,23,0,20,11,0,20,7,0,48,1,17,2,51,13,0,20,14,0,52,12,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"s"},{"t":"s","v":"sx-script"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"host-get"},{"t":"s","v":"textContent"},{"t":"s","v":"text"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"sx-parse"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"cek-eval"},{"t":"s","v":"expr"}]}},{"t":"s","v":"exprs"}]}},{"t":"s","v":"scripts"}]}},{"t":"s","v":"select-from-container"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,36,0,20,1,0,20,2,0,20,0,0,48,2,17,2,20,3,0,33,6,0,20,3,0,32,8,0,20,4,0,20,2,0,49,1,32,8,0,20,4,0,20,2,0,49,1,50],"constants":[{"t":"s","v":"selector"},{"t":"s","v":"dom-query"},{"t":"s","v":"container"},{"t":"s","v":"selected"},{"t":"s","v":"children-to-fragment"}]}},{"t":"s","v":"children-to-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,20,3,0,1,4,0,48,2,17,2,2,17,3,51,5,0,17,3,20,6,0,48,0,5,20,7,0,50],"constants":[{"t":"s","v":"host-global"},{"t":"s","v":"document"},{"t":"s","v":"host-call"},{"t":"s","v":"doc"},{"t":"s","v":"createDocumentFragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,0,20,2,0,33,20,0,20,3,0,20,4,0,20,2,0,48,2,5,20,5,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"dom-first-child"},{"t":"s","v":"el"},{"t":"s","v":"child"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"},{"t":"s","v":"loop"}]}},{"t":"s","v":"loop"},{"t":"s","v":"frag"}]}},{"t":"s","v":"select-html-from-doc"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,41,0,20,1,0,20,2,0,20,0,0,48,2,17,2,20,3,0,33,11,0,20,4,0,20,3,0,49,1,32,8,0,20,5,0,20,2,0,49,1,32,8,0,20,5,0,20,2,0,49,1,50],"constants":[{"t":"s","v":"selector"},{"t":"s","v":"dom-query"},{"t":"s","v":"doc"},{"t":"s","v":"el"},{"t":"s","v":"dom-inner-html"},{"t":"s","v":"dom-body-inner-html"}]}},{"t":"s","v":"register-io-deps"},{"t":"s","v":"resolve-page-data"},{"t":"s","v":"parse-sx-data"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,15,0,5,20,0,0,52,2,0,1,1,3,0,52,1,0,2,33,38,0,20,4,0,20,0,0,48,1,17,1,20,7,0,52,6,0,1,52,5,0,1,33,10,0,20,7,0,52,8,0,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"text"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"sx-parse"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"exprs"},{"t":"s","v":"first"}]}},{"t":"s","v":"try-eval-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,3,0,52,2,0,1,33,4,0,2,32,21,0,20,4,0,48,0,17,3,51,6,0,20,3,0,52,5,0,2,5,20,7,0,50],"constants":[{"t":"s","v":"sx-parse"},{"t":"s","v":"content-src"},{"t":"s","v":"empty?"},{"t":"s","v":"exprs"},{"t":"s","v":"create-fragment"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,2,48,3,17,1,20,3,0,33,14,0,20,4,0,20,5,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"expr"},{"t":"s","v":"env"},{"t":"s","v":"result"},{"t":"s","v":"dom-append"},{"t":"s","v":"frag"}]}},{"t":"s","v":"frag"}]}},{"t":"s","v":"try-async-eval-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"try-eval-content"},{"t":"s","v":"content-src"},{"t":"s","v":"env"}]}},{"t":"s","v":"try-rerender-page"},{"t":"s","v":"execute-action"},{"t":"s","v":"bind-preload"},{"t":"s","v":"persist-offline-data"},{"t":"s","v":"retrieve-offline-data"}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/boot.sxbc.json b/shared/static/wasm/sx/boot.sxbc.json new file mode 100644 index 00000000..dd3ea152 --- /dev/null +++ b/shared/static/wasm/sx/boot.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"bc78815bb4f83787","module":{"arity":0,"bytecode":[1,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,52,19,0,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,52,19,0,0,128,32,0,5,52,19,0,0,128,33,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,50],"constants":[{"t":"s","v":"HEAD_HOIST_SELECTOR"},{"t":"s","v":"meta, title, link[rel='canonical'], script[type='application/ld+json']"},{"t":"s","v":"hoist-head-elements-full"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,51,4,0,20,5,0,52,3,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"HEAD_HOIST_SELECTOR"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,17,1,20,4,0,1,5,0,52,3,0,2,33,33,0,20,6,0,20,7,0,20,2,0,48,1,48,1,5,20,8,0,20,9,0,20,2,0,48,1,20,2,0,49,2,32,223,0,20,4,0,1,10,0,52,3,0,2,33,112,0,20,11,0,20,2,0,1,12,0,48,2,17,2,20,11,0,20,2,0,1,13,0,48,2,17,3,20,12,0,33,21,0,20,14,0,1,16,0,20,12,0,1,17,0,52,15,0,3,48,1,32,1,0,2,5,20,18,0,33,21,0,20,14,0,1,19,0,20,18,0,1,17,0,52,15,0,3,48,1,32,1,0,2,5,20,8,0,20,9,0,20,2,0,48,1,20,2,0,48,2,5,20,20,0,20,2,0,49,1,32,98,0,20,4,0,1,21,0,52,3,0,2,6,33,19,0,5,20,11,0,20,2,0,1,22,0,48,2,1,23,0,52,3,0,2,33,37,0,20,14,0,1,24,0,48,1,5,20,8,0,20,9,0,20,2,0,48,1,20,2,0,48,2,5,20,20,0,20,2,0,49,1,32,25,0,20,8,0,20,9,0,20,2,0,48,1,20,2,0,48,2,5,20,20,0,20,2,0,49,1,50],"constants":[{"t":"s","v":"lower"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":"el"},{"t":"s","v":"="},{"t":"s","v":"tag"},{"t":"s","v":"title"},{"t":"s","v":"set-document-title"},{"t":"s","v":"dom-text-content"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"dom-parent"},{"t":"s","v":"meta"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"name"},{"t":"s","v":"property"},{"t":"s","v":"remove-head-element"},{"t":"s","v":"str"},{"t":"s","v":"meta[name=\""},{"t":"s","v":"\"]"},{"t":"s","v":"prop"},{"t":"s","v":"meta[property=\""},{"t":"s","v":"dom-append-to-head"},{"t":"s","v":"link"},{"t":"s","v":"rel"},{"t":"s","v":"canonical"},{"t":"s","v":"link[rel=\"canonical\"]"}]}},{"t":"s","v":"els"}]}},{"t":"s","v":"sx-mount"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,3,20,2,0,33,100,0,20,4,0,20,2,0,48,1,52,3,0,1,33,48,0,20,5,0,20,6,0,20,7,0,48,2,17,4,20,8,0,20,2,0,1,9,0,48,2,5,20,10,0,20,2,0,20,11,0,48,2,5,20,12,0,20,2,0,48,1,32,1,0,2,5,20,13,0,20,2,0,48,1,5,20,14,0,20,2,0,48,1,5,20,15,0,20,2,0,48,1,5,20,16,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"resolve-mount-target"},{"t":"s","v":"target"},{"t":"s","v":"el"},{"t":"s","v":"empty?"},{"t":"s","v":"dom-child-list"},{"t":"s","v":"sx-render-with-env"},{"t":"s","v":"source"},{"t":"s","v":"extra-env"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":""},{"t":"s","v":"dom-append"},{"t":"s","v":"node"},{"t":"s","v":"hoist-head-elements-full"},{"t":"s","v":"process-elements"},{"t":"s","v":"sx-hydrate-elements"},{"t":"s","v":"sx-hydrate-islands"},{"t":"s","v":"run-post-render-hooks"}]}},{"t":"s","v":"resolve-suspense"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,2,48,1,5,20,1,0,1,3,0,20,4,0,1,5,0,52,2,0,3,48,1,17,2,20,6,0,33,97,0,20,7,0,20,8,0,48,1,17,3,20,9,0,2,48,1,17,4,20,10,0,20,6,0,1,11,0,48,2,5,51,13,0,20,14,0,52,12,0,2,5,20,15,0,20,6,0,48,1,5,20,16,0,20,6,0,48,1,5,20,17,0,20,6,0,48,1,5,20,18,0,48,0,5,20,19,0,20,6,0,1,20,0,1,4,0,20,4,0,65,1,0,49,3,32,15,0,20,21,0,1,22,0,20,4,0,52,2,0,2,49,1,50],"constants":[{"t":"s","v":"process-sx-scripts"},{"t":"s","v":"dom-query"},{"t":"s","v":"str"},{"t":"s","v":"[data-suspense=\""},{"t":"s","v":"id"},{"t":"s","v":"\"]"},{"t":"s","v":"el"},{"t":"s","v":"parse"},{"t":"s","v":"sx"},{"t":"s","v":"get-render-env"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":""},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,2,48,3,49,2,50],"constants":[{"t":"s","v":"dom-append"},{"t":"s","v":"el"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"expr"},{"t":"s","v":"env"}]}},{"t":"s","v":"exprs"},{"t":"s","v":"process-elements"},{"t":"s","v":"sx-hydrate-elements"},{"t":"s","v":"sx-hydrate-islands"},{"t":"s","v":"run-post-render-hooks"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:resolved"},{"t":"s","v":"log-warn"},{"t":"s","v":"resolveSuspense: no element for id="}]}},{"t":"s","v":"sx-hydrate-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,1,3,0,48,2,17,1,51,5,0,20,6,0,52,4,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[data-sx]"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,24,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,2,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"hydrated"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"sx-update-element"}]}},{"t":"s","v":"els"}]}},{"t":"s","v":"sx-update-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,33,110,0,20,3,0,20,2,0,1,4,0,48,2,17,3,20,5,0,33,87,0,20,6,0,20,2,0,48,1,17,4,20,7,0,20,8,0,20,9,0,48,2,17,5,20,10,0,20,5,0,20,11,0,48,2,17,6,20,12,0,20,2,0,1,13,0,48,2,5,20,14,0,20,2,0,20,15,0,48,2,5,20,9,0,33,17,0,20,16,0,20,2,0,20,8,0,20,9,0,49,3,32,1,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"resolve-mount-target"},{"t":"s","v":"el"},{"t":"s","v":"target"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"data-sx"},{"t":"s","v":"source"},{"t":"s","v":"parse-env-attr"},{"t":"s","v":"merge-envs"},{"t":"s","v":"base-env"},{"t":"s","v":"new-env"},{"t":"s","v":"sx-render-with-env"},{"t":"s","v":"env"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":""},{"t":"s","v":"dom-append"},{"t":"s","v":"node"},{"t":"s","v":"store-env-attr"}]}},{"t":"s","v":"sx-render-component"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,1,0,32,10,0,1,2,0,20,1,0,52,3,0,2,17,3,20,4,0,20,5,0,48,1,17,4,20,6,0,20,7,0,20,8,0,48,2,17,5,20,11,0,52,10,0,1,52,9,0,1,33,17,0,1,13,0,20,8,0,52,3,0,2,52,12,0,1,32,40,0,20,8,0,52,15,0,1,52,14,0,1,17,6,51,17,0,20,19,0,52,18,0,1,52,16,0,2,5,20,20,0,20,21,0,20,7,0,2,49,3,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"get-render-env"},{"t":"s","v":"extra-env"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"full-name"},{"t":"s","v":"not"},{"t":"s","v":"component?"},{"t":"s","v":"comp"},{"t":"s","v":"error"},{"t":"s","v":"Unknown component: "},{"t":"s","v":"list"},{"t":"s","v":"make-symbol"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,48,1,48,1,48,2,5,20,0,0,20,1,0,20,6,0,20,4,0,52,5,0,2,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"call-expr"},{"t":"s","v":"make-keyword"},{"t":"s","v":"to-kebab"},{"t":"s","v":"k"},{"t":"s","v":"dict-get"},{"t":"s","v":"kwargs"}]}},{"t":"s","v":"keys"},{"t":"s","v":"kwargs"},{"t":"s","v":"render-to-dom"},{"t":"s","v":"call-expr"}]}},{"t":"s","v":"process-sx-scripts"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,51,3,0,20,4,0,52,2,0,2,50],"constants":[{"t":"s","v":"query-sx-scripts"},{"t":"s","v":"root"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,190,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,48,1,17,1,20,6,0,20,2,0,1,7,0,48,2,33,14,0,20,8,0,20,2,0,20,9,0,49,2,32,137,0,20,9,0,52,10,0,1,6,34,12,0,5,20,9,0,52,12,0,1,52,11,0,1,33,4,0,2,32,107,0,20,6,0,20,2,0,1,13,0,48,2,33,23,0,20,14,0,20,9,0,48,1,17,2,51,16,0,20,17,0,52,15,0,2,32,70,0,20,6,0,20,2,0,1,18,0,48,2,33,48,0,20,19,0,20,2,0,1,18,0,48,2,17,2,20,20,0,20,21,0,48,1,17,3,20,22,0,33,15,0,20,23,0,20,22,0,20,9,0,2,49,3,32,1,0,2,32,8,0,20,24,0,20,9,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"s"},{"t":"s","v":"script"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"dom-text-content"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"data-components"},{"t":"s","v":"process-component-script"},{"t":"s","v":"text"},{"t":"s","v":"nil?"},{"t":"s","v":"empty?"},{"t":"s","v":"trim"},{"t":"s","v":"data-init"},{"t":"s","v":"sx-parse"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"cek-eval"},{"t":"s","v":"expr"}]}},{"t":"s","v":"exprs"},{"t":"s","v":"data-mount"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"dom-query"},{"t":"s","v":"mount-sel"},{"t":"s","v":"target"},{"t":"s","v":"sx-mount"},{"t":"s","v":"sx-load-components"}]}},{"t":"s","v":"scripts"}]}},{"t":"s","v":"process-component-script"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,2,20,4,0,52,3,0,1,33,41,0,20,5,0,6,33,16,0,5,20,5,0,52,8,0,1,52,7,0,1,52,6,0,1,33,11,0,20,9,0,20,5,0,49,1,32,1,0,2,32,0,1,20,5,0,6,33,16,0,5,20,5,0,52,8,0,1,52,7,0,1,52,6,0,1,17,3,20,10,0,1,11,0,48,1,17,4,20,13,0,20,4,0,52,12,0,2,33,110,0,20,14,0,33,44,0,20,15,0,1,11,0,20,4,0,48,2,5,20,15,0,1,16,0,20,5,0,48,2,5,20,9,0,20,5,0,48,1,5,20,17,0,1,18,0,48,1,32,57,0,20,10,0,1,16,0,48,1,17,5,20,19,0,33,30,0,20,9,0,20,19,0,48,1,5,20,17,0,1,21,0,20,4,0,1,22,0,52,20,0,3,48,1,32,11,0,20,23,0,48,0,5,20,24,0,48,0,32,89,0,20,14,0,33,54,0,20,15,0,1,11,0,20,4,0,48,2,5,20,15,0,1,16,0,20,5,0,48,2,5,20,9,0,20,5,0,48,1,5,20,17,0,1,25,0,20,4,0,1,22,0,52,20,0,3,48,1,32,29,0,20,26,0,1,11,0,48,1,5,20,26,0,1,16,0,48,1,5,20,23,0,48,0,5,20,24,0,48,0,5,20,27,0,20,4,0,49,1,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"script"},{"t":"s","v":"data-hash"},{"t":"s","v":"nil?"},{"t":"s","v":"hash"},{"t":"s","v":"text"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"trim"},{"t":"s","v":"sx-load-components"},{"t":"s","v":"local-storage-get"},{"t":"s","v":"sx-components-hash"},{"t":"s","v":"="},{"t":"s","v":"cached-hash"},{"t":"s","v":"has-inline"},{"t":"s","v":"local-storage-set"},{"t":"s","v":"sx-components-src"},{"t":"s","v":"log-info"},{"t":"s","v":"components: downloaded (cookie stale)"},{"t":"s","v":"cached"},{"t":"s","v":"str"},{"t":"s","v":"components: cached ("},{"t":"s","v":")"},{"t":"s","v":"clear-sx-comp-cookie"},{"t":"s","v":"browser-reload"},{"t":"s","v":"components: downloaded ("},{"t":"s","v":"local-storage-remove"},{"t":"s","v":"set-sx-comp-cookie"}]}},{"t":"s","v":"_page-routes"},{"t":"s","v":"list"},{"t":"s","v":"process-page-scripts"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,0,20,1,0,1,3,0,20,5,0,52,4,0,1,1,6,0,52,2,0,3,48,1,5,51,8,0,20,5,0,52,7,0,2,5,20,1,0,1,9,0,20,10,0,52,4,0,1,1,11,0,52,2,0,3,49,1,50],"constants":[{"t":"s","v":"query-page-scripts"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"pages: found "},{"t":"s","v":"len"},{"t":"s","v":"scripts"},{"t":"s","v":" script tags"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,137,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,48,1,17,1,20,6,0,1,8,0,20,9,0,33,10,0,20,9,0,52,10,0,1,32,3,0,1,11,0,52,7,0,2,48,1,5,20,9,0,6,33,16,0,5,20,9,0,52,13,0,1,52,12,0,1,52,0,0,1,33,46,0,20,14,0,20,9,0,48,1,17,2,20,6,0,1,15,0,20,3,0,52,10,0,1,1,16,0,52,7,0,3,48,1,5,51,18,0,20,3,0,52,17,0,2,32,8,0,20,19,0,1,20,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"s"},{"t":"s","v":"pages"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"dom-text-content"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"pages: script text length="},{"t":"s","v":"text"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"empty?"},{"t":"s","v":"trim"},{"t":"s","v":"parse"},{"t":"s","v":"pages: parsed "},{"t":"s","v":" entries"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,20,5,0,20,3,0,1,7,0,52,6,0,2,48,1,65,1,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"_page-routes"},{"t":"s","v":"merge"},{"t":"s","v":"page"},{"t":"s","v":"parsed"},{"t":"s","v":"parse-route-pattern"},{"t":"s","v":"get"},{"t":"s","v":"path"}]}},{"t":"s","v":"log-warn"},{"t":"s","v":"pages: script tag is empty"}]}},{"t":"s","v":"pages: "},{"t":"s","v":"_page-routes"},{"t":"s","v":" routes loaded"}]}},{"t":"s","v":"sx-hydrate-islands"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,1,3,0,48,2,17,1,20,4,0,1,6,0,20,8,0,52,7,0,1,1,9,0,20,1,0,33,6,0,1,10,0,32,3,0,1,11,0,52,5,0,4,48,1,5,51,13,0,20,8,0,52,12,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[data-sx-island]"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx-hydrate-islands: "},{"t":"s","v":"len"},{"t":"s","v":"els"},{"t":"s","v":" island(s) in "},{"t":"s","v":"subtree"},{"t":"s","v":"document"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,33,26,0,20,3,0,1,5,0,20,6,0,20,1,0,1,7,0,48,2,52,4,0,2,49,1,32,44,0,20,3,0,1,8,0,20,6,0,20,1,0,1,7,0,48,2,52,4,0,2,48,1,5,20,9,0,20,1,0,1,2,0,48,2,5,20,10,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"island-hydrated"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":" skip (already hydrated): "},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"data-sx-island"},{"t":"s","v":" hydrating: "},{"t":"s","v":"mark-processed!"},{"t":"s","v":"hydrate-island"}]}}]}},{"t":"s","v":"hydrate-island"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,0,0,20,1,0,1,3,0,48,2,6,34,4,0,5,1,4,0,17,2,1,6,0,20,7,0,52,5,0,2,17,3,20,8,0,2,48,1,17,4,20,9,0,20,10,0,20,11,0,48,2,17,5,20,14,0,52,13,0,1,6,34,8,0,5,20,14,0,52,15,0,1,52,12,0,1,33,18,0,20,16,0,1,17,0,20,11,0,52,5,0,2,49,1,32,149,0,20,19,0,20,20,0,48,1,52,18,0,1,6,34,4,0,5,65,0,0,17,6,52,21,0,0,17,7,20,22,0,20,14,0,52,23,0,1,20,10,0,48,2,17,8,51,25,0,20,14,0,52,26,0,1,52,24,0,2,5,20,27,0,51,28,0,51,29,0,48,2,17,9,20,30,0,20,1,0,1,31,0,48,2,5,20,32,0,20,1,0,20,33,0,48,2,5,20,34,0,20,1,0,1,35,0,20,36,0,48,3,5,20,37,0,20,1,0,48,1,5,20,38,0,1,39,0,20,11,0,1,40,0,20,36,0,52,41,0,1,1,42,0,52,5,0,5,49,1,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-island"},{"t":"s","v":"data-sx-state"},{"t":"s","v":"{}"},{"t":"s","v":"str"},{"t":"s","v":"~"},{"t":"s","v":"name"},{"t":"s","v":"get-render-env"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"comp-name"},{"t":"s","v":"not"},{"t":"s","v":"component?"},{"t":"s","v":"comp"},{"t":"s","v":"island?"},{"t":"s","v":"log-warn"},{"t":"s","v":"hydrate-island: unknown island "},{"t":"s","v":"first"},{"t":"s","v":"sx-parse"},{"t":"s","v":"state-sx"},{"t":"s","v":"list"},{"t":"s","v":"env-merge"},{"t":"s","v":"component-closure"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,33,13,0,20,4,0,20,2,0,52,5,0,2,32,1,0,2,49,3,50],"constants":[{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"p"},{"t":"s","v":"dict-has?"},{"t":"s","v":"kwargs"},{"t":"s","v":"dict-get"}]}},{"t":"s","v":"component-params"},{"t":"s","v":"cek-try"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,1,0,51,2,0,49,2,50],"constants":[{"t":"s","v":"with-island-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"disposers"},{"t":"s","v":"disposable"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,52,1,0,1,20,3,0,2,49,3,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"component-body"},{"t":"s","v":"comp"},{"t":"s","v":"local"}]}}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,3,0,1,4,0,20,5,0,52,1,0,4,48,1,5,20,6,0,1,7,0,2,48,2,17,1,20,8,0,20,9,0,1,10,0,1,11,0,48,3,5,20,8,0,20,9,0,1,12,0,1,13,0,48,3,5,20,14,0,20,9,0,1,15,0,20,3,0,1,16,0,20,5,0,52,1,0,4,48,2,5,20,9,0,50],"constants":[{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"hydrate-island FAILED: "},{"t":"s","v":"comp-name"},{"t":"s","v":" — "},{"t":"s","v":"err"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"error-el"},{"t":"s","v":"class"},{"t":"s","v":"sx-island-error"},{"t":"s","v":"style"},{"t":"s","v":"padding:8px;margin:4px 0;border:1px solid #ef4444;border-radius:4px;background:#fef2f2;color:#b91c1c;font-family:monospace;font-size:12px;white-space:pre-wrap"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":"Island error: "},{"t":"s","v":"\n"}]}},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":""},{"t":"s","v":"dom-append"},{"t":"s","v":"body-dom"},{"t":"s","v":"dom-set-data"},{"t":"s","v":"sx-disposers"},{"t":"s","v":"disposers"},{"t":"s","v":"process-elements"},{"t":"s","v":"log-info"},{"t":"s","v":"hydrated island: "},{"t":"s","v":" ("},{"t":"s","v":"len"},{"t":"s","v":" disposers)"}]}},{"t":"s","v":"dispose-island"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,26,0,51,5,0,20,3,0,52,4,0,2,5,20,6,0,20,1,0,1,2,0,2,48,3,32,1,0,2,5,20,7,0,20,1,0,1,8,0,49,2,50],"constants":[{"t":"s","v":"dom-get-data"},{"t":"s","v":"el"},{"t":"s","v":"sx-disposers"},{"t":"s","v":"disposers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,8,0,20,1,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"callable?"},{"t":"s","v":"d"}]}},{"t":"s","v":"dom-set-data"},{"t":"s","v":"clear-processed!"},{"t":"s","v":"island-hydrated"}]}},{"t":"s","v":"dispose-islands-in"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,105,0,20,1,0,20,0,0,1,2,0,48,2,17,1,20,3,0,6,33,12,0,5,20,3,0,52,5,0,1,52,4,0,1,33,66,0,51,7,0,20,3,0,52,6,0,2,17,2,20,8,0,52,5,0,1,52,4,0,1,33,36,0,20,9,0,1,11,0,20,8,0,52,12,0,1,1,13,0,52,10,0,3,48,1,5,20,15,0,20,8,0,52,14,0,2,32,1,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"root"},{"t":"s","v":"dom-query-all"},{"t":"s","v":"[data-sx-island]"},{"t":"s","v":"islands"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"island-hydrated"}]}},{"t":"s","v":"to-dispose"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"disposing "},{"t":"s","v":"len"},{"t":"s","v":" island(s)"},{"t":"s","v":"for-each"},{"t":"s","v":"dispose-island"}]}},{"t":"s","v":"force-dispose-islands-in"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,75,0,20,1,0,20,0,0,1,2,0,48,2,17,1,20,3,0,6,33,12,0,5,20,3,0,52,5,0,1,52,4,0,1,33,36,0,20,6,0,1,8,0,20,3,0,52,9,0,1,1,10,0,52,7,0,3,48,1,5,20,12,0,20,3,0,52,11,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"root"},{"t":"s","v":"dom-query-all"},{"t":"s","v":"[data-sx-island]"},{"t":"s","v":"islands"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"force-disposing "},{"t":"s","v":"len"},{"t":"s","v":" island(s)"},{"t":"s","v":"for-each"},{"t":"s","v":"dispose-island"}]}},{"t":"s","v":"*pre-render-hooks*"},{"t":"s","v":"*post-render-hooks*"},{"t":"s","v":"register-pre-render-hook"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"*pre-render-hooks*"},{"t":"s","v":"hook-fn"}]}},{"t":"s","v":"register-post-render-hook"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"*post-render-hooks*"},{"t":"s","v":"hook-fn"}]}},{"t":"s","v":"run-pre-render-hooks"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"hook"}]}},{"t":"s","v":"*pre-render-hooks*"}]}},{"t":"s","v":"run-post-render-hooks"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,4,0,52,3,0,1,1,5,0,52,1,0,3,48,1,5,51,7,0,20,4,0,52,6,0,2,50],"constants":[{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"run-post-render-hooks: "},{"t":"s","v":"len"},{"t":"s","v":"*post-render-hooks*"},{"t":"s","v":" hooks"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,4,0,52,3,0,1,1,5,0,20,6,0,20,4,0,48,1,1,7,0,20,4,0,52,8,0,1,52,1,0,6,48,1,5,20,9,0,20,4,0,2,49,2,50],"constants":[{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":" hook type: "},{"t":"s","v":"type-of"},{"t":"s","v":"hook"},{"t":"s","v":" callable: "},{"t":"s","v":"callable?"},{"t":"s","v":" lambda: "},{"t":"s","v":"lambda?"},{"t":"s","v":"cek-call"}]}}]}},{"t":"s","v":"boot-init"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,3,0,52,1,0,2,48,1,5,20,4,0,48,0,5,20,5,0,48,0,5,20,6,0,2,48,1,5,20,7,0,2,48,1,5,20,8,0,2,48,1,5,20,9,0,48,0,5,20,10,0,2,48,1,5,20,11,0,20,12,0,48,0,1,13,0,51,14,0,48,3,5,20,15,0,20,16,0,20,17,0,48,0,1,18,0,48,2,1,19,0,1,20,0,48,3,5,20,21,0,20,17,0,48,0,1,22,0,2,48,3,5,20,0,0,1,22,0,49,1,50],"constants":[{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx-browser "},{"t":"s","v":"SX_VERSION"},{"t":"s","v":"init-css-tracking"},{"t":"s","v":"process-page-scripts"},{"t":"s","v":"process-sx-scripts"},{"t":"s","v":"sx-hydrate-elements"},{"t":"s","v":"sx-hydrate-islands"},{"t":"s","v":"run-post-render-hooks"},{"t":"s","v":"process-elements"},{"t":"s","v":"dom-listen"},{"t":"s","v":"dom-window"},{"t":"s","v":"popstate"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,49,1,50],"constants":[{"t":"s","v":"handle-popstate"},{"t":"n","v":0}]}},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-document"},{"t":"s","v":"documentElement"},{"t":"s","v":"data-sx-ready"},{"t":"s","v":"true"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:ready"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/browser.sxbc.json b/shared/static/wasm/sx/browser.sxbc.json new file mode 100644 index 00000000..7679f0f2 --- /dev/null +++ b/shared/static/wasm/sx/browser.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"a4334190cf846a8c","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,57,0,128,60,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,5,51,68,0,128,67,0,50],"constants":[{"t":"s","v":"browser-location-href"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,0,0,20,1,0,48,0,1,2,0,48,2,1,3,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"location"},{"t":"s","v":"href"}]}},{"t":"s","v":"browser-location-pathname"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,0,0,20,1,0,48,0,1,2,0,48,2,1,3,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"location"},{"t":"s","v":"pathname"}]}},{"t":"s","v":"browser-location-origin"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,0,0,20,1,0,48,0,1,2,0,48,2,1,3,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"location"},{"t":"s","v":"origin"}]}},{"t":"s","v":"browser-same-origin?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,0,52,0,0,2,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"url"},{"t":"s","v":"browser-location-origin"}]}},{"t":"s","v":"url-pathname"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,4,0,48,0,48,3,1,5,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"host-new"},{"t":"s","v":"URL"},{"t":"s","v":"url"},{"t":"s","v":"browser-location-origin"},{"t":"s","v":"pathname"}]}},{"t":"s","v":"browser-push-state"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,31,0,20,2,0,20,3,0,20,4,0,48,0,1,5,0,48,2,1,6,0,2,1,7,0,20,8,0,49,5,32,30,0,20,2,0,20,3,0,20,4,0,48,0,1,5,0,48,2,1,6,0,20,8,0,20,1,0,20,9,0,49,5,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"title"},{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"history"},{"t":"s","v":"pushState"},{"t":"s","v":""},{"t":"s","v":"url-or-state"},{"t":"s","v":"url"}]}},{"t":"s","v":"browser-replace-state"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,31,0,20,2,0,20,3,0,20,4,0,48,0,1,5,0,48,2,1,6,0,2,1,7,0,20,8,0,49,5,32,30,0,20,2,0,20,3,0,20,4,0,48,0,1,5,0,48,2,1,6,0,20,8,0,20,1,0,20,9,0,49,5,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"title"},{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"history"},{"t":"s","v":"replaceState"},{"t":"s","v":""},{"t":"s","v":"url-or-state"},{"t":"s","v":"url"}]}},{"t":"s","v":"browser-reload"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,48,2,1,4,0,49,2,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"location"},{"t":"s","v":"reload"}]}},{"t":"s","v":"browser-navigate"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,48,2,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"location"},{"t":"s","v":"href"},{"t":"s","v":"url"}]}},{"t":"s","v":"local-storage-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,48,2,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"localStorage"},{"t":"s","v":"getItem"},{"t":"s","v":"key"}]}},{"t":"s","v":"local-storage-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,48,2,1,4,0,20,5,0,20,6,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"localStorage"},{"t":"s","v":"setItem"},{"t":"s","v":"key"},{"t":"s","v":"val"}]}},{"t":"s","v":"local-storage-remove"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,48,2,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"localStorage"},{"t":"s","v":"removeItem"},{"t":"s","v":"key"}]}},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,48,1,20,5,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"setTimeout"},{"t":"s","v":"host-callback"},{"t":"s","v":"fn-val"},{"t":"s","v":"ms"}]}},{"t":"s","v":"set-interval"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,48,1,20,5,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"setInterval"},{"t":"s","v":"host-callback"},{"t":"s","v":"fn-val"},{"t":"s","v":"ms"}]}},{"t":"s","v":"clear-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"clearTimeout"},{"t":"s","v":"id"}]}},{"t":"s","v":"clear-interval"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"clearInterval"},{"t":"s","v":"id"}]}},{"t":"s","v":"request-animation-frame"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,48,1,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"requestAnimationFrame"},{"t":"s","v":"host-callback"},{"t":"s","v":"fn-val"}]}},{"t":"s","v":"fetch-request"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"fetch"},{"t":"s","v":"url"},{"t":"s","v":"opts"}]}},{"t":"s","v":"new-abort-controller"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,49,1,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"AbortController"}]}},{"t":"s","v":"controller-signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"controller"},{"t":"s","v":"signal"}]}},{"t":"s","v":"controller-abort"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"controller"},{"t":"s","v":"abort"}]}},{"t":"s","v":"promise-then"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,3,20,2,0,33,11,0,20,0,0,20,2,0,48,1,32,1,0,2,17,4,20,3,0,33,28,0,20,4,0,20,4,0,20,5,0,1,6,0,20,7,0,48,3,1,8,0,20,3,0,49,3,32,14,0,20,4,0,20,5,0,1,6,0,20,7,0,49,3,50],"constants":[{"t":"s","v":"host-callback"},{"t":"s","v":"on-resolve"},{"t":"s","v":"on-reject"},{"t":"s","v":"cb-reject"},{"t":"s","v":"host-call"},{"t":"s","v":"p"},{"t":"s","v":"then"},{"t":"s","v":"cb-resolve"},{"t":"s","v":"catch"}]}},{"t":"s","v":"promise-resolve"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,1,1,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-global"},{"t":"s","v":"Promise"},{"t":"s","v":"resolve"},{"t":"s","v":"val"}]}},{"t":"s","v":"promise-delayed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,51,3,0,48,1,49,2,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"Promise"},{"t":"s","v":"host-callback"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,2,20,3,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"resolve"},{"t":"s","v":"call"},{"t":"s","v":"val"}]}},{"t":"s","v":"ms"}]}}]}},{"t":"s","v":"browser-confirm"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"confirm"},{"t":"s","v":"msg"}]}},{"t":"s","v":"browser-prompt"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"prompt"},{"t":"s","v":"msg"},{"t":"s","v":"default"}]}},{"t":"s","v":"browser-media-matches?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,0,1,3,0,20,4,0,48,3,1,5,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-window"},{"t":"s","v":"matchMedia"},{"t":"s","v":"query"},{"t":"s","v":"matches"}]}},{"t":"s","v":"json-parse"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,1,1,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-global"},{"t":"s","v":"JSON"},{"t":"s","v":"parse"},{"t":"s","v":"s"}]}},{"t":"s","v":"log-info"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,1,1,3,0,1,5,0,20,6,0,52,4,0,2,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-global"},{"t":"s","v":"console"},{"t":"s","v":"log"},{"t":"s","v":"str"},{"t":"s","v":"[sx] "},{"t":"s","v":"msg"}]}},{"t":"s","v":"log-warn"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,1,1,3,0,1,5,0,20,6,0,52,4,0,2,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-global"},{"t":"s","v":"console"},{"t":"s","v":"warn"},{"t":"s","v":"str"},{"t":"s","v":"[sx] "},{"t":"s","v":"msg"}]}},{"t":"s","v":"console-log"},{"t":"s","v":"now-ms"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,1,1,3,0,49,2,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-global"},{"t":"s","v":"Date"},{"t":"s","v":"now"}]}},{"t":"s","v":"schedule-idle"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,1,0,48,1,17,1,20,2,0,20,3,0,48,0,1,4,0,48,2,33,19,0,20,5,0,20,3,0,48,0,1,4,0,20,6,0,49,3,32,11,0,20,7,0,20,6,0,1,8,0,49,2,50],"constants":[{"t":"s","v":"host-callback"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,49,0,50],"constants":[{"t":"s","v":"f"}]}},{"t":"s","v":"host-get"},{"t":"s","v":"dom-window"},{"t":"s","v":"requestIdleCallback"},{"t":"s","v":"host-call"},{"t":"s","v":"cb"},{"t":"s","v":"set-timeout"},{"t":"n","v":0}]}},{"t":"s","v":"set-cookie"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,34,4,0,5,1,1,0,17,3,20,2,0,20,3,0,1,4,0,20,2,0,20,6,0,1,4,0,48,1,1,7,0,48,2,20,9,0,1,10,0,52,8,0,2,52,5,0,2,48,2,1,11,0,48,2,17,4,20,12,0,20,13,0,48,0,1,14,0,20,16,0,1,17,0,20,2,0,2,1,18,0,20,19,0,48,3,1,20,0,20,21,0,1,22,0,52,15,0,6,49,3,50],"constants":[{"t":"s","v":"days"},{"t":"n","v":365},{"t":"s","v":"host-call"},{"t":"s","v":"host-new"},{"t":"s","v":"Date"},{"t":"s","v":"+"},{"t":"s","v":"host-global"},{"t":"s","v":"now"},{"t":"s","v":"*"},{"t":"s","v":"d"},{"t":"n","v":86400000},{"t":"s","v":"toUTCString"},{"t":"s","v":"host-set!"},{"t":"s","v":"dom-document"},{"t":"s","v":"cookie"},{"t":"s","v":"str"},{"t":"s","v":"name"},{"t":"s","v":"="},{"t":"s","v":"encodeURIComponent"},{"t":"s","v":"value"},{"t":"s","v":";expires="},{"t":"s","v":"expires"},{"t":"s","v":";path=/;SameSite=Lax"}]}},{"t":"s","v":"get-cookie"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,48,2,17,1,20,3,0,20,4,0,1,5,0,20,6,0,1,7,0,1,9,0,20,10,0,1,11,0,52,8,0,3,48,2,48,3,17,2,20,5,0,33,23,0,20,3,0,2,1,12,0,20,0,0,20,5,0,1,13,0,48,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-document"},{"t":"s","v":"cookie"},{"t":"s","v":"host-call"},{"t":"s","v":"cookies"},{"t":"s","v":"match"},{"t":"s","v":"host-new"},{"t":"s","v":"RegExp"},{"t":"s","v":"str"},{"t":"s","v":"(?:^|;\\s*)"},{"t":"s","v":"name"},{"t":"s","v":"=([^;]*)"},{"t":"s","v":"decodeURIComponent"},{"t":"n","v":1}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/bytecode.sxbc.json b/shared/static/wasm/sx/bytecode.sxbc.json new file mode 100644 index 00000000..abaebf6a --- /dev/null +++ b/shared/static/wasm/sx/bytecode.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"4329f0be950b0492","module":{"arity":0,"bytecode":[1,1,0,128,0,0,5,1,3,0,128,2,0,5,1,5,0,128,4,0,5,1,7,0,128,6,0,5,1,9,0,128,8,0,5,1,11,0,128,10,0,5,1,13,0,128,12,0,5,1,15,0,128,14,0,5,1,17,0,128,16,0,5,1,19,0,128,18,0,5,1,21,0,128,20,0,5,1,23,0,128,22,0,5,1,25,0,128,24,0,5,1,27,0,128,26,0,5,1,29,0,128,28,0,5,1,31,0,128,30,0,5,1,33,0,128,32,0,5,1,35,0,128,34,0,5,1,37,0,128,36,0,5,1,39,0,128,38,0,5,1,41,0,128,40,0,5,1,43,0,128,42,0,5,1,45,0,128,44,0,5,1,47,0,128,46,0,5,1,49,0,128,48,0,5,1,51,0,128,50,0,5,1,53,0,128,52,0,5,1,55,0,128,54,0,5,1,57,0,128,56,0,5,1,59,0,128,58,0,5,1,61,0,128,60,0,5,1,63,0,128,62,0,5,1,65,0,128,64,0,5,1,67,0,128,66,0,5,1,69,0,128,68,0,5,1,71,0,128,70,0,5,1,73,0,128,72,0,5,1,75,0,128,74,0,5,1,77,0,128,76,0,5,1,79,0,128,78,0,5,1,81,0,128,80,0,5,1,83,0,128,82,0,5,1,85,0,128,84,0,5,1,87,0,128,86,0,5,1,89,0,128,88,0,5,1,91,0,128,90,0,5,1,93,0,128,92,0,5,1,95,0,128,94,0,5,1,97,0,128,96,0,5,1,99,0,128,98,0,5,1,101,0,128,100,0,5,1,103,0,128,102,0,5,1,105,0,128,104,0,5,1,107,0,128,106,0,5,1,109,0,128,108,0,5,1,111,0,128,110,0,5,1,113,0,128,112,0,5,1,115,0,128,114,0,5,1,117,0,128,116,0,5,1,119,0,128,118,0,5,1,121,0,128,120,0,5,1,123,0,128,122,0,5,1,125,0,128,124,0,5,1,127,0,128,126,0,5,1,129,0,128,128,0,5,1,131,0,128,130,0,5,1,133,0,128,132,0,5,1,135,0,128,134,0,5,1,137,0,128,136,0,5,1,139,0,128,138,0,5,1,141,0,128,140,0,5,1,143,0,128,142,0,5,1,1,0,128,144,0,5,1,1,0,128,145,0,5,1,3,0,128,146,0,5,1,5,0,128,147,0,5,1,7,0,128,148,0,5,1,9,0,128,149,0,5,1,11,0,128,150,0,5,1,152,0,128,151,0,5,1,154,0,128,153,0,5,1,156,0,128,155,0,5,51,158,0,128,157,0,50],"constants":[{"t":"s","v":"OP_CONST"},{"t":"n","v":1},{"t":"s","v":"OP_NIL"},{"t":"n","v":2},{"t":"s","v":"OP_TRUE"},{"t":"n","v":3},{"t":"s","v":"OP_FALSE"},{"t":"n","v":4},{"t":"s","v":"OP_POP"},{"t":"n","v":5},{"t":"s","v":"OP_DUP"},{"t":"n","v":6},{"t":"s","v":"OP_LOCAL_GET"},{"t":"n","v":16},{"t":"s","v":"OP_LOCAL_SET"},{"t":"n","v":17},{"t":"s","v":"OP_UPVALUE_GET"},{"t":"n","v":18},{"t":"s","v":"OP_UPVALUE_SET"},{"t":"n","v":19},{"t":"s","v":"OP_GLOBAL_GET"},{"t":"n","v":20},{"t":"s","v":"OP_GLOBAL_SET"},{"t":"n","v":21},{"t":"s","v":"OP_JUMP"},{"t":"n","v":32},{"t":"s","v":"OP_JUMP_IF_FALSE"},{"t":"n","v":33},{"t":"s","v":"OP_JUMP_IF_TRUE"},{"t":"n","v":34},{"t":"s","v":"OP_CALL"},{"t":"n","v":48},{"t":"s","v":"OP_TAIL_CALL"},{"t":"n","v":49},{"t":"s","v":"OP_RETURN"},{"t":"n","v":50},{"t":"s","v":"OP_CLOSURE"},{"t":"n","v":51},{"t":"s","v":"OP_CALL_PRIM"},{"t":"n","v":52},{"t":"s","v":"OP_APPLY"},{"t":"n","v":53},{"t":"s","v":"OP_LIST"},{"t":"n","v":64},{"t":"s","v":"OP_DICT"},{"t":"n","v":65},{"t":"s","v":"OP_APPEND_BANG"},{"t":"n","v":66},{"t":"s","v":"OP_ITER_INIT"},{"t":"n","v":80},{"t":"s","v":"OP_ITER_NEXT"},{"t":"n","v":81},{"t":"s","v":"OP_MAP_OPEN"},{"t":"n","v":82},{"t":"s","v":"OP_MAP_APPEND"},{"t":"n","v":83},{"t":"s","v":"OP_MAP_CLOSE"},{"t":"n","v":84},{"t":"s","v":"OP_FILTER_TEST"},{"t":"n","v":85},{"t":"s","v":"OP_HO_MAP"},{"t":"n","v":88},{"t":"s","v":"OP_HO_FILTER"},{"t":"n","v":89},{"t":"s","v":"OP_HO_REDUCE"},{"t":"n","v":90},{"t":"s","v":"OP_HO_FOR_EACH"},{"t":"n","v":91},{"t":"s","v":"OP_HO_SOME"},{"t":"n","v":92},{"t":"s","v":"OP_HO_EVERY"},{"t":"n","v":93},{"t":"s","v":"OP_SCOPE_PUSH"},{"t":"n","v":96},{"t":"s","v":"OP_SCOPE_POP"},{"t":"n","v":97},{"t":"s","v":"OP_PROVIDE_PUSH"},{"t":"n","v":98},{"t":"s","v":"OP_PROVIDE_POP"},{"t":"n","v":99},{"t":"s","v":"OP_CONTEXT"},{"t":"n","v":100},{"t":"s","v":"OP_EMIT"},{"t":"n","v":101},{"t":"s","v":"OP_EMITTED"},{"t":"n","v":102},{"t":"s","v":"OP_RESET"},{"t":"n","v":112},{"t":"s","v":"OP_SHIFT"},{"t":"n","v":113},{"t":"s","v":"OP_DEFINE"},{"t":"n","v":128},{"t":"s","v":"OP_DEFCOMP"},{"t":"n","v":129},{"t":"s","v":"OP_DEFISLAND"},{"t":"n","v":130},{"t":"s","v":"OP_DEFMACRO"},{"t":"n","v":131},{"t":"s","v":"OP_EXPAND_MACRO"},{"t":"n","v":132},{"t":"s","v":"OP_STR_CONCAT"},{"t":"n","v":144},{"t":"s","v":"OP_STR_JOIN"},{"t":"n","v":145},{"t":"s","v":"OP_SERIALIZE"},{"t":"n","v":146},{"t":"s","v":"OP_ADD"},{"t":"n","v":160},{"t":"s","v":"OP_SUB"},{"t":"n","v":161},{"t":"s","v":"OP_MUL"},{"t":"n","v":162},{"t":"s","v":"OP_DIV"},{"t":"n","v":163},{"t":"s","v":"OP_EQ"},{"t":"n","v":164},{"t":"s","v":"OP_LT"},{"t":"n","v":165},{"t":"s","v":"OP_GT"},{"t":"n","v":166},{"t":"s","v":"OP_NOT"},{"t":"n","v":167},{"t":"s","v":"OP_LEN"},{"t":"n","v":168},{"t":"s","v":"OP_FIRST"},{"t":"n","v":169},{"t":"s","v":"OP_REST"},{"t":"n","v":170},{"t":"s","v":"OP_NTH"},{"t":"n","v":171},{"t":"s","v":"OP_CONS"},{"t":"n","v":172},{"t":"s","v":"OP_NEG"},{"t":"n","v":173},{"t":"s","v":"OP_INC"},{"t":"n","v":174},{"t":"s","v":"OP_DEC"},{"t":"n","v":175},{"t":"s","v":"OP_ASER_TAG"},{"t":"n","v":224},{"t":"s","v":"OP_ASER_FRAG"},{"t":"n","v":225},{"t":"s","v":"BYTECODE_MAGIC"},{"t":"s","v":"SXBC"},{"t":"s","v":"BYTECODE_VERSION"},{"t":"s","v":"CONST_NUMBER"},{"t":"s","v":"CONST_STRING"},{"t":"s","v":"CONST_BOOL"},{"t":"s","v":"CONST_NIL"},{"t":"s","v":"CONST_SYMBOL"},{"t":"s","v":"CONST_KEYWORD"},{"t":"s","v":"CONST_LIST"},{"t":"n","v":7},{"t":"s","v":"CONST_DICT"},{"t":"n","v":8},{"t":"s","v":"CONST_CODE"},{"t":"n","v":9},{"t":"s","v":"opcode-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,1,3,0,32,77,1,20,1,0,1,4,0,52,0,0,2,33,6,0,1,5,0,32,58,1,20,1,0,1,6,0,52,0,0,2,33,6,0,1,7,0,32,39,1,20,1,0,1,8,0,52,0,0,2,33,6,0,1,9,0,32,20,1,20,1,0,1,10,0,52,0,0,2,33,6,0,1,11,0,32,1,1,20,1,0,1,12,0,52,0,0,2,33,6,0,1,13,0,32,238,0,20,1,0,1,14,0,52,0,0,2,33,6,0,1,15,0,32,219,0,20,1,0,1,16,0,52,0,0,2,33,6,0,1,17,0,32,200,0,20,1,0,1,18,0,52,0,0,2,33,6,0,1,19,0,32,181,0,20,1,0,1,20,0,52,0,0,2,33,6,0,1,21,0,32,162,0,20,1,0,1,22,0,52,0,0,2,33,6,0,1,23,0,32,143,0,20,1,0,1,24,0,52,0,0,2,33,6,0,1,25,0,32,124,0,20,1,0,1,26,0,52,0,0,2,33,6,0,1,27,0,32,105,0,20,1,0,1,28,0,52,0,0,2,33,6,0,1,29,0,32,86,0,20,1,0,1,30,0,52,0,0,2,33,6,0,1,31,0,32,67,0,20,1,0,1,32,0,52,0,0,2,33,6,0,1,33,0,32,48,0,20,1,0,1,34,0,52,0,0,2,33,6,0,1,35,0,32,29,0,20,1,0,1,36,0,52,0,0,2,33,6,0,1,37,0,32,10,0,1,39,0,20,1,0,52,38,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"op"},{"t":"n","v":1},{"t":"s","v":"CONST"},{"t":"n","v":2},{"t":"s","v":"NIL"},{"t":"n","v":3},{"t":"s","v":"TRUE"},{"t":"n","v":4},{"t":"s","v":"FALSE"},{"t":"n","v":5},{"t":"s","v":"POP"},{"t":"n","v":6},{"t":"s","v":"DUP"},{"t":"n","v":16},{"t":"s","v":"LOCAL_GET"},{"t":"n","v":17},{"t":"s","v":"LOCAL_SET"},{"t":"n","v":20},{"t":"s","v":"GLOBAL_GET"},{"t":"n","v":21},{"t":"s","v":"GLOBAL_SET"},{"t":"n","v":32},{"t":"s","v":"JUMP"},{"t":"n","v":33},{"t":"s","v":"JUMP_IF_FALSE"},{"t":"n","v":48},{"t":"s","v":"CALL"},{"t":"n","v":49},{"t":"s","v":"TAIL_CALL"},{"t":"n","v":50},{"t":"s","v":"RETURN"},{"t":"n","v":52},{"t":"s","v":"CALL_PRIM"},{"t":"n","v":128},{"t":"s","v":"DEFINE"},{"t":"n","v":144},{"t":"s","v":"STR_CONCAT"},{"t":"s","v":"str"},{"t":"s","v":"OP_"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/compiler.sxbc.json b/shared/static/wasm/sx/compiler.sxbc.json new file mode 100644 index 00000000..b75dbfa4 --- /dev/null +++ b/shared/static/wasm/sx/compiler.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"14423a68d4110cef","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,51,65,0,128,64,0,5,51,67,0,128,66,0,5,51,69,0,128,68,0,5,51,71,0,128,70,0,5,51,73,0,128,72,0,5,51,75,0,128,74,0,5,51,77,0,128,76,0,5,51,79,0,128,78,0,5,51,81,0,128,80,0,5,51,83,0,128,82,0,50],"constants":[{"t":"s","v":"make-pool"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,1,2,0,52,1,0,1,33,7,0,52,2,0,0,32,4,0,52,3,0,0,1,4,0,1,5,0,1,6,0,65,1,0,65,2,0,50],"constants":[{"t":"s","v":"entries"},{"t":"s","v":"primitive?"},{"t":"s","v":"mutable-list"},{"t":"s","v":"list"},{"t":"s","v":"index"},{"t":"s","v":"_count"},{"t":"n","v":0}]}},{"t":"s","v":"pool-add"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,17,2,20,4,0,1,5,0,52,3,0,2,17,3,20,7,0,20,8,0,52,6,0,2,33,13,0,20,7,0,20,8,0,52,3,0,2,32,69,0,20,7,0,1,9,0,52,3,0,2,17,4,20,7,0,20,8,0,20,11,0,52,10,0,3,5,20,7,0,1,9,0,20,11,0,1,13,0,52,12,0,2,52,10,0,3,5,20,14,0,20,4,0,1,15,0,52,3,0,2,20,2,0,48,2,5,20,11,0,50],"constants":[{"t":"s","v":"Add a value to the constant pool, return its index. Deduplicates."},{"t":"s","v":"serialize"},{"t":"s","v":"value"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"s","v":"index"},{"t":"s","v":"has-key?"},{"t":"s","v":"idx-map"},{"t":"s","v":"key"},{"t":"s","v":"_count"},{"t":"s","v":"dict-set!"},{"t":"s","v":"idx"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"append!"},{"t":"s","v":"entries"}]}},{"t":"s","v":"make-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,1,1,0,1,2,0,52,3,0,0,1,4,0,52,3,0,0,1,5,0,20,5,0,1,6,0,4,65,5,0,50],"constants":[{"t":"s","v":"next-slot"},{"t":"n","v":0},{"t":"s","v":"upvalues"},{"t":"s","v":"list"},{"t":"s","v":"locals"},{"t":"s","v":"parent"},{"t":"s","v":"is-function"}]}},{"t":"s","v":"scope-define-local"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,51,3,0,20,5,0,1,6,0,52,4,0,2,52,2,0,2,52,1,0,1,17,2,20,7,0,33,13,0,20,7,0,1,8,0,52,4,0,2,32,71,0,20,5,0,1,9,0,52,4,0,2,17,3,20,10,0,20,5,0,1,6,0,52,4,0,2,1,11,0,4,1,8,0,20,8,0,1,12,0,20,12,0,65,3,0,48,2,5,20,5,0,1,9,0,20,8,0,1,15,0,52,14,0,2,52,13,0,3,5,20,8,0,50],"constants":[{"t":"s","v":"Add a local variable, return its slot index.\n Idempotent: if name already has a slot, return it."},{"t":"s","v":"first"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"l"},{"t":"s","v":"name"}]}},{"t":"s","v":"get"},{"t":"s","v":"scope"},{"t":"s","v":"locals"},{"t":"s","v":"existing"},{"t":"s","v":"slot"},{"t":"s","v":"next-slot"},{"t":"s","v":"append!"},{"t":"s","v":"mutable"},{"t":"s","v":"name"},{"t":"s","v":"dict-set!"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"scope-resolve"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,33,18,0,1,3,0,20,4,0,1,5,0,1,6,0,65,2,0,32,79,1,20,2,0,1,8,0,52,7,0,2,17,2,51,10,0,20,8,0,52,9,0,2,17,3,20,11,0,33,41,0,51,10,0,20,8,0,52,13,0,2,52,12,0,1,17,4,1,3,0,20,14,0,1,15,0,52,7,0,2,1,5,0,1,14,0,65,2,0,32,8,1,20,2,0,1,16,0,52,7,0,2,17,4,51,17,0,20,18,0,52,9,0,2,17,5,20,19,0,33,41,0,51,17,0,20,18,0,52,13,0,2,52,12,0,1,17,6,1,3,0,20,20,0,1,21,0,52,7,0,2,1,5,0,1,22,0,65,2,0,32,193,0,20,2,0,1,23,0,52,7,0,2,17,6,20,23,0,52,1,0,1,33,18,0,1,3,0,20,4,0,1,5,0,1,6,0,65,2,0,32,153,0,20,24,0,20,23,0,20,4,0,48,2,17,7,20,26,0,1,5,0,52,7,0,2,1,6,0,52,25,0,2,33,6,0,20,26,0,32,114,0,20,2,0,1,27,0,52,7,0,2,33,98,0,20,2,0,1,16,0,52,7,0,2,52,28,0,1,17,8,20,29,0,20,2,0,1,16,0,52,7,0,2,1,3,0,20,26,0,1,3,0,52,7,0,2,1,30,0,20,26,0,1,5,0,52,7,0,2,1,14,0,52,25,0,2,1,21,0,20,31,0,1,4,0,20,4,0,65,4,0,48,2,5,1,3,0,20,31,0,1,5,0,1,22,0,65,2,0,32,3,0,20,26,0,50],"constants":[{"t":"s","v":"Resolve a variable name. Returns {:type \"local\"|\"upvalue\"|\"global\", :index N}.\n Upvalue captures only happen at function boundaries (is-function=true).\n Let scopes share the enclosing function's frame — their locals are\n accessed directly without upvalue indirection."},{"t":"s","v":"nil?"},{"t":"s","v":"scope"},{"t":"s","v":"index"},{"t":"s","v":"name"},{"t":"s","v":"type"},{"t":"s","v":"global"},{"t":"s","v":"get"},{"t":"s","v":"locals"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"l"},{"t":"s","v":"name"}]}},{"t":"s","v":"found"},{"t":"s","v":"first"},{"t":"s","v":"filter"},{"t":"s","v":"local"},{"t":"s","v":"slot"},{"t":"s","v":"upvalues"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"u"},{"t":"s","v":"name"}]}},{"t":"s","v":"upvals"},{"t":"s","v":"uv-found"},{"t":"s","v":"uv"},{"t":"s","v":"uv-index"},{"t":"s","v":"upvalue"},{"t":"s","v":"parent"},{"t":"s","v":"scope-resolve"},{"t":"s","v":"="},{"t":"s","v":"parent-result"},{"t":"s","v":"is-function"},{"t":"s","v":"len"},{"t":"s","v":"append!"},{"t":"s","v":"is-local"},{"t":"s","v":"uv-idx"}]}},{"t":"s","v":"make-emitter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,1,0,48,0,1,2,0,1,4,0,52,3,0,1,33,7,0,52,4,0,0,32,4,0,52,5,0,0,65,2,0,50],"constants":[{"t":"s","v":"pool"},{"t":"s","v":"make-pool"},{"t":"s","v":"bytecode"},{"t":"s","v":"primitive?"},{"t":"s","v":"mutable-list"},{"t":"s","v":"list"}]}},{"t":"s","v":"emit-byte"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,20,4,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"bytecode"},{"t":"s","v":"byte"}]}},{"t":"s","v":"emit-u16"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,48,2,5,20,0,0,20,1,0,20,3,0,1,4,0,52,6,0,2,52,5,0,1,1,4,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"emit-byte"},{"t":"s","v":"em"},{"t":"s","v":"mod"},{"t":"s","v":"value"},{"t":"n","v":256},{"t":"s","v":"floor"},{"t":"s","v":"/"}]}},{"t":"s","v":"emit-i16"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,13,0,20,1,0,1,4,0,52,3,0,2,32,3,0,20,1,0,17,2,20,5,0,20,6,0,20,7,0,49,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"value"},{"t":"n","v":0},{"t":"s","v":"+"},{"t":"n","v":65536},{"t":"s","v":"emit-u16"},{"t":"s","v":"em"},{"t":"s","v":"v"}]}},{"t":"s","v":"emit-op"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"emit-byte"},{"t":"s","v":"em"},{"t":"s","v":"opcode"}]}},{"t":"s","v":"emit-const"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,20,4,0,48,2,17,2,20,5,0,20,2,0,1,6,0,48,2,5,20,7,0,20,2,0,20,8,0,49,2,50],"constants":[{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"pool"},{"t":"s","v":"value"},{"t":"s","v":"emit-op"},{"t":"n","v":1},{"t":"s","v":"emit-u16"},{"t":"s","v":"idx"}]}},{"t":"s","v":"current-offset"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"bytecode"}]}},{"t":"s","v":"patch-i16"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,1,3,0,52,1,0,2,33,13,0,20,2,0,1,5,0,52,4,0,2,32,3,0,20,2,0,17,3,20,7,0,1,8,0,52,6,0,2,17,4,20,10,0,20,11,0,20,13,0,1,14,0,52,12,0,2,52,9,0,3,5,20,10,0,20,11,0,1,15,0,52,4,0,2,20,13,0,1,14,0,52,17,0,2,52,16,0,1,1,14,0,52,12,0,2,52,9,0,3,50],"constants":[{"t":"s","v":"Patch a previously emitted i16 at the given bytecode offset."},{"t":"s","v":"<"},{"t":"s","v":"value"},{"t":"n","v":0},{"t":"s","v":"+"},{"t":"n","v":65536},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"bytecode"},{"t":"s","v":"set-nth!"},{"t":"s","v":"bc"},{"t":"s","v":"offset"},{"t":"s","v":"mod"},{"t":"s","v":"v"},{"t":"n","v":256},{"t":"n","v":1},{"t":"s","v":"floor"},{"t":"s","v":"/"}]}},{"t":"s","v":"compile-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,33,14,0,20,3,0,20,4,0,1,5,0,49,2,32,42,1,20,2,0,52,7,0,1,1,8,0,52,6,0,2,33,14,0,20,9,0,20,4,0,20,2,0,49,2,32,11,1,20,2,0,52,7,0,1,1,10,0,52,6,0,2,33,14,0,20,9,0,20,4,0,20,2,0,49,2,32,236,0,20,2,0,52,7,0,1,1,11,0,52,6,0,2,33,26,0,20,3,0,20,4,0,20,2,0,33,6,0,1,12,0,32,3,0,1,13,0,49,2,32,193,0,20,2,0,52,7,0,1,1,14,0,52,6,0,2,33,19,0,20,9,0,20,4,0,20,15,0,20,2,0,48,1,49,2,32,157,0,20,2,0,52,7,0,1,1,16,0,52,6,0,2,33,22,0,20,17,0,20,4,0,20,18,0,20,2,0,48,1,20,19,0,49,3,32,118,0,20,2,0,52,7,0,1,1,20,0,52,6,0,2,33,56,0,20,2,0,52,21,0,1,33,26,0,20,3,0,20,4,0,1,22,0,48,2,5,20,23,0,20,4,0,1,24,0,49,2,32,17,0,20,25,0,20,4,0,20,2,0,20,19,0,20,26,0,49,4,32,45,0,20,2,0,52,7,0,1,1,27,0,52,6,0,2,33,17,0,20,28,0,20,4,0,20,2,0,20,19,0,49,3,32,11,0,20,9,0,20,4,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"Compile an expression. tail? indicates tail position for TCO."},{"t":"s","v":"nil?"},{"t":"s","v":"expr"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":2},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"number"},{"t":"s","v":"emit-const"},{"t":"s","v":"string"},{"t":"s","v":"boolean"},{"t":"n","v":3},{"t":"n","v":4},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"symbol"},{"t":"s","v":"compile-symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"scope"},{"t":"s","v":"list"},{"t":"s","v":"empty?"},{"t":"n","v":64},{"t":"s","v":"emit-u16"},{"t":"n","v":0},{"t":"s","v":"compile-list"},{"t":"s","v":"tail?"},{"t":"s","v":"dict"},{"t":"s","v":"compile-dict"}]}},{"t":"s","v":"compile-symbol"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,5,0,1,6,0,52,4,0,2,1,7,0,52,3,0,2,33,33,0,20,8,0,20,9,0,1,10,0,48,2,5,20,11,0,20,9,0,20,5,0,1,12,0,52,4,0,2,49,2,32,96,0,20,5,0,1,6,0,52,4,0,2,1,13,0,52,3,0,2,33,33,0,20,8,0,20,9,0,1,14,0,48,2,5,20,11,0,20,9,0,20,5,0,1,12,0,52,4,0,2,49,2,32,43,0,20,15,0,20,9,0,1,16,0,52,4,0,2,20,2,0,48,2,17,4,20,8,0,20,9,0,1,17,0,48,2,5,20,18,0,20,9,0,20,19,0,49,2,50],"constants":[{"t":"s","v":"scope-resolve"},{"t":"s","v":"scope"},{"t":"s","v":"name"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"resolved"},{"t":"s","v":"type"},{"t":"s","v":"local"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":16},{"t":"s","v":"emit-byte"},{"t":"s","v":"index"},{"t":"s","v":"upvalue"},{"t":"n","v":18},{"t":"s","v":"pool-add"},{"t":"s","v":"pool"},{"t":"n","v":20},{"t":"s","v":"emit-u16"},{"t":"s","v":"idx"}]}},{"t":"s","v":"compile-dict"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,3,0,52,2,0,1,17,4,51,5,0,20,3,0,52,4,0,2,5,20,6,0,20,7,0,1,8,0,48,2,5,20,9,0,20,7,0,20,10,0,49,2,50],"constants":[{"t":"s","v":"keys"},{"t":"s","v":"expr"},{"t":"s","v":"len"},{"t":"s","v":"ks"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,5,20,3,0,20,1,0,20,5,0,20,2,0,52,4,0,2,20,6,0,4,49,4,50],"constants":[{"t":"s","v":"emit-const"},{"t":"s","v":"em"},{"t":"s","v":"k"},{"t":"s","v":"compile-expr"},{"t":"s","v":"get"},{"t":"s","v":"expr"},{"t":"s","v":"scope"}]}},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":65},{"t":"s","v":"emit-u16"},{"t":"s","v":"count"}]}},{"t":"s","v":"compile-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,4,20,1,0,52,2,0,1,17,5,20,6,0,52,5,0,1,1,7,0,52,4,0,2,52,3,0,1,33,23,0,20,8,0,20,9,0,20,6,0,20,10,0,20,11,0,20,12,0,49,5,32,208,3,20,13,0,20,6,0,48,1,17,6,20,14,0,1,15,0,52,4,0,2,33,20,0,20,16,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,165,3,20,14,0,1,17,0,52,4,0,2,33,20,0,20,18,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,132,3,20,14,0,1,19,0,52,4,0,2,33,20,0,20,20,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,99,3,20,14,0,1,21,0,52,4,0,2,33,20,0,20,22,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,66,3,20,14,0,1,23,0,52,4,0,2,33,20,0,20,24,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,33,3,20,14,0,1,25,0,52,4,0,2,33,20,0,20,24,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,0,3,20,14,0,1,26,0,52,4,0,2,33,20,0,20,27,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,223,2,20,14,0,1,28,0,52,4,0,2,33,20,0,20,27,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,190,2,20,14,0,1,29,0,52,4,0,2,33,17,0,20,30,0,20,9,0,20,10,0,20,11,0,49,3,32,160,2,20,14,0,1,31,0,52,4,0,2,33,17,0,20,30,0,20,9,0,20,10,0,20,11,0,49,3,32,130,2,20,14,0,1,32,0,52,4,0,2,33,17,0,20,33,0,20,9,0,20,10,0,20,11,0,49,3,32,100,2,20,14,0,1,34,0,52,4,0,2,33,17,0,20,35,0,20,9,0,20,10,0,20,11,0,49,3,32,70,2,20,14,0,1,36,0,52,4,0,2,33,14,0,20,37,0,20,9,0,20,10,0,49,2,32,43,2,20,14,0,1,38,0,52,4,0,2,33,20,0,20,39,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,10,2,20,14,0,1,40,0,52,4,0,2,33,20,0,20,41,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,233,1,20,14,0,1,42,0,52,4,0,2,33,20,0,20,43,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,200,1,20,14,0,1,44,0,52,4,0,2,33,17,0,20,45,0,20,9,0,20,10,0,20,11,0,49,3,32,170,1,20,14,0,1,46,0,52,4,0,2,33,17,0,20,45,0,20,9,0,20,10,0,20,11,0,49,3,32,140,1,20,14,0,1,47,0,52,4,0,2,33,17,0,20,48,0,20,9,0,20,10,0,20,11,0,49,3,32,110,1,20,14,0,1,49,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,83,1,20,14,0,1,52,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,56,1,20,14,0,1,53,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,29,1,20,14,0,1,54,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,2,1,20,14,0,1,55,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,231,0,20,14,0,1,56,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,204,0,20,14,0,1,57,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,177,0,20,14,0,1,58,0,52,4,0,2,33,14,0,20,50,0,20,9,0,1,51,0,49,2,32,150,0,20,14,0,1,46,0,52,4,0,2,33,17,0,20,45,0,20,9,0,20,10,0,20,11,0,49,3,32,120,0,20,14,0,1,59,0,52,4,0,2,33,21,0,20,60,0,20,9,0,20,10,0,52,0,0,1,20,11,0,49,3,32,86,0,20,14,0,1,61,0,52,4,0,2,33,20,0,20,62,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,53,0,20,14,0,1,63,0,52,4,0,2,33,20,0,20,64,0,20,9,0,20,10,0,20,11,0,20,12,0,49,4,32,20,0,20,8,0,20,9,0,20,6,0,20,10,0,20,11,0,20,12,0,49,5,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"expr"},{"t":"s","v":"rest"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"compile-call"},{"t":"s","v":"em"},{"t":"s","v":"args"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"s","v":"symbol-name"},{"t":"s","v":"name"},{"t":"s","v":"if"},{"t":"s","v":"compile-if"},{"t":"s","v":"when"},{"t":"s","v":"compile-when"},{"t":"s","v":"and"},{"t":"s","v":"compile-and"},{"t":"s","v":"or"},{"t":"s","v":"compile-or"},{"t":"s","v":"let"},{"t":"s","v":"compile-let"},{"t":"s","v":"let*"},{"t":"s","v":"begin"},{"t":"s","v":"compile-begin"},{"t":"s","v":"do"},{"t":"s","v":"lambda"},{"t":"s","v":"compile-lambda"},{"t":"s","v":"fn"},{"t":"s","v":"define"},{"t":"s","v":"compile-define"},{"t":"s","v":"set!"},{"t":"s","v":"compile-set"},{"t":"s","v":"quote"},{"t":"s","v":"compile-quote"},{"t":"s","v":"cond"},{"t":"s","v":"compile-cond"},{"t":"s","v":"case"},{"t":"s","v":"compile-case"},{"t":"s","v":"->"},{"t":"s","v":"compile-thread"},{"t":"s","v":"defcomp"},{"t":"s","v":"compile-defcomp"},{"t":"s","v":"defisland"},{"t":"s","v":"defmacro"},{"t":"s","v":"compile-defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"emit-op"},{"t":"n","v":2},{"t":"s","v":"defhandler"},{"t":"s","v":"defpage"},{"t":"s","v":"defquery"},{"t":"s","v":"defaction"},{"t":"s","v":"defrelation"},{"t":"s","v":"deftype"},{"t":"s","v":"defeffect"},{"t":"s","v":"quasiquote"},{"t":"s","v":"compile-quasiquote"},{"t":"s","v":"letrec"},{"t":"s","v":"compile-letrec"},{"t":"s","v":"match"},{"t":"s","v":"compile-match"}]}},{"t":"s","v":"compile-if"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,4,20,1,0,1,3,0,52,2,0,2,17,5,20,1,0,52,5,0,1,1,6,0,52,4,0,2,33,13,0,20,1,0,1,6,0,52,2,0,2,32,1,0,2,17,6,20,7,0,20,8,0,20,9,0,20,10,0,4,48,4,5,20,11,0,20,8,0,1,12,0,48,2,5,20,13,0,20,8,0,48,1,17,7,20,14,0,20,8,0,1,15,0,48,2,5,20,7,0,20,8,0,20,16,0,20,10,0,20,17,0,48,4,5,20,11,0,20,8,0,1,18,0,48,2,5,20,13,0,20,8,0,48,1,17,8,20,14,0,20,8,0,1,15,0,48,2,5,20,19,0,20,8,0,20,20,0,20,13,0,20,8,0,48,1,20,20,0,1,6,0,52,22,0,2,52,21,0,2,48,3,5,20,24,0,52,23,0,1,33,14,0,20,11,0,20,8,0,1,6,0,48,2,32,17,0,20,7,0,20,8,0,20,24,0,20,10,0,20,17,0,48,4,5,20,19,0,20,8,0,20,25,0,20,13,0,20,8,0,48,1,20,25,0,1,6,0,52,22,0,2,52,21,0,2,49,3,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"test"},{"t":"s","v":"scope"},{"t":"s","v":"emit-op"},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"s","v":"then-expr"},{"t":"s","v":"tail?"},{"t":"n","v":32},{"t":"s","v":"patch-i16"},{"t":"s","v":"else-jump"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"s","v":"nil?"},{"t":"s","v":"else-expr"},{"t":"s","v":"end-jump"}]}},{"t":"s","v":"compile-when"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,4,20,1,0,52,2,0,1,17,5,20,3,0,20,4,0,20,5,0,20,6,0,4,48,4,5,20,7,0,20,4,0,1,8,0,48,2,5,20,9,0,20,4,0,48,1,17,6,20,10,0,20,4,0,1,11,0,48,2,5,20,12,0,20,4,0,20,13,0,20,6,0,20,14,0,48,4,5,20,7,0,20,4,0,1,15,0,48,2,5,20,9,0,20,4,0,48,1,17,7,20,10,0,20,4,0,1,11,0,48,2,5,20,16,0,20,4,0,20,17,0,20,9,0,20,4,0,48,1,20,17,0,1,20,0,52,19,0,2,52,18,0,2,48,3,5,20,7,0,20,4,0,1,20,0,48,2,5,20,16,0,20,4,0,20,21,0,20,9,0,20,4,0,48,1,20,21,0,1,20,0,52,19,0,2,52,18,0,2,49,3,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"rest"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"test"},{"t":"s","v":"scope"},{"t":"s","v":"emit-op"},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"s","v":"compile-begin"},{"t":"s","v":"body"},{"t":"s","v":"tail?"},{"t":"n","v":32},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip-jump"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"n","v":2},{"t":"s","v":"end-jump"}]}},{"t":"s","v":"compile-and"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,14,0,20,2,0,20,3,0,1,4,0,49,2,32,174,0,20,1,0,52,6,0,1,1,7,0,52,5,0,2,33,24,0,20,8,0,20,3,0,20,1,0,52,9,0,1,20,10,0,20,11,0,49,4,32,133,0,20,8,0,20,3,0,20,1,0,52,9,0,1,20,10,0,4,48,4,5,20,2,0,20,3,0,1,12,0,48,2,5,20,2,0,20,3,0,1,13,0,48,2,5,20,14,0,20,3,0,48,1,17,4,20,15,0,20,3,0,1,16,0,48,2,5,20,2,0,20,3,0,1,17,0,48,2,5,20,18,0,20,3,0,20,1,0,52,19,0,1,20,10,0,20,11,0,48,4,5,20,20,0,20,3,0,20,21,0,20,14,0,20,3,0,48,1,20,21,0,1,24,0,52,23,0,2,52,22,0,2,49,3,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":3},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"first"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"n","v":6},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"n","v":5},{"t":"s","v":"compile-and"},{"t":"s","v":"rest"},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"n","v":2}]}},{"t":"s","v":"compile-or"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,14,0,20,2,0,20,3,0,1,4,0,49,2,32,174,0,20,1,0,52,6,0,1,1,7,0,52,5,0,2,33,24,0,20,8,0,20,3,0,20,1,0,52,9,0,1,20,10,0,20,11,0,49,4,32,133,0,20,8,0,20,3,0,20,1,0,52,9,0,1,20,10,0,4,48,4,5,20,2,0,20,3,0,1,12,0,48,2,5,20,2,0,20,3,0,1,13,0,48,2,5,20,14,0,20,3,0,48,1,17,4,20,15,0,20,3,0,1,16,0,48,2,5,20,2,0,20,3,0,1,17,0,48,2,5,20,18,0,20,3,0,20,1,0,52,19,0,1,20,10,0,20,11,0,48,4,5,20,20,0,20,3,0,20,21,0,20,14,0,20,3,0,48,1,20,21,0,1,24,0,52,23,0,2,52,22,0,2,49,3,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":4},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"first"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"n","v":6},{"t":"n","v":34},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"n","v":5},{"t":"s","v":"compile-or"},{"t":"s","v":"rest"},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"n","v":2}]}},{"t":"s","v":"compile-begin"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,6,33,19,0,5,20,5,0,1,6,0,52,4,0,2,52,3,0,1,52,0,0,1,33,13,0,51,8,0,20,2,0,52,7,0,2,32,1,0,2,5,20,2,0,52,1,0,1,33,14,0,20,9,0,20,10,0,1,11,0,49,2,32,94,0,20,2,0,52,13,0,1,1,14,0,52,12,0,2,33,24,0,20,15,0,20,10,0,20,2,0,52,16,0,1,20,5,0,20,17,0,49,4,32,53,0,20,15,0,20,10,0,20,2,0,52,16,0,1,20,5,0,4,48,4,5,20,9,0,20,10,0,1,18,0,48,2,5,20,19,0,20,10,0,20,2,0,52,20,0,1,20,5,0,20,17,0,49,4,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"exprs"},{"t":"s","v":"nil?"},{"t":"s","v":"get"},{"t":"s","v":"scope"},{"t":"s","v":"parent"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,62,0,5,20,2,0,52,5,0,1,1,6,0,52,4,0,2,6,33,43,0,5,20,2,0,52,7,0,1,52,1,0,1,1,8,0,52,0,0,2,6,33,20,0,5,20,9,0,20,2,0,52,7,0,1,48,1,1,10,0,52,0,0,2,33,59,0,20,2,0,1,12,0,52,11,0,2,17,1,20,13,0,52,1,0,1,1,8,0,52,0,0,2,33,11,0,20,9,0,20,13,0,48,1,32,3,0,20,13,0,17,2,20,14,0,20,15,0,20,16,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"list"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"define"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"name-expr"},{"t":"s","v":"scope-define-local"},{"t":"s","v":"scope"},{"t":"s","v":"name"}]}},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":2},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"first"},{"t":"s","v":"tail?"},{"t":"n","v":5},{"t":"s","v":"compile-begin"},{"t":"s","v":"rest"}]}},{"t":"s","v":"compile-let"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,147,0,20,5,0,20,3,0,52,2,0,1,48,1,17,4,20,3,0,1,7,0,52,6,0,2,17,5,20,3,0,1,9,0,52,8,0,2,17,6,52,10,0,0,17,7,52,10,0,0,17,8,51,12,0,20,13,0,52,11,0,2,5,1,16,0,52,15,0,1,20,17,0,52,10,0,2,20,18,0,52,14,0,2,17,9,20,19,0,52,15,0,1,20,20,0,52,10,0,2,52,10,0,1,17,10,20,19,0,52,15,0,1,20,22,0,52,21,0,2,17,11,20,23,0,20,24,0,20,25,0,20,26,0,52,10,0,2,20,27,0,20,28,0,49,4,32,77,0,20,3,0,52,2,0,1,17,4,20,3,0,52,29,0,1,17,5,20,30,0,20,27,0,48,1,17,6,20,32,0,1,33,0,20,27,0,1,33,0,52,34,0,2,52,31,0,3,5,51,35,0,20,13,0,52,11,0,2,5,20,36,0,20,24,0,20,18,0,20,32,0,20,28,0,49,4,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"slice"},{"t":"n","v":2},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,5,0,52,4,0,1,52,3,0,1,1,6,0,52,2,0,2,33,10,0,20,5,0,52,4,0,1,32,11,0,20,5,0,52,4,0,1,52,7,0,1,48,2,5,20,0,0,20,8,0,20,5,0,1,10,0,52,9,0,2,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"params"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"binding"},{"t":"s","v":"symbol"},{"t":"s","v":"make-symbol"},{"t":"s","v":"inits"},{"t":"s","v":"nth"},{"t":"n","v":1}]}},{"t":"s","v":"bindings"},{"t":"s","v":"concat"},{"t":"s","v":"make-symbol"},{"t":"s","v":"fn"},{"t":"s","v":"params"},{"t":"s","v":"body"},{"t":"s","v":"loop-name"},{"t":"s","v":"lambda-expr"},{"t":"s","v":"cons"},{"t":"s","v":"inits"},{"t":"s","v":"compile-letrec"},{"t":"s","v":"em"},{"t":"s","v":"letrec-bindings"},{"t":"s","v":"call-expr"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"s","v":"rest"},{"t":"s","v":"make-scope"},{"t":"s","v":"dict-set!"},{"t":"s","v":"let-scope"},{"t":"s","v":"next-slot"},{"t":"s","v":"get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,7,0,20,3,0,52,2,0,1,17,1,20,3,0,1,7,0,52,6,0,2,17,2,20,8,0,20,9,0,20,10,0,48,2,17,3,20,11,0,20,12,0,20,13,0,20,9,0,4,48,4,5,20,14,0,20,12,0,1,15,0,48,2,5,20,16,0,20,12,0,20,17,0,49,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"binding"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"scope-define-local"},{"t":"s","v":"let-scope"},{"t":"s","v":"name"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"value"},{"t":"s","v":"emit-op"},{"t":"n","v":17},{"t":"s","v":"emit-byte"},{"t":"s","v":"slot"}]}},{"t":"s","v":"compile-begin"}]}},{"t":"s","v":"compile-letrec"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,17,4,20,2,0,52,3,0,1,17,5,20,4,0,20,5,0,48,1,17,6,20,7,0,1,8,0,20,5,0,1,8,0,52,9,0,2,52,6,0,3,5,51,11,0,20,12,0,52,10,0,2,17,7,51,14,0,51,15,0,1,17,0,20,12,0,52,18,0,1,52,16,0,2,52,10,0,2,52,13,0,2,5,20,19,0,20,20,0,20,21,0,20,7,0,20,22,0,49,4,50],"constants":[{"t":"s","v":"Compile letrec: all names visible during value compilation.\n 1. Define all local slots (initialized to nil).\n 2. Compile each value and assign — names are already in scope\n so mutually recursive functions can reference each other."},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"rest"},{"t":"s","v":"make-scope"},{"t":"s","v":"scope"},{"t":"s","v":"dict-set!"},{"t":"s","v":"let-scope"},{"t":"s","v":"next-slot"},{"t":"s","v":"get"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,7,0,20,3,0,52,2,0,1,17,1,20,6,0,20,7,0,20,8,0,48,2,17,2,20,9,0,20,10,0,1,11,0,48,2,5,20,9,0,20,10,0,1,12,0,48,2,5,20,13,0,20,10,0,20,14,0,48,2,5,20,14,0,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"binding"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"scope-define-local"},{"t":"s","v":"let-scope"},{"t":"s","v":"name"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":2},{"t":"n","v":17},{"t":"s","v":"emit-byte"},{"t":"s","v":"slot"}]}},{"t":"s","v":"bindings"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,1,0,1,3,0,52,2,0,2,17,2,20,4,0,20,5,0,20,6,0,1,3,0,52,2,0,2,20,7,0,4,48,4,5,20,8,0,20,5,0,1,9,0,48,2,5,20,10,0,20,5,0,20,11,0,49,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"binding"},{"t":"s","v":"let-scope"},{"t":"s","v":"emit-op"},{"t":"n","v":17},{"t":"s","v":"emit-byte"},{"t":"s","v":"slot"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,20,4,0,20,3,0,52,1,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"nth"},{"t":"s","v":"bindings"},{"t":"s","v":"i"},{"t":"s","v":"slots"}]}},{"t":"s","v":"range"},{"t":"n","v":0},{"t":"s","v":"len"},{"t":"s","v":"compile-begin"},{"t":"s","v":"em"},{"t":"s","v":"body"},{"t":"s","v":"tail?"}]}},{"t":"s","v":"compile-lambda"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,1,0,52,2,0,1,17,4,20,3,0,20,4,0,48,1,17,5,20,5,0,48,0,17,6,20,7,0,1,8,0,3,52,6,0,3,5,51,10,0,20,11,0,52,9,0,2,5,20,12,0,20,13,0,20,14,0,20,7,0,3,48,4,5,20,15,0,20,13,0,1,16,0,48,2,5,20,7,0,1,18,0,52,17,0,2,17,7,1,19,0,20,21,0,52,20,0,1,1,22,0,20,7,0,1,23,0,52,17,0,2,52,20,0,1,1,24,0,20,13,0,1,25,0,52,17,0,2,1,26,0,52,17,0,2,1,27,0,20,13,0,1,27,0,52,17,0,2,65,4,0,17,8,20,28,0,20,29,0,1,25,0,52,17,0,2,20,30,0,48,2,17,9,20,15,0,20,29,0,1,31,0,48,2,5,20,32,0,20,29,0,20,33,0,48,2,5,51,34,0,20,21,0,52,9,0,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"rest"},{"t":"s","v":"make-scope"},{"t":"s","v":"scope"},{"t":"s","v":"make-emitter"},{"t":"s","v":"dict-set!"},{"t":"s","v":"fn-scope"},{"t":"s","v":"is-function"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,11,0,20,4,0,20,2,0,48,1,32,67,0,20,2,0,52,5,0,1,6,33,35,0,5,20,2,0,52,7,0,1,52,6,0,1,6,33,19,0,5,20,2,0,52,8,0,1,52,1,0,1,1,3,0,52,0,0,2,33,15,0,20,4,0,20,2,0,52,8,0,1,48,1,32,3,0,20,2,0,17,1,20,9,0,1,10,0,52,0,0,2,52,6,0,1,6,33,15,0,5,20,9,0,1,11,0,52,0,0,2,52,6,0,1,33,14,0,20,12,0,20,13,0,20,9,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"p"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"list?"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"name"},{"t":"s","v":"&key"},{"t":"s","v":"&rest"},{"t":"s","v":"scope-define-local"},{"t":"s","v":"fn-scope"}]}},{"t":"s","v":"params"},{"t":"s","v":"compile-begin"},{"t":"s","v":"fn-em"},{"t":"s","v":"body"},{"t":"s","v":"emit-op"},{"t":"n","v":50},{"t":"s","v":"get"},{"t":"s","v":"upvalues"},{"t":"s","v":"upvalue-count"},{"t":"s","v":"len"},{"t":"s","v":"upvals"},{"t":"s","v":"arity"},{"t":"s","v":"locals"},{"t":"s","v":"constants"},{"t":"s","v":"pool"},{"t":"s","v":"entries"},{"t":"s","v":"bytecode"},{"t":"s","v":"pool-add"},{"t":"s","v":"em"},{"t":"s","v":"code"},{"t":"n","v":51},{"t":"s","v":"emit-u16"},{"t":"s","v":"code-idx"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,33,6,0,1,5,0,32,3,0,1,6,0,48,2,5,20,0,0,20,1,0,20,3,0,1,7,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"emit-byte"},{"t":"s","v":"em"},{"t":"s","v":"get"},{"t":"s","v":"uv"},{"t":"s","v":"is-local"},{"t":"n","v":1},{"t":"n","v":0},{"t":"s","v":"index"}]}}]}},{"t":"s","v":"compile-define"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,3,20,4,0,52,3,0,1,1,5,0,52,2,0,2,33,11,0,20,6,0,20,4,0,48,1,32,3,0,20,4,0,17,4,20,1,0,52,7,0,1,17,6,20,10,0,52,9,0,1,52,8,0,1,6,33,19,0,5,20,10,0,52,0,0,1,52,3,0,1,1,11,0,52,2,0,2,33,16,0,51,12,0,17,7,20,13,0,20,10,0,48,1,32,7,0,20,10,0,52,0,0,1,17,5,20,16,0,1,17,0,52,15,0,2,52,14,0,1,52,8,0,1,33,55,0,20,18,0,20,16,0,20,19,0,48,2,17,6,20,20,0,20,21,0,20,22,0,20,16,0,4,48,4,5,20,23,0,20,21,0,1,24,0,48,2,5,20,25,0,20,21,0,20,26,0,49,2,32,59,0,20,27,0,20,21,0,1,28,0,52,15,0,2,20,19,0,48,2,17,6,20,20,0,20,21,0,20,22,0,20,16,0,4,48,4,5,20,23,0,20,21,0,1,29,0,48,2,5,20,30,0,20,21,0,20,31,0,49,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"name-expr"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"rest"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"rest-args"},{"t":"s","v":"keyword"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,47,0,20,1,0,52,4,0,1,52,3,0,1,1,5,0,52,2,0,2,33,19,0,20,6,0,20,1,0,52,7,0,1,52,7,0,1,49,1,32,7,0,20,1,0,52,4,0,1,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"items"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"keyword"},{"t":"s","v":"skip-annotations"},{"t":"s","v":"rest"}]}},{"t":"s","v":"skip-annotations"},{"t":"s","v":"nil?"},{"t":"s","v":"get"},{"t":"s","v":"scope"},{"t":"s","v":"parent"},{"t":"s","v":"scope-define-local"},{"t":"s","v":"name"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"value"},{"t":"s","v":"emit-op"},{"t":"n","v":17},{"t":"s","v":"emit-byte"},{"t":"s","v":"slot"},{"t":"s","v":"pool-add"},{"t":"s","v":"pool"},{"t":"n","v":128},{"t":"s","v":"emit-u16"},{"t":"s","v":"name-idx"}]}},{"t":"s","v":"compile-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,52,1,0,1,1,4,0,52,0,0,2,33,15,0,20,5,0,20,3,0,52,2,0,1,48,1,32,7,0,20,3,0,52,2,0,1,17,3,20,3,0,1,7,0,52,6,0,2,17,4,20,8,0,20,9,0,20,10,0,48,2,17,5,20,11,0,20,12,0,20,13,0,20,9,0,4,48,4,5,20,15,0,1,16,0,52,14,0,2,1,17,0,52,0,0,2,33,33,0,20,18,0,20,12,0,1,19,0,48,2,5,20,20,0,20,12,0,20,15,0,1,21,0,52,14,0,2,49,2,32,96,0,20,15,0,1,16,0,52,14,0,2,1,22,0,52,0,0,2,33,33,0,20,18,0,20,12,0,1,23,0,48,2,5,20,20,0,20,12,0,20,15,0,1,21,0,52,14,0,2,49,2,32,43,0,20,24,0,20,12,0,1,25,0,52,14,0,2,20,10,0,48,2,17,6,20,18,0,20,12,0,1,26,0,48,2,5,20,27,0,20,12,0,20,28,0,49,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"scope-resolve"},{"t":"s","v":"scope"},{"t":"s","v":"name"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"value"},{"t":"s","v":"get"},{"t":"s","v":"resolved"},{"t":"s","v":"type"},{"t":"s","v":"local"},{"t":"s","v":"emit-op"},{"t":"n","v":17},{"t":"s","v":"emit-byte"},{"t":"s","v":"index"},{"t":"s","v":"upvalue"},{"t":"n","v":19},{"t":"s","v":"pool-add"},{"t":"s","v":"pool"},{"t":"n","v":21},{"t":"s","v":"emit-u16"},{"t":"s","v":"idx"}]}},{"t":"s","v":"compile-quote"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,14,0,20,2,0,20,3,0,1,4,0,49,2,32,15,0,20,5,0,20,3,0,20,1,0,52,6,0,1,49,2,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":2},{"t":"s","v":"emit-const"},{"t":"s","v":"first"}]}},{"t":"s","v":"compile-cond"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,3,0,52,2,0,1,1,4,0,52,1,0,2,33,14,0,20,5,0,20,6,0,1,4,0,49,2,32,58,1,20,3,0,52,7,0,1,17,4,20,3,0,1,9,0,52,8,0,2,17,5,20,3,0,52,2,0,1,1,4,0,52,10,0,2,33,13,0,20,3,0,1,4,0,52,11,0,2,32,4,0,52,12,0,0,17,6,20,15,0,52,14,0,1,1,16,0,52,13,0,2,6,33,16,0,5,20,17,0,20,15,0,48,1,1,18,0,52,13,0,2,6,34,9,0,5,20,15,0,3,52,13,0,2,33,20,0,20,19,0,20,6,0,20,20,0,20,21,0,20,22,0,49,4,32,187,0,20,19,0,20,6,0,20,15,0,20,21,0,4,48,4,5,20,5,0,20,6,0,1,23,0,48,2,5,20,24,0,20,6,0,48,1,17,7,20,25,0,20,6,0,1,26,0,48,2,5,20,19,0,20,6,0,20,20,0,20,21,0,20,22,0,48,4,5,20,5,0,20,6,0,1,27,0,48,2,5,20,24,0,20,6,0,48,1,17,8,20,25,0,20,6,0,1,26,0,48,2,5,20,28,0,20,6,0,20,29,0,20,24,0,20,6,0,48,1,20,29,0,1,4,0,52,31,0,2,52,30,0,2,48,3,5,20,32,0,20,6,0,20,33,0,20,21,0,20,22,0,48,4,5,20,28,0,20,6,0,20,34,0,20,24,0,20,6,0,48,1,20,34,0,1,4,0,52,31,0,2,52,30,0,2,49,3,50],"constants":[{"t":"s","v":"Compile (cond test1 body1 test2 body2 ... :else fallback)."},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"n","v":2},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"s","v":"first"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":">"},{"t":"s","v":"slice"},{"t":"s","v":"list"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"test"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"else"},{"t":"s","v":"compile-expr"},{"t":"s","v":"body"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"n","v":32},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"s","v":"compile-cond"},{"t":"s","v":"rest-clauses"},{"t":"s","v":"end-jump"}]}},{"t":"s","v":"compile-case"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,20,4,0,52,3,0,1,20,5,0,4,48,4,5,20,4,0,52,6,0,1,17,4,20,7,0,20,2,0,20,8,0,20,5,0,20,9,0,49,4,50],"constants":[{"t":"s","v":"Compile (case expr val1 body1 val2 body2 ... :else fallback)."},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"scope"},{"t":"s","v":"rest"},{"t":"s","v":"compile-case-clauses"},{"t":"s","v":"clauses"},{"t":"s","v":"tail?"}]}},{"t":"s","v":"compile-case-clauses"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,26,0,20,4,0,20,5,0,1,6,0,48,2,5,20,4,0,20,5,0,1,3,0,49,2,32,150,1,20,2,0,52,7,0,1,17,4,20,2,0,1,9,0,52,8,0,2,17,5,20,2,0,52,1,0,1,1,3,0,52,10,0,2,33,13,0,20,2,0,1,3,0,52,11,0,2,32,4,0,52,12,0,0,17,6,20,15,0,52,14,0,1,1,16,0,52,13,0,2,6,33,16,0,5,20,17,0,20,15,0,48,1,1,18,0,52,13,0,2,6,34,9,0,5,20,15,0,3,52,13,0,2,33,32,0,20,4,0,20,5,0,1,6,0,48,2,5,20,19,0,20,5,0,20,20,0,20,21,0,20,22,0,49,4,32,11,1,20,4,0,20,5,0,1,23,0,48,2,5,20,19,0,20,5,0,20,15,0,20,21,0,4,48,4,5,20,24,0,20,5,0,1,26,0,52,25,0,2,1,13,0,48,2,17,7,20,4,0,20,5,0,1,27,0,48,2,5,20,28,0,20,5,0,20,29,0,48,2,5,20,30,0,20,5,0,1,3,0,48,2,5,20,4,0,20,5,0,1,31,0,48,2,5,20,32,0,20,5,0,48,1,17,7,20,33,0,20,5,0,1,34,0,48,2,5,20,4,0,20,5,0,1,6,0,48,2,5,20,19,0,20,5,0,20,20,0,20,21,0,20,22,0,48,4,5,20,4,0,20,5,0,1,35,0,48,2,5,20,32,0,20,5,0,48,1,17,8,20,33,0,20,5,0,1,34,0,48,2,5,20,36,0,20,5,0,20,37,0,20,32,0,20,5,0,48,1,20,37,0,1,3,0,52,39,0,2,52,38,0,2,48,3,5,20,40,0,20,5,0,20,41,0,20,21,0,20,22,0,48,4,5,20,36,0,20,5,0,20,42,0,20,32,0,20,5,0,48,1,20,42,0,1,3,0,52,39,0,2,52,38,0,2,49,3,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"clauses"},{"t":"n","v":2},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":5},{"t":"s","v":"first"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":">"},{"t":"s","v":"slice"},{"t":"s","v":"list"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"test"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"else"},{"t":"s","v":"compile-expr"},{"t":"s","v":"body"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"n","v":6},{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"n","v":52},{"t":"s","v":"emit-u16"},{"t":"s","v":"name-idx"},{"t":"s","v":"emit-byte"},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"n","v":32},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"s","v":"compile-case-clauses"},{"t":"s","v":"rest-clauses"},{"t":"s","v":"end-jump"}]}},{"t":"s","v":"compile-match"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,52,2,0,1,20,4,0,4,48,4,5,2,17,4,51,5,0,17,4,20,6,0,20,3,0,52,7,0,1,49,1,50],"constants":[{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"first"},{"t":"s","v":"args"},{"t":"s","v":"scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,109,0,20,2,0,20,3,0,1,4,0,48,2,5,20,5,0,20,3,0,1,7,0,52,6,0,2,1,8,0,48,2,17,1,20,2,0,20,3,0,1,9,0,48,2,5,20,10,0,20,3,0,20,11,0,48,2,5,20,2,0,20,3,0,1,12,0,48,2,5,20,10,0,20,3,0,20,5,0,20,3,0,1,7,0,52,6,0,2,1,13,0,48,2,48,2,5,20,14,0,20,3,0,1,9,0,49,2,32,169,3,20,1,0,52,15,0,1,17,1,20,16,0,52,15,0,1,17,2,20,16,0,1,9,0,52,17,0,2,17,3,20,1,0,52,18,0,1,17,4,20,21,0,52,20,0,1,1,22,0,52,19,0,2,6,33,16,0,5,20,23,0,20,21,0,48,1,1,24,0,52,19,0,2,33,32,0,20,2,0,20,3,0,1,4,0,48,2,5,20,25,0,20,3,0,20,26,0,20,27,0,20,28,0,49,4,32,61,3,20,21,0,52,20,0,1,1,22,0,52,19,0,2,6,33,68,0,5,20,23,0,20,21,0,48,1,1,30,0,52,19,0,2,52,29,0,1,6,33,44,0,5,20,23,0,20,21,0,48,1,1,31,0,52,19,0,2,52,29,0,1,6,33,20,0,5,20,23,0,20,21,0,48,1,1,32,0,52,19,0,2,52,29,0,1,33,75,0,20,23,0,20,21,0,48,1,17,5,20,33,0,20,27,0,20,34,0,48,2,17,6,20,2,0,20,3,0,1,35,0,48,2,5,20,14,0,20,3,0,20,36,0,20,37,0,20,34,0,48,2,48,2,5,20,25,0,20,3,0,20,26,0,20,37,0,20,28,0,49,4,32,153,2,20,21,0,52,38,0,1,6,33,88,0,5,20,21,0,52,39,0,1,1,40,0,52,19,0,2,6,33,69,0,5,20,21,0,52,15,0,1,52,20,0,1,1,22,0,52,19,0,2,6,33,46,0,5,20,23,0,20,21,0,52,15,0,1,48,1,1,41,0,52,19,0,2,6,33,22,0,5,20,21,0,1,9,0,52,17,0,2,52,20,0,1,1,22,0,52,19,0,2,33,49,1,20,2,0,20,3,0,1,42,0,48,2,5,20,5,0,20,3,0,1,7,0,52,6,0,2,20,23,0,20,21,0,1,9,0,52,17,0,2,48,1,52,43,0,1,48,2,17,5,20,2,0,20,3,0,1,9,0,48,2,5,20,10,0,20,3,0,20,11,0,48,2,5,20,5,0,20,3,0,1,7,0,52,6,0,2,1,19,0,48,2,17,5,20,2,0,20,3,0,1,12,0,48,2,5,20,10,0,20,3,0,20,44,0,48,2,5,20,14,0,20,3,0,1,40,0,48,2,5,20,2,0,20,3,0,1,45,0,48,2,5,20,46,0,20,3,0,48,1,17,5,20,47,0,20,3,0,1,48,0,48,2,5,20,2,0,20,3,0,1,4,0,48,2,5,20,25,0,20,3,0,20,26,0,20,27,0,20,28,0,48,4,5,20,2,0,20,3,0,1,49,0,48,2,5,20,46,0,20,3,0,48,1,17,6,20,47,0,20,3,0,1,48,0,48,2,5,20,50,0,20,3,0,20,51,0,20,46,0,20,3,0,48,1,20,51,0,1,40,0,52,53,0,2,52,52,0,2,48,3,5,20,54,0,20,55,0,48,1,5,20,50,0,20,3,0,20,56,0,20,46,0,20,3,0,48,1,20,56,0,1,40,0,52,53,0,2,52,52,0,2,49,3,32,2,1,20,2,0,20,3,0,1,42,0,48,2,5,20,25,0,20,3,0,20,21,0,20,27,0,4,48,4,5,20,5,0,20,3,0,1,7,0,52,6,0,2,1,19,0,48,2,17,5,20,2,0,20,3,0,1,12,0,48,2,5,20,10,0,20,3,0,20,44,0,48,2,5,20,14,0,20,3,0,1,40,0,48,2,5,20,2,0,20,3,0,1,45,0,48,2,5,20,46,0,20,3,0,48,1,17,5,20,47,0,20,3,0,1,48,0,48,2,5,20,2,0,20,3,0,1,4,0,48,2,5,20,25,0,20,3,0,20,26,0,20,27,0,20,28,0,48,4,5,20,2,0,20,3,0,1,49,0,48,2,5,20,46,0,20,3,0,48,1,17,6,20,47,0,20,3,0,1,48,0,48,2,5,20,50,0,20,3,0,20,51,0,20,46,0,20,3,0,48,1,20,51,0,1,40,0,52,53,0,2,52,52,0,2,48,3,5,20,54,0,20,55,0,48,1,5,20,50,0,20,3,0,20,56,0,20,46,0,20,3,0,48,1,20,56,0,1,40,0,52,53,0,2,52,52,0,2,49,3,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"clauses"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":5},{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"s","v":"match: no clause matched"},{"t":"n","v":1},{"t":"s","v":"emit-u16"},{"t":"s","v":"idx"},{"t":"n","v":52},{"t":"s","v":"error"},{"t":"s","v":"emit-byte"},{"t":"s","v":"first"},{"t":"s","v":"clause"},{"t":"s","v":"nth"},{"t":"s","v":"rest"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"pattern"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"_"},{"t":"s","v":"compile-expr"},{"t":"s","v":"body"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"s","v":"not"},{"t":"s","v":"true"},{"t":"s","v":"false"},{"t":"s","v":"nil"},{"t":"s","v":"scope-add"},{"t":"s","v":"var-name"},{"t":"n","v":13},{"t":"s","v":"scope-index"},{"t":"s","v":"inner-scope"},{"t":"s","v":"list?"},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"quote"},{"t":"n","v":6},{"t":"s","v":"make-symbol"},{"t":"s","v":"eq-idx"},{"t":"n","v":33},{"t":"s","v":"current-offset"},{"t":"s","v":"emit-i16"},{"t":"n","v":0},{"t":"n","v":32},{"t":"s","v":"patch-i16"},{"t":"s","v":"skip"},{"t":"s","v":"-"},{"t":"s","v":"+"},{"t":"s","v":"do-clauses"},{"t":"s","v":"rest-clauses"},{"t":"s","v":"end-jump"}]}},{"t":"s","v":"do-clauses"},{"t":"s","v":"rest"}]}},{"t":"s","v":"compile-thread"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,33,14,0,20,3,0,20,4,0,1,5,0,49,2,32,79,0,20,2,0,52,7,0,1,1,8,0,52,6,0,2,33,24,0,20,9,0,20,4,0,20,2,0,52,10,0,1,20,11,0,20,12,0,49,4,32,38,0,20,2,0,52,10,0,1,17,4,20,2,0,52,13,0,1,17,5,20,14,0,20,4,0,20,15,0,20,16,0,20,11,0,20,12,0,49,5,50],"constants":[{"t":"s","v":"Compile (-> val (f1 a) (f2 b)) by desugaring to nested calls."},{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":2},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"first"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"s","v":"rest"},{"t":"s","v":"compile-thread-step"},{"t":"s","v":"val-expr"},{"t":"s","v":"forms"}]}},{"t":"s","v":"compile-thread-step"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,20,0,20,2,0,20,3,0,20,4,0,20,5,0,20,6,0,49,4,32,151,0,20,1,0,52,7,0,1,17,5,20,1,0,52,8,0,1,17,6,20,6,0,6,33,8,0,5,20,9,0,52,0,0,1,17,7,20,11,0,52,10,0,1,33,28,0,20,11,0,52,7,0,1,20,4,0,52,13,0,2,20,11,0,52,8,0,1,52,12,0,2,32,10,0,20,11,0,20,4,0,52,13,0,2,17,8,20,9,0,52,0,0,1,33,20,0,20,2,0,20,3,0,20,14,0,20,5,0,20,15,0,49,4,32,36,0,20,2,0,20,3,0,20,14,0,20,5,0,4,48,4,5,20,16,0,20,3,0,20,14,0,20,9,0,20,5,0,20,6,0,49,5,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"forms"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"val-expr"},{"t":"s","v":"scope"},{"t":"s","v":"tail?"},{"t":"s","v":"first"},{"t":"s","v":"rest"},{"t":"s","v":"rest-forms"},{"t":"s","v":"list?"},{"t":"s","v":"form"},{"t":"s","v":"concat"},{"t":"s","v":"list"},{"t":"s","v":"call-expr"},{"t":"s","v":"is-tail"},{"t":"s","v":"compile-thread-step"}]}},{"t":"s","v":"compile-defcomp"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,3,0,1,4,0,52,2,0,2,1,5,0,48,2,17,3,20,6,0,20,3,0,1,7,0,48,2,5,20,8,0,20,3,0,20,9,0,48,2,5,20,10,0,20,3,0,1,14,0,52,13,0,1,52,12,0,1,20,15,0,52,11,0,2,48,2,5,20,6,0,20,3,0,1,16,0,48,2,5,20,17,0,20,3,0,1,18,0,49,2,50],"constants":[{"t":"s","v":"Compile defcomp/defisland — delegates to runtime via GLOBAL_GET + CALL."},{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"pool"},{"t":"s","v":"eval-defcomp"},{"t":"s","v":"emit-op"},{"t":"n","v":20},{"t":"s","v":"emit-u16"},{"t":"s","v":"name-idx"},{"t":"s","v":"emit-const"},{"t":"s","v":"concat"},{"t":"s","v":"list"},{"t":"s","v":"make-symbol"},{"t":"s","v":"defcomp"},{"t":"s","v":"args"},{"t":"n","v":48},{"t":"s","v":"emit-byte"},{"t":"n","v":1}]}},{"t":"s","v":"compile-defmacro"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,3,0,1,4,0,52,2,0,2,1,5,0,48,2,17,3,20,6,0,20,3,0,1,7,0,48,2,5,20,8,0,20,3,0,20,9,0,48,2,5,20,10,0,20,3,0,1,14,0,52,13,0,1,52,12,0,1,20,15,0,52,11,0,2,48,2,5,20,6,0,20,3,0,1,16,0,48,2,5,20,17,0,20,3,0,1,18,0,49,2,50],"constants":[{"t":"s","v":"Compile defmacro — delegates to runtime via GLOBAL_GET + CALL."},{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"em"},{"t":"s","v":"pool"},{"t":"s","v":"eval-defmacro"},{"t":"s","v":"emit-op"},{"t":"n","v":20},{"t":"s","v":"emit-u16"},{"t":"s","v":"name-idx"},{"t":"s","v":"emit-const"},{"t":"s","v":"concat"},{"t":"s","v":"list"},{"t":"s","v":"make-symbol"},{"t":"s","v":"defmacro"},{"t":"s","v":"args"},{"t":"n","v":48},{"t":"s","v":"emit-byte"},{"t":"n","v":1}]}},{"t":"s","v":"compile-quasiquote"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,20,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"Compile quasiquote inline — walks the template at compile time,\n emitting code that builds the structure at runtime. Unquoted\n expressions are compiled normally (resolving locals/upvalues),\n avoiding the qq-expand-runtime env-lookup limitation."},{"t":"s","v":"compile-qq-expr"},{"t":"s","v":"em"},{"t":"s","v":"expr"},{"t":"s","v":"scope"}]}},{"t":"s","v":"compile-qq-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,4,0,52,3,0,1,1,5,0,52,2,0,2,52,1,0,1,33,14,0,20,6,0,20,7,0,20,4,0,49,2,32,121,0,20,4,0,52,8,0,1,33,26,0,20,9,0,20,7,0,1,10,0,48,2,5,20,11,0,20,7,0,1,12,0,49,2,32,85,0,20,4,0,52,13,0,1,17,3,20,14,0,52,3,0,1,1,15,0,52,2,0,2,6,33,16,0,5,20,16,0,20,14,0,48,1,1,17,0,52,2,0,2,33,25,0,20,18,0,20,7,0,20,4,0,1,20,0,52,19,0,2,20,21,0,4,49,4,32,14,0,20,22,0,20,7,0,20,4,0,20,21,0,49,3,50],"constants":[{"t":"s","v":"Compile a quasiquote sub-expression."},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"list"},{"t":"s","v":"emit-const"},{"t":"s","v":"em"},{"t":"s","v":"empty?"},{"t":"s","v":"emit-op"},{"t":"n","v":64},{"t":"s","v":"emit-u16"},{"t":"n","v":0},{"t":"s","v":"first"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"unquote"},{"t":"s","v":"compile-expr"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"scope"},{"t":"s","v":"compile-qq-list"}]}},{"t":"s","v":"compile-qq-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,51,2,0,20,3,0,52,1,0,2,17,3,20,5,0,52,4,0,1,33,41,0,51,7,0,20,3,0,52,6,0,2,5,20,8,0,20,9,0,1,10,0,48,2,5,20,11,0,20,9,0,20,3,0,52,12,0,1,49,2,32,148,0,1,13,0,17,4,1,13,0,17,5,51,14,0,20,3,0,52,6,0,2,5,20,16,0,1,13,0,52,15,0,2,33,40,0,20,8,0,20,9,0,1,10,0,48,2,5,20,11,0,20,9,0,20,16,0,48,2,5,20,18,0,1,19,0,52,17,0,2,21,18,0,32,1,0,2,5,20,18,0,1,19,0,52,15,0,2,33,58,0,20,20,0,20,9,0,1,22,0,52,21,0,2,1,23,0,48,2,17,6,20,8,0,20,9,0,1,24,0,48,2,5,20,11,0,20,9,0,20,25,0,48,2,5,20,26,0,20,9,0,20,18,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"Compile a quasiquote list. Handles splice-unquote by building\n segments and concatenating them."},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,62,0,5,20,2,0,52,5,0,1,1,6,0,52,4,0,2,6,33,43,0,5,20,2,0,52,7,0,1,52,1,0,1,1,8,0,52,0,0,2,6,33,20,0,5,20,9,0,20,2,0,52,7,0,1,48,1,1,10,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"item"},{"t":"s","v":"list"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"splice-unquote"}]}},{"t":"s","v":"items"},{"t":"s","v":"not"},{"t":"s","v":"has-splice"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"compile-qq-expr"},{"t":"s","v":"em"},{"t":"s","v":"item"},{"t":"s","v":"scope"}]}},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":64},{"t":"s","v":"emit-u16"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,62,0,5,20,2,0,52,5,0,1,1,6,0,52,4,0,2,6,33,43,0,5,20,2,0,52,7,0,1,52,1,0,1,1,8,0,52,0,0,2,6,33,20,0,5,20,9,0,20,2,0,52,7,0,1,48,1,1,10,0,52,0,0,2,33,101,0,20,12,0,1,13,0,52,11,0,2,33,47,0,20,14,0,20,15,0,1,16,0,48,2,5,20,17,0,20,15,0,20,12,0,48,2,5,20,19,0,1,20,0,52,18,0,2,21,19,0,5,1,13,0,21,12,0,32,1,0,2,5,20,21,0,20,15,0,20,2,0,1,20,0,52,22,0,2,20,23,0,4,48,4,5,20,19,0,1,20,0,52,18,0,2,21,19,0,32,28,0,20,24,0,20,15,0,20,2,0,20,23,0,48,3,5,20,12,0,1,20,0,52,18,0,2,21,12,0,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"item"},{"t":"s","v":"list"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"splice-unquote"},{"t":"s","v":">"},{"t":"s","v":"pending"},{"t":"n","v":0},{"t":"s","v":"emit-op"},{"t":"s","v":"em"},{"t":"n","v":64},{"t":"s","v":"emit-u16"},{"t":"s","v":"+"},{"t":"s","v":"segment-count"},{"t":"n","v":1},{"t":"s","v":"compile-expr"},{"t":"s","v":"nth"},{"t":"s","v":"scope"},{"t":"s","v":"compile-qq-expr"}]}},{"t":"s","v":">"},{"t":"s","v":"pending"},{"t":"s","v":"+"},{"t":"s","v":"segment-count"},{"t":"n","v":1},{"t":"s","v":"pool-add"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"s","v":"concat"},{"t":"n","v":52},{"t":"s","v":"concat-idx"},{"t":"s","v":"emit-byte"}]}},{"t":"s","v":"compile-call"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,86,0,5,20,4,0,20,2,0,48,1,17,6,20,7,0,20,8,0,20,9,0,48,2,1,10,0,52,6,0,2,1,11,0,52,0,0,2,52,5,0,1,6,33,42,0,5,20,7,0,20,8,0,20,9,0,48,2,1,10,0,52,6,0,2,1,12,0,52,0,0,2,52,5,0,1,6,33,8,0,5,20,9,0,52,13,0,1,17,5,20,14,0,33,88,0,20,4,0,20,2,0,48,1,17,6,20,16,0,52,15,0,1,17,7,20,17,0,20,18,0,1,19,0,52,6,0,2,20,9,0,48,2,17,8,51,21,0,20,16,0,52,20,0,2,5,20,22,0,20,18,0,1,23,0,48,2,5,20,24,0,20,18,0,20,25,0,48,2,5,20,26,0,20,18,0,20,27,0,49,2,32,90,0,20,28,0,20,18,0,20,2,0,20,8,0,4,48,4,5,51,21,0,20,16,0,52,20,0,2,5,20,29,0,33,30,0,20,22,0,20,18,0,1,30,0,48,2,5,20,26,0,20,18,0,20,16,0,52,15,0,1,49,2,32,27,0,20,22,0,20,18,0,1,31,0,48,2,5,20,26,0,20,18,0,20,16,0,52,15,0,1,49,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"not"},{"t":"s","v":"get"},{"t":"s","v":"scope-resolve"},{"t":"s","v":"scope"},{"t":"s","v":"name"},{"t":"s","v":"type"},{"t":"s","v":"local"},{"t":"s","v":"upvalue"},{"t":"s","v":"primitive?"},{"t":"s","v":"is-prim"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"pool-add"},{"t":"s","v":"em"},{"t":"s","v":"pool"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,4,49,4,50],"constants":[{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"a"},{"t":"s","v":"scope"}]}},{"t":"s","v":"emit-op"},{"t":"n","v":52},{"t":"s","v":"emit-u16"},{"t":"s","v":"name-idx"},{"t":"s","v":"emit-byte"},{"t":"s","v":"argc"},{"t":"s","v":"compile-expr"},{"t":"s","v":"tail?"},{"t":"n","v":49},{"t":"n","v":48}]}},{"t":"s","v":"compile"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,48,0,17,1,20,2,0,2,48,1,17,2,20,3,0,20,4,0,20,5,0,20,6,0,4,48,4,5,20,7,0,20,4,0,1,8,0,48,2,5,1,9,0,20,4,0,1,11,0,52,10,0,2,1,12,0,52,10,0,2,1,13,0,20,4,0,1,13,0,52,10,0,2,65,2,0,50],"constants":[{"t":"s","v":"Compile a single SX expression to a bytecode module."},{"t":"s","v":"make-emitter"},{"t":"s","v":"make-scope"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"expr"},{"t":"s","v":"scope"},{"t":"s","v":"emit-op"},{"t":"n","v":50},{"t":"s","v":"constants"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"s","v":"entries"},{"t":"s","v":"bytecode"}]}},{"t":"s","v":"compile-module"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,48,0,17,1,20,2,0,2,48,1,17,2,51,4,0,20,6,0,52,5,0,1,52,3,0,2,5,20,7,0,20,8,0,20,6,0,52,9,0,1,20,10,0,4,48,4,5,20,11,0,20,8,0,1,12,0,48,2,5,1,13,0,20,8,0,1,15,0,52,14,0,2,1,16,0,52,14,0,2,1,17,0,20,8,0,1,17,0,52,14,0,2,65,2,0,50],"constants":[{"t":"s","v":"Compile a list of top-level expressions to a bytecode module."},{"t":"s","v":"make-emitter"},{"t":"s","v":"make-scope"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,4,48,4,5,20,4,0,20,1,0,1,5,0,49,2,50],"constants":[{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"expr"},{"t":"s","v":"scope"},{"t":"s","v":"emit-op"},{"t":"n","v":5}]}},{"t":"s","v":"init"},{"t":"s","v":"exprs"},{"t":"s","v":"compile-expr"},{"t":"s","v":"em"},{"t":"s","v":"last"},{"t":"s","v":"scope"},{"t":"s","v":"emit-op"},{"t":"n","v":50},{"t":"s","v":"constants"},{"t":"s","v":"get"},{"t":"s","v":"pool"},{"t":"s","v":"entries"},{"t":"s","v":"bytecode"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/core-signals.sxbc.json b/shared/static/wasm/sx/core-signals.sxbc.json new file mode 100644 index 00000000..9cbb27b2 --- /dev/null +++ b/shared/static/wasm/sx/core-signals.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"5de6df90544e5d43","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,1,31,0,128,30,0,5,52,33,0,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,50],"constants":[{"t":"s","v":"make-signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,3,1,2,0,20,2,0,1,3,0,52,4,0,0,1,5,0,52,4,0,0,52,0,0,8,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"__signal"},{"t":"s","v":"value"},{"t":"s","v":"subscribers"},{"t":"s","v":"list"},{"t":"s","v":"deps"}]}},{"t":"s","v":"signal?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,6,33,11,0,5,20,1,0,1,3,0,52,2,0,2,50],"constants":[{"t":"s","v":"dict?"},{"t":"s","v":"x"},{"t":"s","v":"has-key?"},{"t":"s","v":"__signal"}]}},{"t":"s","v":"signal-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"s"},{"t":"s","v":"value"}]}},{"t":"s","v":"signal-set-value!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,20,3,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"s"},{"t":"s","v":"value"},{"t":"s","v":"v"}]}},{"t":"s","v":"signal-subscribers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"s"},{"t":"s","v":"subscribers"}]}},{"t":"s","v":"signal-add-sub!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,1,4,0,52,2,0,2,20,5,0,52,1,0,2,52,0,0,1,33,34,0,20,3,0,1,4,0,20,3,0,1,4,0,52,2,0,2,20,5,0,52,8,0,1,52,7,0,2,52,6,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"get"},{"t":"s","v":"s"},{"t":"s","v":"subscribers"},{"t":"s","v":"f"},{"t":"s","v":"dict-set!"},{"t":"s","v":"append"},{"t":"s","v":"list"}]}},{"t":"s","v":"signal-remove-sub!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,51,4,0,20,1,0,1,2,0,52,5,0,2,52,3,0,2,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"s"},{"t":"s","v":"subscribers"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"sub"},{"t":"s","v":"f"}]}},{"t":"s","v":"get"}]}},{"t":"s","v":"signal-deps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"s"},{"t":"s","v":"deps"}]}},{"t":"s","v":"signal-set-deps!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,20,2,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"s"},{"t":"s","v":"deps"}]}},{"t":"s","v":"signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"make-signal"},{"t":"s","v":"initial-value"}]}},{"t":"s","v":"deref"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,33,6,0,20,2,0,32,98,0,20,3,0,1,4,0,2,48,2,17,1,20,5,0,33,71,0,20,5,0,1,7,0,52,6,0,2,17,2,20,5,0,1,8,0,52,6,0,2,17,3,20,10,0,20,2,0,52,9,0,2,52,0,0,1,33,26,0,20,11,0,20,10,0,20,2,0,48,2,5,20,12,0,20,2,0,20,13,0,48,2,32,1,0,2,32,1,0,2,5,20,14,0,20,2,0,49,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"signal?"},{"t":"s","v":"s"},{"t":"s","v":"context"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"ctx"},{"t":"s","v":"get"},{"t":"s","v":"deps"},{"t":"s","v":"notify"},{"t":"s","v":"contains?"},{"t":"s","v":"dep-list"},{"t":"s","v":"append!"},{"t":"s","v":"signal-add-sub!"},{"t":"s","v":"notify-fn"},{"t":"s","v":"signal-value"}]}},{"t":"s","v":"reset!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,54,0,20,2,0,20,1,0,48,1,17,2,20,5,0,20,6,0,52,4,0,2,52,3,0,1,33,23,0,20,7,0,20,1,0,20,6,0,48,2,5,20,8,0,20,1,0,49,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"s"},{"t":"s","v":"signal-value"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"old"},{"t":"s","v":"value"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"notify-subscribers"}]}},{"t":"s","v":"swap!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,78,0,20,2,0,20,1,0,48,1,17,3,20,3,0,20,5,0,20,7,0,20,8,0,52,6,0,2,52,4,0,2,48,1,17,4,20,7,0,20,11,0,52,10,0,2,52,9,0,1,33,23,0,20,12,0,20,1,0,20,11,0,48,2,5,20,13,0,20,1,0,49,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"s"},{"t":"s","v":"signal-value"},{"t":"s","v":"trampoline"},{"t":"s","v":"apply"},{"t":"s","v":"f"},{"t":"s","v":"cons"},{"t":"s","v":"old"},{"t":"s","v":"args"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"new-val"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"notify-subscribers"}]}},{"t":"s","v":"computed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,2,48,1,17,1,52,1,0,0,17,2,2,17,3,51,2,0,17,4,20,3,0,48,0,5,20,4,0,51,5,0,48,1,5,20,6,0,50],"constants":[{"t":"s","v":"make-signal"},{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,5,20,4,0,20,3,0,52,5,0,0,48,2,5,1,7,0,52,5,0,0,1,8,0,20,9,0,52,6,0,4,17,0,20,10,0,1,11,0,20,12,0,48,2,5,20,13,0,20,14,0,2,48,2,17,1,20,15,0,1,11,0,48,1,5,20,4,0,20,3,0,20,12,0,1,7,0,52,16,0,2,48,2,5,20,17,0,20,3,0,48,1,17,2,20,18,0,20,3,0,20,19,0,48,2,5,20,22,0,20,19,0,52,21,0,2,52,20,0,1,33,11,0,20,23,0,20,3,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"},{"t":"s","v":"dep"},{"t":"s","v":"recompute"}]}},{"t":"s","v":"signal-deps"},{"t":"s","v":"s"},{"t":"s","v":"signal-set-deps!"},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"deps"},{"t":"s","v":"notify"},{"t":"s","v":"recompute"},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"ctx"},{"t":"s","v":"cek-call"},{"t":"s","v":"compute-fn"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"get"},{"t":"s","v":"signal-value"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"new-val"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"old"},{"t":"s","v":"notify-subscribers"}]}},{"t":"s","v":"recompute"},{"t":"s","v":"register-in-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dispose-computed"},{"t":"s","v":"s"}]}},{"t":"s","v":"s"}]}},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,1,4,17,2,2,17,3,51,1,0,17,4,20,2,0,48,0,5,51,3,0,17,5,20,4,0,20,5,0,48,1,5,20,5,0,50],"constants":[{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,128,0,20,2,0,33,12,0,20,3,0,20,2,0,2,48,2,32,1,0,2,5,51,5,0,20,6,0,52,4,0,2,5,52,7,0,0,21,6,0,5,1,6,0,52,7,0,0,1,9,0,20,10,0,52,8,0,4,17,0,20,11,0,1,12,0,20,13,0,48,2,5,20,3,0,20,14,0,2,48,2,17,1,20,15,0,1,12,0,48,1,5,20,13,0,1,6,0,52,16,0,2,21,6,0,5,20,17,0,20,18,0,48,1,33,9,0,20,18,0,21,2,0,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"disposed"},{"t":"s","v":"cleanup-fn"},{"t":"s","v":"cek-call"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"},{"t":"s","v":"dep"},{"t":"s","v":"run-effect"}]}},{"t":"s","v":"deps"},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"notify"},{"t":"s","v":"run-effect"},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"ctx"},{"t":"s","v":"effect-fn"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"get"},{"t":"s","v":"callable?"},{"t":"s","v":"result"}]}},{"t":"s","v":"run-effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[3,21,0,0,5,20,1,0,33,12,0,20,2,0,20,1,0,2,48,2,32,1,0,2,5,51,4,0,20,5,0,52,3,0,2,5,52,6,0,0,21,5,0,50],"constants":[{"t":"s","v":"disposed"},{"t":"s","v":"cleanup-fn"},{"t":"s","v":"cek-call"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"},{"t":"s","v":"dep"},{"t":"s","v":"run-effect"}]}},{"t":"s","v":"deps"},{"t":"s","v":"list"}]}},{"t":"s","v":"register-in-scope"},{"t":"s","v":"dispose-fn"}]}},{"t":"s","v":"*batch-depth*"},{"t":"n","v":0},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"list"},{"t":"s","v":"batch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,21,1,0,5,20,3,0,20,4,0,2,48,2,5,20,1,0,1,2,0,52,5,0,2,21,1,0,5,20,1,0,1,7,0,52,6,0,2,33,49,0,20,8,0,17,1,52,9,0,0,21,8,0,5,52,9,0,0,17,2,52,9,0,0,17,3,51,11,0,20,12,0,52,10,0,2,5,51,13,0,20,14,0,52,10,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"*batch-depth*"},{"t":"n","v":1},{"t":"s","v":"cek-call"},{"t":"s","v":"thunk"},{"t":"s","v":"-"},{"t":"s","v":"="},{"t":"n","v":0},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,26,0,20,4,0,20,2,0,20,3,0,48,2,5,20,4,0,20,5,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"seen"},{"t":"s","v":"sub"},{"t":"s","v":"append!"},{"t":"s","v":"pending"}]}},{"t":"s","v":"signal-subscribers"},{"t":"s","v":"s"}]}},{"t":"s","v":"queue"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,49,0,50],"constants":[{"t":"s","v":"sub"}]}},{"t":"s","v":"pending"}]}},{"t":"s","v":"notify-subscribers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,35,0,20,5,0,20,6,0,52,4,0,2,52,3,0,1,33,14,0,20,7,0,20,5,0,20,6,0,49,2,32,1,0,2,32,8,0,20,8,0,20,6,0,49,1,50],"constants":[{"t":"s","v":">"},{"t":"s","v":"*batch-depth*"},{"t":"n","v":0},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"s"},{"t":"s","v":"append!"},{"t":"s","v":"flush-subscribers"}]}},{"t":"s","v":"flush-subscribers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"sub"}]}},{"t":"s","v":"signal-subscribers"},{"t":"s","v":"s"}]}},{"t":"s","v":"dispose-computed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,31,0,51,3,0,20,4,0,20,1,0,48,1,52,2,0,2,5,20,5,0,20,1,0,52,6,0,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"s"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"},{"t":"s","v":"dep"}]}},{"t":"s","v":"signal-deps"},{"t":"s","v":"signal-set-deps!"},{"t":"s","v":"list"}]}},{"t":"s","v":"with-island-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,48,2,5,20,3,0,48,0,17,2,20,4,0,1,1,0,48,1,5,20,5,0,50],"constants":[{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"scope-fn"},{"t":"s","v":"body-fn"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"result"}]}},{"t":"s","v":"register-in-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,33,18,0,20,3,0,20,2,0,20,5,0,52,4,0,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"scope-peek"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"collector"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"disposable"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/cssx.sxbc.json b/shared/static/wasm/sx/cssx.sxbc.json new file mode 100644 index 00000000..92323d04 --- /dev/null +++ b/shared/static/wasm/sx/cssx.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"31b5dc4f4abbfe33","module":{"arity":0,"bytecode":[1,1,0,1,2,0,1,3,0,1,4,0,1,5,0,65,2,0,1,6,0,1,2,0,1,7,0,1,4,0,1,8,0,65,2,0,1,9,0,1,2,0,1,10,0,1,4,0,1,11,0,65,2,0,1,12,0,1,2,0,1,13,0,1,4,0,1,14,0,65,2,0,1,15,0,1,2,0,1,16,0,1,4,0,1,17,0,65,2,0,1,18,0,1,2,0,1,19,0,1,4,0,1,20,0,65,2,0,1,21,0,1,2,0,1,22,0,1,4,0,1,22,0,65,2,0,1,23,0,1,2,0,1,24,0,1,4,0,1,25,0,65,2,0,1,26,0,1,2,0,1,27,0,1,4,0,1,28,0,65,2,0,1,29,0,1,2,0,1,30,0,1,4,0,1,5,0,65,2,0,1,31,0,1,2,0,1,22,0,1,4,0,1,22,0,65,2,0,1,32,0,1,2,0,1,33,0,1,4,0,1,34,0,65,2,0,1,35,0,1,2,0,1,36,0,1,4,0,1,37,0,65,2,0,1,38,0,1,2,0,1,39,0,1,4,0,1,22,0,65,2,0,1,40,0,1,2,0,1,10,0,1,4,0,1,41,0,65,2,0,1,42,0,1,2,0,1,43,0,1,4,0,1,44,0,65,2,0,1,45,0,1,2,0,1,25,0,1,4,0,1,46,0,65,2,0,1,47,0,1,2,0,1,48,0,1,4,0,1,49,0,65,2,0,1,50,0,1,2,0,1,51,0,1,4,0,1,52,0,65,2,0,1,53,0,1,2,0,1,13,0,1,4,0,1,54,0,65,2,0,1,55,0,1,2,0,1,25,0,1,4,0,1,56,0,65,2,0,1,57,0,1,2,0,1,22,0,1,4,0,1,22,0,65,2,0,1,58,0,1,2,0,1,59,0,1,4,0,1,60,0,65,2,0,65,23,0,128,0,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,5,1,68,0,1,69,0,1,70,0,1,71,0,1,72,0,1,73,0,65,3,0,128,67,0,5,1,75,0,1,76,0,1,77,0,1,78,0,1,79,0,1,80,0,1,81,0,1,82,0,1,83,0,1,84,0,1,85,0,1,86,0,1,87,0,1,88,0,1,89,0,1,90,0,1,91,0,1,92,0,1,93,0,1,94,0,1,95,0,1,96,0,1,97,0,1,98,0,1,99,0,1,100,0,1,101,0,1,102,0,65,14,0,128,74,0,5,1,104,0,1,105,0,1,106,0,1,107,0,1,108,0,1,109,0,1,110,0,1,111,0,1,112,0,1,113,0,1,114,0,1,115,0,1,116,0,1,117,0,1,118,0,1,119,0,1,120,0,1,121,0,1,122,0,1,123,0,1,124,0,1,125,0,1,126,0,1,127,0,1,128,0,1,129,0,65,13,0,128,103,0,5,1,131,0,1,132,0,1,133,0,1,134,0,1,135,0,1,136,0,1,137,0,1,138,0,1,31,0,1,139,0,1,140,0,1,141,0,1,142,0,1,143,0,1,144,0,1,145,0,1,146,0,1,147,0,65,9,0,128,130,0,5,1,149,0,1,150,0,1,151,0,1,152,0,1,153,0,1,154,0,65,3,0,128,148,0,5,1,156,0,3,1,157,0,3,1,158,0,3,1,159,0,3,65,4,0,128,155,0,5,1,161,0,1,161,0,1,162,0,1,162,0,1,163,0,1,163,0,1,164,0,1,164,0,1,165,0,1,166,0,1,167,0,1,167,0,1,168,0,1,168,0,65,7,0,128,160,0,5,1,104,0,1,170,0,1,106,0,1,171,0,1,108,0,1,172,0,1,110,0,1,173,0,1,114,0,1,174,0,1,175,0,1,176,0,1,177,0,1,178,0,1,116,0,1,179,0,1,180,0,1,181,0,1,120,0,1,182,0,1,122,0,1,183,0,1,124,0,1,184,0,1,128,0,1,185,0,1,166,0,1,166,0,1,186,0,1,187,0,65,15,0,128,169,0,5,1,110,0,1,189,0,1,114,0,1,190,0,1,177,0,1,191,0,1,122,0,1,192,0,1,124,0,1,193,0,65,5,0,128,188,0,5,1,195,0,1,196,0,1,197,0,1,198,0,1,199,0,1,200,0,1,201,0,1,202,0,1,203,0,1,204,0,1,205,0,1,206,0,1,207,0,1,208,0,65,7,0,128,194,0,5,51,210,0,128,209,0,5,51,212,0,128,211,0,5,51,214,0,128,213,0,5,51,216,0,128,215,0,5,51,218,0,128,217,0,5,20,219,0,1,220,0,48,1,5,20,219,0,1,221,0,48,1,50],"constants":[{"t":"s","v":"colour-bases"},{"t":"s","v":"orange"},{"t":"s","v":"s"},{"t":"n","v":95},{"t":"s","v":"h"},{"t":"n","v":25},{"t":"s","v":"cyan"},{"t":"n","v":94},{"t":"n","v":188},{"t":"s","v":"sky"},{"t":"n","v":89},{"t":"n","v":199},{"t":"s","v":"pink"},{"t":"n","v":81},{"t":"n","v":330},{"t":"s","v":"zinc"},{"t":"n","v":5},{"t":"n","v":240},{"t":"s","v":"amber"},{"t":"n","v":92},{"t":"n","v":38},{"t":"s","v":"neutral"},{"t":"n","v":0},{"t":"s","v":"lime"},{"t":"n","v":78},{"t":"n","v":84},{"t":"s","v":"violet"},{"t":"n","v":70},{"t":"n","v":263},{"t":"s","v":"stone"},{"t":"n","v":6},{"t":"s","v":"black"},{"t":"s","v":"teal"},{"t":"n","v":80},{"t":"n","v":173},{"t":"s","v":"gray"},{"t":"n","v":9},{"t":"n","v":220},{"t":"s","v":"red"},{"t":"n","v":72},{"t":"s","v":"rose"},{"t":"n","v":350},{"t":"s","v":"blue"},{"t":"n","v":91},{"t":"n","v":217},{"t":"s","v":"emerald"},{"t":"n","v":160},{"t":"s","v":"green"},{"t":"n","v":71},{"t":"n","v":142},{"t":"s","v":"yellow"},{"t":"n","v":96},{"t":"n","v":48},{"t":"s","v":"purple"},{"t":"n","v":271},{"t":"s","v":"indigo"},{"t":"n","v":239},{"t":"s","v":"white"},{"t":"s","v":"slate"},{"t":"n","v":16},{"t":"n","v":215},{"t":"s","v":"lerp"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,20,5,0,20,1,0,52,4,0,2,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"a"},{"t":"s","v":"*"},{"t":"s","v":"t"},{"t":"s","v":"-"},{"t":"s","v":"b"}]}},{"t":"s","v":"shade-to-lightness"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,24,0,20,3,0,1,4,0,1,5,0,20,1,0,1,2,0,52,6,0,2,49,3,32,187,1,20,1,0,1,4,0,52,0,0,2,33,31,0,20,3,0,1,5,0,1,7,0,20,1,0,1,2,0,52,8,0,2,1,2,0,52,6,0,2,49,3,32,143,1,20,1,0,1,9,0,52,0,0,2,33,31,0,20,3,0,1,7,0,1,10,0,20,1,0,1,4,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,99,1,20,1,0,1,11,0,52,0,0,2,33,31,0,20,3,0,1,10,0,1,12,0,20,1,0,1,9,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,55,1,20,1,0,1,13,0,52,0,0,2,33,31,0,20,3,0,1,12,0,1,14,0,20,1,0,1,11,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,11,1,20,1,0,1,15,0,52,0,0,2,33,31,0,20,3,0,1,14,0,1,16,0,20,1,0,1,13,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,223,0,20,1,0,1,17,0,52,0,0,2,33,31,0,20,3,0,1,16,0,1,18,0,20,1,0,1,15,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,179,0,20,1,0,1,19,0,52,0,0,2,33,31,0,20,3,0,1,18,0,1,20,0,20,1,0,1,17,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,135,0,20,1,0,1,21,0,52,0,0,2,33,31,0,20,3,0,1,20,0,1,22,0,20,1,0,1,19,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,91,0,20,1,0,1,23,0,52,0,0,2,33,31,0,20,3,0,1,22,0,1,24,0,20,1,0,1,21,0,52,8,0,2,1,4,0,52,6,0,2,49,3,32,47,0,20,1,0,1,25,0,52,0,0,2,33,31,0,20,3,0,1,24,0,1,26,0,20,1,0,1,23,0,52,8,0,2,1,2,0,52,6,0,2,49,3,32,3,0,1,26,0,50],"constants":[{"t":"s","v":"<="},{"t":"s","v":"shade"},{"t":"n","v":50},{"t":"s","v":"lerp"},{"t":"n","v":100},{"t":"n","v":97},{"t":"s","v":"/"},{"t":"n","v":93},{"t":"s","v":"-"},{"t":"n","v":200},{"t":"n","v":87},{"t":"n","v":300},{"t":"n","v":77},{"t":"n","v":400},{"t":"n","v":64},{"t":"n","v":500},{"t":"n","v":53},{"t":"n","v":600},{"t":"n","v":45},{"t":"n","v":700},{"t":"n","v":38},{"t":"n","v":800},{"t":"n","v":30},{"t":"n","v":900},{"t":"n","v":21},{"t":"n","v":950},{"t":"n","v":13}]}},{"t":"s","v":"colour"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,2,20,4,0,52,3,0,1,33,6,0,20,2,0,32,63,0,20,4,0,1,5,0,52,0,0,2,17,3,20,4,0,1,6,0,52,0,0,2,17,4,20,7,0,20,8,0,48,1,17,5,1,10,0,20,5,0,1,11,0,20,6,0,1,12,0,20,14,0,52,13,0,1,1,15,0,52,9,0,7,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"colour-bases"},{"t":"s","v":"name"},{"t":"s","v":"nil?"},{"t":"s","v":"base"},{"t":"s","v":"h"},{"t":"s","v":"s"},{"t":"s","v":"shade-to-lightness"},{"t":"s","v":"shade"},{"t":"s","v":"str"},{"t":"s","v":"hsl("},{"t":"s","v":","},{"t":"s","v":"%,"},{"t":"s","v":"round"},{"t":"s","v":"l"},{"t":"s","v":"%)"}]}},{"t":"s","v":"cssx-colour-props"},{"t":"s","v":"bg"},{"t":"s","v":"background-color"},{"t":"s","v":"border"},{"t":"s","v":"border-color"},{"t":"s","v":"text"},{"t":"s","v":"color"},{"t":"s","v":"cssx-spacing-props"},{"t":"s","v":"ml"},{"t":"s","v":"margin-left:{v}"},{"t":"s","v":"mr"},{"t":"s","v":"margin-right:{v}"},{"t":"s","v":"mt"},{"t":"s","v":"margin-top:{v}"},{"t":"s","v":"mb"},{"t":"s","v":"margin-bottom:{v}"},{"t":"s","v":"pl"},{"t":"s","v":"padding-left:{v}"},{"t":"s","v":"m"},{"t":"s","v":"margin:{v}"},{"t":"s","v":"my"},{"t":"s","v":"margin-top:{v};margin-bottom:{v}"},{"t":"s","v":"px"},{"t":"s","v":"padding-left:{v};padding-right:{v}"},{"t":"s","v":"pb"},{"t":"s","v":"padding-bottom:{v}"},{"t":"s","v":"pr"},{"t":"s","v":"padding-right:{v}"},{"t":"s","v":"p"},{"t":"s","v":"padding:{v}"},{"t":"s","v":"py"},{"t":"s","v":"padding-top:{v};padding-bottom:{v}"},{"t":"s","v":"pt"},{"t":"s","v":"padding-top:{v}"},{"t":"s","v":"mx"},{"t":"s","v":"margin-left:{v};margin-right:{v}"},{"t":"s","v":"cssx-sizes"},{"t":"s","v":"xs"},{"t":"s","v":"font-size:0.75rem;line-height:1rem"},{"t":"s","v":"3xl"},{"t":"s","v":"font-size:1.875rem;line-height:2.25rem"},{"t":"s","v":"7xl"},{"t":"s","v":"font-size:4.5rem;line-height:1"},{"t":"s","v":"sm"},{"t":"s","v":"font-size:0.875rem;line-height:1.25rem"},{"t":"s","v":"8xl"},{"t":"s","v":"font-size:6rem;line-height:1"},{"t":"s","v":"xl"},{"t":"s","v":"font-size:1.25rem;line-height:1.75rem"},{"t":"s","v":"6xl"},{"t":"s","v":"font-size:3.75rem;line-height:1"},{"t":"s","v":"9xl"},{"t":"s","v":"font-size:8rem;line-height:1"},{"t":"s","v":"5xl"},{"t":"s","v":"font-size:3rem;line-height:1"},{"t":"s","v":"lg"},{"t":"s","v":"font-size:1.125rem;line-height:1.75rem"},{"t":"s","v":"2xl"},{"t":"s","v":"font-size:1.5rem;line-height:2rem"},{"t":"s","v":"base"},{"t":"s","v":"font-size:1rem;line-height:1.5rem"},{"t":"s","v":"4xl"},{"t":"s","v":"font-size:2.25rem;line-height:2.5rem"},{"t":"s","v":"cssx-weights"},{"t":"s","v":"light"},{"t":"s","v":"300"},{"t":"s","v":"semibold"},{"t":"s","v":"600"},{"t":"s","v":"bold"},{"t":"s","v":"700"},{"t":"s","v":"extrabold"},{"t":"s","v":"800"},{"t":"s","v":"900"},{"t":"s","v":"extralight"},{"t":"s","v":"200"},{"t":"s","v":"thin"},{"t":"s","v":"100"},{"t":"s","v":"medium"},{"t":"s","v":"500"},{"t":"s","v":"normal"},{"t":"s","v":"400"},{"t":"s","v":"cssx-families"},{"t":"s","v":"mono"},{"t":"s","v":"ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace"},{"t":"s","v":"sans"},{"t":"s","v":"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif"},{"t":"s","v":"serif"},{"t":"s","v":"ui-serif,Georgia,Cambria,\"Times New Roman\",Times,serif"},{"t":"s","v":"cssx-alignments"},{"t":"s","v":"center"},{"t":"s","v":"left"},{"t":"s","v":"right"},{"t":"s","v":"justify"},{"t":"s","v":"cssx-displays"},{"t":"s","v":"flex"},{"t":"s","v":"grid"},{"t":"s","v":"inline-block"},{"t":"s","v":"inline"},{"t":"s","v":"hidden"},{"t":"s","v":"none"},{"t":"s","v":"block"},{"t":"s","v":"inline-flex"},{"t":"s","v":"cssx-max-widths"},{"t":"s","v":"20rem"},{"t":"s","v":"48rem"},{"t":"s","v":"80rem"},{"t":"s","v":"24rem"},{"t":"s","v":"36rem"},{"t":"s","v":"full"},{"t":"s","v":"100%"},{"t":"s","v":"md"},{"t":"s","v":"28rem"},{"t":"s","v":"72rem"},{"t":"s","v":"prose"},{"t":"s","v":"65ch"},{"t":"s","v":"64rem"},{"t":"s","v":"32rem"},{"t":"s","v":"42rem"},{"t":"s","v":"56rem"},{"t":"s","v":"screen"},{"t":"s","v":"100vw"},{"t":"s","v":"cssx-breakpoints"},{"t":"s","v":"640px"},{"t":"s","v":"1280px"},{"t":"s","v":"768px"},{"t":"s","v":"1024px"},{"t":"s","v":"1536px"},{"t":"s","v":"cssx-states"},{"t":"s","v":"focus"},{"t":"s","v":":focus"},{"t":"s","v":"first"},{"t":"s","v":":first-child"},{"t":"s","v":"hover"},{"t":"s","v":":hover"},{"t":"s","v":"focus-visible"},{"t":"s","v":":focus-visible"},{"t":"s","v":"last"},{"t":"s","v":":last-child"},{"t":"s","v":"active"},{"t":"s","v":":active"},{"t":"s","v":"focus-within"},{"t":"s","v":":focus-within"},{"t":"s","v":"cssx-spacing-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,1,2,0,32,79,0,20,1,0,1,3,0,52,0,0,2,33,6,0,1,4,0,32,60,0,20,1,0,1,5,0,52,0,0,2,33,6,0,1,6,0,32,41,0,20,1,0,2,52,7,0,2,17,1,20,9,0,52,8,0,1,33,4,0,2,32,17,0,20,9,0,1,12,0,52,11,0,2,1,13,0,52,10,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"v"},{"t":"s","v":"auto"},{"t":"s","v":"px"},{"t":"s","v":"1px"},{"t":"s","v":"0"},{"t":"s","v":"0px"},{"t":"s","v":"parse-int"},{"t":"s","v":"nil?"},{"t":"s","v":"n"},{"t":"s","v":"str"},{"t":"s","v":"*"},{"t":"n","v":0.25},{"t":"s","v":"rem"}]}},{"t":"s","v":"cssx-template"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,4,0,1,5,0,52,3,0,2,33,6,0,20,1,0,32,121,0,20,1,0,1,5,0,20,4,0,52,7,0,3,20,8,0,20,1,0,20,4,0,1,10,0,52,9,0,2,20,1,0,52,11,0,1,52,7,0,3,52,6,0,3,17,3,20,12,0,1,2,0,52,0,0,2,17,4,20,13,0,1,5,0,52,3,0,2,33,6,0,20,12,0,32,44,0,20,12,0,1,5,0,20,13,0,52,7,0,3,20,8,0,20,12,0,20,13,0,1,10,0,52,9,0,2,20,12,0,52,11,0,1,52,7,0,3,52,6,0,3,50],"constants":[{"t":"s","v":"index-of"},{"t":"s","v":"tmpl"},{"t":"s","v":"{v}"},{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"str"},{"t":"s","v":"substring"},{"t":"s","v":"v"},{"t":"s","v":"+"},{"t":"n","v":3},{"t":"s","v":"len"},{"t":"s","v":"result"},{"t":"s","v":"j"}]}},{"t":"s","v":"cssx-resolve"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,4,0,52,3,0,1,33,4,0,2,32,22,7,20,4,0,52,5,0,1,17,2,20,4,0,1,7,0,52,6,0,2,17,3,20,9,0,20,10,0,52,8,0,2,6,33,91,0,5,20,13,0,52,12,0,1,1,14,0,52,11,0,2,6,33,72,0,5,20,13,0,52,18,0,1,2,52,17,0,2,52,16,0,1,52,15,0,1,6,33,47,0,5,20,19,0,1,2,0,20,13,0,1,21,0,20,13,0,52,12,0,1,1,7,0,52,2,0,2,52,6,0,3,52,20,0,2,52,8,0,2,52,16,0,1,52,15,0,1,33,85,0,20,9,0,20,10,0,52,8,0,2,17,4,1,2,0,20,13,0,1,21,0,20,13,0,52,12,0,1,1,7,0,52,2,0,2,52,6,0,3,52,20,0,2,17,5,20,13,0,52,18,0,1,1,21,0,52,17,0,2,17,6,20,23,0,1,24,0,20,25,0,20,26,0,20,27,0,48,2,52,22,0,3,32,64,6,20,10,0,1,29,0,52,28,0,2,6,33,42,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,6,33,23,0,5,20,30,0,20,13,0,52,5,0,1,52,8,0,2,52,16,0,1,52,15,0,1,33,17,0,20,30,0,20,13,0,52,5,0,1,52,8,0,2,32,244,5,20,10,0,1,29,0,52,28,0,2,6,33,34,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,6,33,15,0,5,20,31,0,20,13,0,52,5,0,1,52,8,0,2,33,17,0,1,32,0,20,13,0,52,5,0,1,52,22,0,2,32,176,5,20,10,0,1,33,0,52,28,0,2,6,33,42,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,6,33,23,0,5,20,34,0,20,13,0,52,5,0,1,52,8,0,2,52,16,0,1,52,15,0,1,33,24,0,1,35,0,20,34,0,20,13,0,52,5,0,1,52,8,0,2,52,22,0,2,32,93,5,20,10,0,1,33,0,52,28,0,2,6,33,42,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,6,33,23,0,5,20,36,0,20,13,0,52,5,0,1,52,8,0,2,52,16,0,1,52,15,0,1,33,24,0,1,37,0,20,36,0,20,13,0,52,5,0,1,52,8,0,2,52,22,0,2,32,10,5,20,38,0,20,10,0,52,8,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,54,0,20,38,0,20,10,0,52,8,0,2,17,4,20,39,0,20,13,0,52,5,0,1,48,1,17,5,20,40,0,52,16,0,1,33,4,0,2,32,11,0,20,41,0,20,42,0,20,40,0,49,2,32,180,4,20,4,0,52,12,0,1,1,7,0,52,28,0,2,6,33,19,0,5,20,43,0,20,10,0,52,8,0,2,52,16,0,1,52,15,0,1,33,20,0,1,44,0,20,43,0,20,10,0,52,8,0,2,52,22,0,2,32,120,4,20,4,0,52,12,0,1,1,14,0,52,28,0,2,6,33,19,0,5,20,43,0,20,1,0,52,8,0,2,52,16,0,1,52,15,0,1,33,20,0,1,44,0,20,43,0,20,1,0,52,8,0,2,52,22,0,2,32,60,4,20,10,0,1,45,0,52,28,0,2,6,33,34,0,5,20,13,0,52,12,0,1,1,14,0,52,11,0,2,6,33,15,0,5,20,13,0,52,5,0,1,1,46,0,52,28,0,2,33,58,0,1,2,0,20,13,0,1,7,0,52,6,0,2,52,20,0,2,17,4,20,47,0,20,48,0,52,8,0,2,17,5,20,49,0,52,16,0,1,33,4,0,2,32,10,0,1,50,0,20,49,0,52,22,0,2,32,207,3,20,10,0,1,51,0,52,28,0,2,33,204,0,20,13,0,52,3,0,1,33,6,0,1,52,0,32,185,0,20,13,0,52,5,0,1,1,53,0,52,28,0,2,33,6,0,1,54,0,32,162,0,20,13,0,52,5,0,1,1,55,0,52,28,0,2,33,6,0,1,56,0,32,139,0,20,13,0,52,5,0,1,1,57,0,52,28,0,2,33,6,0,1,58,0,32,116,0,20,13,0,52,5,0,1,1,59,0,52,28,0,2,33,6,0,1,60,0,32,93,0,20,13,0,52,5,0,1,1,61,0,52,28,0,2,33,6,0,1,62,0,32,70,0,20,13,0,52,5,0,1,1,63,0,52,28,0,2,33,6,0,1,64,0,32,47,0,20,13,0,52,5,0,1,1,65,0,52,28,0,2,33,6,0,1,66,0,32,24,0,20,13,0,52,5,0,1,1,67,0,52,28,0,2,33,6,0,1,68,0,32,1,0,2,32,246,2,20,10,0,1,69,0,52,28,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,48,0,20,13,0,52,5,0,1,2,52,17,0,2,17,4,20,70,0,52,16,0,1,33,4,0,2,32,17,0,1,71,0,20,70,0,1,73,0,52,72,0,2,52,22,0,2,32,166,2,20,10,0,1,46,0,52,28,0,2,6,34,11,0,5,20,10,0,1,74,0,52,28,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,2,1,20,10,0,1,46,0,52,28,0,2,33,6,0,1,75,0,32,3,0,1,76,0,17,4,20,13,0,52,5,0,1,17,5,20,49,0,1,67,0,52,28,0,2,33,13,0,20,77,0,1,78,0,52,22,0,2,32,196,0,20,49,0,1,79,0,52,28,0,2,33,32,0,20,77,0,20,10,0,1,46,0,52,28,0,2,33,6,0,1,80,0,32,3,0,1,81,0,52,22,0,2,32,151,0,20,49,0,1,82,0,52,28,0,2,33,13,0,20,77,0,1,83,0,52,22,0,2,32,125,0,20,49,0,1,84,0,52,28,0,2,33,13,0,20,77,0,1,85,0,52,22,0,2,32,99,0,20,49,0,1,45,0,52,28,0,2,33,13,0,20,77,0,1,86,0,52,22,0,2,32,73,0,20,49,0,1,87,0,52,28,0,2,33,13,0,20,77,0,1,88,0,52,22,0,2,32,47,0,20,49,0,2,52,17,0,2,17,6,20,70,0,52,16,0,1,33,4,0,2,32,23,0,20,77,0,1,24,0,20,70,0,1,90,0,52,89,0,2,1,91,0,52,22,0,4,32,117,1,20,10,0,1,92,0,52,28,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,41,0,20,39,0,20,13,0,52,5,0,1,48,1,17,4,20,40,0,52,16,0,1,33,4,0,2,32,10,0,1,93,0,20,40,0,52,22,0,2,32,44,1,20,4,0,52,12,0,1,1,7,0,52,28,0,2,6,33,41,0,5,20,10,0,1,94,0,52,28,0,2,6,34,26,0,5,20,10,0,1,95,0,52,28,0,2,6,34,11,0,5,20,10,0,1,96,0,52,28,0,2,33,13,0,1,97,0,20,10,0,52,22,0,2,32,225,0,20,4,0,52,12,0,1,1,14,0,52,28,0,2,6,33,30,0,5,20,10,0,1,98,0,52,28,0,2,6,33,15,0,5,20,13,0,52,5,0,1,1,94,0,52,28,0,2,33,6,0,1,99,0,32,168,0,20,10,0,1,100,0,52,28,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,17,0,1,101,0,20,13,0,52,5,0,1,52,22,0,2,32,119,0,20,10,0,1,102,0,52,28,0,2,6,33,15,0,5,20,13,0,52,12,0,1,1,7,0,52,28,0,2,33,17,0,1,103,0,20,13,0,52,5,0,1,52,22,0,2,32,70,0,20,10,0,1,104,0,52,28,0,2,6,33,8,0,5,20,13,0,52,3,0,1,33,6,0,1,105,0,32,39,0,20,10,0,1,104,0,52,28,0,2,6,33,15,0,5,20,13,0,52,5,0,1,1,106,0,52,28,0,2,33,6,0,1,107,0,32,1,0,2,50],"constants":[{"t":"s","v":"split"},{"t":"s","v":"token"},{"t":"s","v":"-"},{"t":"s","v":"empty?"},{"t":"s","v":"parts"},{"t":"s","v":"first"},{"t":"s","v":"slice"},{"t":"n","v":1},{"t":"s","v":"get"},{"t":"s","v":"cssx-colour-props"},{"t":"s","v":"head"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"s","v":"rest"},{"t":"n","v":2},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"parse-int"},{"t":"s","v":"last"},{"t":"s","v":"colour-bases"},{"t":"s","v":"join"},{"t":"n","v":0},{"t":"s","v":"str"},{"t":"s","v":"css-prop"},{"t":"s","v":":"},{"t":"s","v":"colour"},{"t":"s","v":"cname"},{"t":"s","v":"shade"},{"t":"s","v":"="},{"t":"s","v":"text"},{"t":"s","v":"cssx-sizes"},{"t":"s","v":"cssx-alignments"},{"t":"s","v":"text-align:"},{"t":"s","v":"font"},{"t":"s","v":"cssx-weights"},{"t":"s","v":"font-weight:"},{"t":"s","v":"cssx-families"},{"t":"s","v":"font-family:"},{"t":"s","v":"cssx-spacing-props"},{"t":"s","v":"cssx-spacing-value"},{"t":"s","v":"v"},{"t":"s","v":"cssx-template"},{"t":"s","v":"tmpl"},{"t":"s","v":"cssx-displays"},{"t":"s","v":"display:"},{"t":"s","v":"max"},{"t":"s","v":"w"},{"t":"s","v":"cssx-max-widths"},{"t":"s","v":"val-name"},{"t":"s","v":"val"},{"t":"s","v":"max-width:"},{"t":"s","v":"rounded"},{"t":"s","v":"border-radius:0.25rem"},{"t":"s","v":"none"},{"t":"s","v":"border-radius:0"},{"t":"s","v":"sm"},{"t":"s","v":"border-radius:0.125rem"},{"t":"s","v":"md"},{"t":"s","v":"border-radius:0.375rem"},{"t":"s","v":"lg"},{"t":"s","v":"border-radius:0.5rem"},{"t":"s","v":"xl"},{"t":"s","v":"border-radius:0.75rem"},{"t":"s","v":"2xl"},{"t":"s","v":"border-radius:1rem"},{"t":"s","v":"3xl"},{"t":"s","v":"border-radius:1.5rem"},{"t":"s","v":"full"},{"t":"s","v":"border-radius:9999px"},{"t":"s","v":"opacity"},{"t":"s","v":"n"},{"t":"s","v":"opacity:"},{"t":"s","v":"/"},{"t":"n","v":100},{"t":"s","v":"h"},{"t":"s","v":"width"},{"t":"s","v":"height"},{"t":"s","v":"prop"},{"t":"s","v":":100%"},{"t":"s","v":"screen"},{"t":"s","v":":100vw"},{"t":"s","v":":100vh"},{"t":"s","v":"auto"},{"t":"s","v":":auto"},{"t":"s","v":"min"},{"t":"s","v":":min-content"},{"t":"s","v":":max-content"},{"t":"s","v":"fit"},{"t":"s","v":":fit-content"},{"t":"s","v":"*"},{"t":"n","v":0.25},{"t":"s","v":"rem"},{"t":"s","v":"gap"},{"t":"s","v":"gap:"},{"t":"s","v":"underline"},{"t":"s","v":"overline"},{"t":"s","v":"line-through"},{"t":"s","v":"text-decoration-line:"},{"t":"s","v":"no"},{"t":"s","v":"text-decoration-line:none"},{"t":"s","v":"cursor"},{"t":"s","v":"cursor:"},{"t":"s","v":"overflow"},{"t":"s","v":"overflow:"},{"t":"s","v":"transition"},{"t":"s","v":"transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms"},{"t":"s","v":"colors"},{"t":"s","v":"transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms"}]}},{"t":"s","v":"cssx-process-token"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,4,0,52,3,0,1,17,2,2,17,3,2,17,4,2,17,5,20,6,0,1,7,0,52,5,0,2,33,13,0,20,4,0,52,8,0,1,21,9,0,32,124,0,20,6,0,1,10,0,52,5,0,2,33,59,0,20,4,0,52,8,0,1,17,6,20,4,0,52,11,0,1,21,9,0,5,20,15,0,20,16,0,52,14,0,2,52,13,0,1,52,12,0,1,33,9,0,20,16,0,21,17,0,32,6,0,20,16,0,21,18,0,32,52,0,20,6,0,1,20,0,52,19,0,2,33,38,0,20,4,0,52,8,0,1,21,17,0,5,20,4,0,1,7,0,52,21,0,2,21,18,0,5,20,4,0,52,11,0,1,21,9,0,32,1,0,2,5,20,22,0,20,9,0,48,1,17,6,20,23,0,52,13,0,1,33,4,0,2,32,172,0,1,25,0,1,27,0,20,1,0,1,2,0,52,0,0,2,52,26,0,2,52,24,0,2,17,7,20,18,0,52,13,0,1,33,6,0,1,28,0,32,25,0,20,29,0,20,18,0,52,14,0,2,6,34,11,0,5,1,2,0,20,18,0,52,24,0,2,17,8,1,30,0,20,31,0,20,32,0,1,33,0,20,23,0,1,34,0,52,24,0,6,17,9,20,17,0,52,13,0,1,33,18,0,1,35,0,20,36,0,1,31,0,20,31,0,65,2,0,32,51,0,20,15,0,20,17,0,52,14,0,2,6,34,4,0,5,20,17,0,17,10,1,35,0,1,37,0,20,38,0,1,39,0,20,36,0,1,34,0,52,24,0,5,1,31,0,20,31,0,65,2,0,50],"constants":[{"t":"s","v":"split"},{"t":"s","v":"token"},{"t":"s","v":":"},{"t":"s","v":"len"},{"t":"s","v":"colon-parts"},{"t":"s","v":"="},{"t":"s","v":"n"},{"t":"n","v":1},{"t":"s","v":"first"},{"t":"s","v":"base"},{"t":"n","v":2},{"t":"s","v":"last"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"get"},{"t":"s","v":"cssx-breakpoints"},{"t":"s","v":"prefix"},{"t":"s","v":"bp"},{"t":"s","v":"state"},{"t":"s","v":">="},{"t":"n","v":3},{"t":"s","v":"nth"},{"t":"s","v":"cssx-resolve"},{"t":"s","v":"css"},{"t":"s","v":"str"},{"t":"s","v":"sx-"},{"t":"s","v":"join"},{"t":"s","v":"-"},{"t":"s","v":""},{"t":"s","v":"cssx-states"},{"t":"s","v":"."},{"t":"s","v":"cls"},{"t":"s","v":"pseudo"},{"t":"s","v":"{"},{"t":"s","v":"}"},{"t":"s","v":"rule"},{"t":"s","v":"decl"},{"t":"s","v":"@media(min-width:"},{"t":"s","v":"min-w"},{"t":"s","v":"){"}]}},{"t":"s","v":"tw"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,6,34,4,0,5,1,2,0,1,3,0,52,0,0,2,17,1,52,4,0,0,17,2,51,6,0,20,7,0,52,5,0,2,5,1,2,0,20,9,0,52,8,0,2,50],"constants":[{"t":"s","v":"split"},{"t":"s","v":"tokens-str"},{"t":"s","v":""},{"t":"s","v":" "},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,52,0,0,1,33,49,0,20,4,0,20,2,0,48,1,17,1,20,6,0,52,5,0,1,52,0,0,1,33,21,0,20,7,0,20,8,0,20,6,0,1,10,0,52,9,0,2,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"tok"},{"t":"s","v":""},{"t":"s","v":"cssx-resolve"},{"t":"s","v":"nil?"},{"t":"s","v":"css"},{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"str"},{"t":"s","v":";"}]}},{"t":"s","v":"tokens"},{"t":"s","v":"join"},{"t":"s","v":"parts"}]}},{"t":"s","v":"eval-defcomp"},{"t":"list","v":[{"t":"sym","v":"defcomp"},{"t":"sym","v":"~cssx/tw"},{"t":"list","v":[{"t":"sym","v":"&key"},{"t":"sym","v":"tokens"}]},{"t":"list","v":[{"t":"sym","v":"let"},{"t":"list","v":[{"t":"list","v":[{"t":"sym","v":"token-list"},{"t":"list","v":[{"t":"sym","v":"filter"},{"t":"list","v":[{"t":"sym","v":"fn"},{"t":"list","v":[{"t":"sym","v":"t"}]},{"t":"list","v":[{"t":"sym","v":"not"},{"t":"list","v":[{"t":"sym","v":"="},{"t":"sym","v":"t"},{"t":"s","v":""}]}]}]},{"t":"list","v":[{"t":"sym","v":"split"},{"t":"list","v":[{"t":"sym","v":"or"},{"t":"sym","v":"tokens"},{"t":"s","v":""}]},{"t":"s","v":" "}]}]}]},{"t":"list","v":[{"t":"sym","v":"results"},{"t":"list","v":[{"t":"sym","v":"map"},{"t":"sym","v":"cssx-process-token"},{"t":"sym","v":"token-list"}]}]},{"t":"list","v":[{"t":"sym","v":"valid"},{"t":"list","v":[{"t":"sym","v":"filter"},{"t":"list","v":[{"t":"sym","v":"fn"},{"t":"list","v":[{"t":"sym","v":"r"}]},{"t":"list","v":[{"t":"sym","v":"not"},{"t":"list","v":[{"t":"sym","v":"nil?"},{"t":"sym","v":"r"}]}]}]},{"t":"sym","v":"results"}]}]},{"t":"list","v":[{"t":"sym","v":"classes"},{"t":"list","v":[{"t":"sym","v":"map"},{"t":"list","v":[{"t":"sym","v":"fn"},{"t":"list","v":[{"t":"sym","v":"r"}]},{"t":"list","v":[{"t":"sym","v":"get"},{"t":"sym","v":"r"},{"t":"s","v":"cls"}]}]},{"t":"sym","v":"valid"}]}]},{"t":"list","v":[{"t":"sym","v":"rules"},{"t":"list","v":[{"t":"sym","v":"map"},{"t":"list","v":[{"t":"sym","v":"fn"},{"t":"list","v":[{"t":"sym","v":"r"}]},{"t":"list","v":[{"t":"sym","v":"get"},{"t":"sym","v":"r"},{"t":"s","v":"rule"}]}]},{"t":"sym","v":"valid"}]}]},{"t":"list","v":[{"t":"sym","v":"_"},{"t":"list","v":[{"t":"sym","v":"for-each"},{"t":"list","v":[{"t":"sym","v":"fn"},{"t":"list","v":[{"t":"sym","v":"rule"}]},{"t":"list","v":[{"t":"sym","v":"collect!"},{"t":"s","v":"cssx"},{"t":"sym","v":"rule"}]}]},{"t":"sym","v":"rules"}]}]}]},{"t":"list","v":[{"t":"sym","v":"if"},{"t":"list","v":[{"t":"sym","v":"empty?"},{"t":"sym","v":"classes"}]},{"t":"nil"},{"t":"list","v":[{"t":"sym","v":"make-spread"},{"t":"nil"}]}]}]}]},{"t":"list","v":[{"t":"sym","v":"defcomp"},{"t":"sym","v":"~cssx/flush"},{"t":"list","v":[]},{"t":"kw","v":"affinity"},{"t":"kw","v":"client"},{"t":"list","v":[{"t":"sym","v":"let"},{"t":"list","v":[{"t":"list","v":[{"t":"sym","v":"rules"},{"t":"list","v":[{"t":"sym","v":"collected"},{"t":"s","v":"cssx"}]}]},{"t":"list","v":[{"t":"sym","v":"head-style"},{"t":"list","v":[{"t":"sym","v":"dom-query"},{"t":"s","v":"#sx-css"}]}]}]},{"t":"list","v":[{"t":"sym","v":"when"},{"t":"sym","v":"head-style"},{"t":"list","v":[{"t":"sym","v":"clear-collected!"},{"t":"s","v":"cssx"}]},{"t":"list","v":[{"t":"sym","v":"when"},{"t":"list","v":[{"t":"sym","v":"not"},{"t":"list","v":[{"t":"sym","v":"empty?"},{"t":"sym","v":"rules"}]}]},{"t":"list","v":[{"t":"sym","v":"dom-set-prop"},{"t":"sym","v":"head-style"},{"t":"s","v":"textContent"},{"t":"list","v":[{"t":"sym","v":"str"},{"t":"list","v":[{"t":"sym","v":"dom-get-prop"},{"t":"sym","v":"head-style"},{"t":"s","v":"textContent"}]},{"t":"list","v":[{"t":"sym","v":"join"},{"t":"s","v":""},{"t":"sym","v":"rules"}]}]}]}]}]}]}]}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/deps.sxbc.json b/shared/static/wasm/sx/deps.sxbc.json new file mode 100644 index 00000000..05885b43 --- /dev/null +++ b/shared/static/wasm/sx/deps.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"e34d23a0cb361f8a","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,50],"constants":[{"t":"s","v":"scan-refs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,1,20,1,0,20,2,0,20,3,0,48,2,5,20,3,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"scan-refs-walk"},{"t":"s","v":"node"},{"t":"s","v":"refs"}]}},{"t":"s","v":"scan-refs-walk"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,62,0,20,4,0,20,2,0,48,1,17,2,20,6,0,1,7,0,52,5,0,2,33,35,0,20,10,0,20,6,0,52,9,0,2,52,8,0,1,33,14,0,20,11,0,20,10,0,20,6,0,49,2,32,1,0,2,32,1,0,2,32,65,0,20,2,0,52,1,0,1,1,12,0,52,0,0,2,33,13,0,51,14,0,20,2,0,52,13,0,2,32,35,0,20,2,0,52,1,0,1,1,15,0,52,0,0,2,33,17,0,51,16,0,20,2,0,52,17,0,1,52,13,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"node"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"refs"},{"t":"s","v":"append!"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"scan-refs-walk"},{"t":"s","v":"item"},{"t":"s","v":"refs"}]}},{"t":"s","v":"dict"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,49,2,50],"constants":[{"t":"s","v":"scan-refs-walk"},{"t":"s","v":"dict-get"},{"t":"s","v":"node"},{"t":"s","v":"key"},{"t":"s","v":"refs"}]}},{"t":"s","v":"keys"}]}},{"t":"s","v":"transitive-deps-walk"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,127,0,20,4,0,20,2,0,20,3,0,48,2,5,20,5,0,20,6,0,20,3,0,48,2,17,3,20,9,0,52,8,0,1,1,10,0,52,7,0,2,6,34,15,0,5,20,9,0,52,8,0,1,1,11,0,52,7,0,2,33,22,0,51,13,0,20,14,0,20,9,0,52,15,0,1,48,1,52,12,0,2,32,41,0,20,9,0,52,8,0,1,1,16,0,52,7,0,2,33,23,0,51,13,0,20,14,0,20,17,0,20,9,0,48,1,48,1,52,12,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"seen"},{"t":"s","v":"n"},{"t":"s","v":"append!"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"island"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"transitive-deps-walk"},{"t":"s","v":"ref"},{"t":"s","v":"seen"},{"t":"s","v":"env"}]}},{"t":"s","v":"scan-refs"},{"t":"s","v":"component-body"},{"t":"s","v":"macro"},{"t":"s","v":"macro-body"}]}},{"t":"s","v":"transitive-deps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,20,2,0,1,3,0,52,1,0,2,33,6,0,20,2,0,32,10,0,1,3,0,20,2,0,52,4,0,2,17,3,20,5,0,20,6,0,20,7,0,20,8,0,48,3,5,51,10,0,20,7,0,52,9,0,2,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"transitive-deps-walk"},{"t":"s","v":"key"},{"t":"s","v":"seen"},{"t":"s","v":"env"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"x"},{"t":"s","v":"key"}]}}]}},{"t":"s","v":"compute-all-deps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,20,5,0,52,4,0,1,1,6,0,52,3,0,2,6,34,15,0,5,20,5,0,52,4,0,1,1,7,0,52,3,0,2,33,22,0,20,8,0,20,5,0,20,9,0,20,2,0,20,1,0,48,2,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"name"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"island"},{"t":"s","v":"component-set-deps!"},{"t":"s","v":"transitive-deps"}]}},{"t":"s","v":"env-components"},{"t":"s","v":"env"}]}},{"t":"s","v":"scan-components-from-source"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,48,2,17,1,51,4,0,20,5,0,52,3,0,2,50],"constants":[{"t":"s","v":"regex-find-all"},{"t":"s","v":"\\(~([a-zA-Z_][a-zA-Z0-9_\\-:/]*)"},{"t":"s","v":"source"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"str"},{"t":"s","v":"~"},{"t":"s","v":"m"}]}},{"t":"s","v":"matches"}]}},{"t":"s","v":"components-needed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,52,2,0,0,17,3,51,4,0,20,5,0,52,3,0,2,5,20,6,0,50],"constants":[{"t":"s","v":"scan-components-from-source"},{"t":"s","v":"page-source"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,48,2,32,1,0,2,5,20,5,0,20,6,0,20,3,0,48,2,17,1,20,9,0,52,8,0,1,1,10,0,52,7,0,2,6,33,17,0,5,20,12,0,20,9,0,48,1,52,11,0,1,52,0,0,1,33,11,0,20,12,0,20,9,0,48,1,32,11,0,20,13,0,20,3,0,20,6,0,48,2,17,2,51,15,0,20,16,0,52,14,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"all-needed"},{"t":"s","v":"name"},{"t":"s","v":"append!"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"empty?"},{"t":"s","v":"component-deps"},{"t":"s","v":"transitive-deps"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"all-needed"},{"t":"s","v":"dep"},{"t":"s","v":"append!"}]}},{"t":"s","v":"deps"}]}},{"t":"s","v":"direct"},{"t":"s","v":"all-needed"}]}},{"t":"s","v":"page-component-bundle"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"components-needed"},{"t":"s","v":"page-source"},{"t":"s","v":"env"}]}},{"t":"s","v":"page-css-classes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,2,52,3,0,0,17,3,51,5,0,20,6,0,52,4,0,2,5,51,7,0,20,8,0,20,1,0,48,1,52,4,0,2,5,20,9,0,50],"constants":[{"t":"s","v":"components-needed"},{"t":"s","v":"page-source"},{"t":"s","v":"env"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,20,5,0,52,4,0,1,1,6,0,52,3,0,2,33,18,0,51,8,0,20,9,0,20,5,0,48,1,52,7,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"name"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"classes"},{"t":"s","v":"cls"},{"t":"s","v":"append!"}]}},{"t":"s","v":"component-css-classes"}]}},{"t":"s","v":"needed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"classes"},{"t":"s","v":"cls"},{"t":"s","v":"append!"}]}},{"t":"s","v":"scan-css-classes"},{"t":"s","v":"classes"}]}},{"t":"s","v":"scan-io-refs-walk"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,62,0,20,4,0,20,2,0,48,1,17,3,20,6,0,20,7,0,52,5,0,2,33,35,0,20,9,0,20,7,0,52,5,0,2,52,8,0,1,33,14,0,20,10,0,20,9,0,20,7,0,49,2,32,1,0,2,32,1,0,2,32,65,0,20,2,0,52,1,0,1,1,11,0,52,0,0,2,33,13,0,51,13,0,20,2,0,52,12,0,2,32,35,0,20,2,0,52,1,0,1,1,14,0,52,0,0,2,33,17,0,51,15,0,20,2,0,52,16,0,1,52,12,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"node"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"contains?"},{"t":"s","v":"io-names"},{"t":"s","v":"name"},{"t":"s","v":"not"},{"t":"s","v":"refs"},{"t":"s","v":"append!"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"scan-io-refs-walk"},{"t":"s","v":"item"},{"t":"s","v":"io-names"},{"t":"s","v":"refs"}]}},{"t":"s","v":"dict"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,52,1,0,2,20,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"scan-io-refs-walk"},{"t":"s","v":"dict-get"},{"t":"s","v":"node"},{"t":"s","v":"key"},{"t":"s","v":"io-names"},{"t":"s","v":"refs"}]}},{"t":"s","v":"keys"}]}},{"t":"s","v":"scan-io-refs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,20,1,0,20,2,0,20,3,0,20,4,0,48,3,5,20,4,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"scan-io-refs-walk"},{"t":"s","v":"node"},{"t":"s","v":"io-names"},{"t":"s","v":"refs"}]}},{"t":"s","v":"transitive-io-refs-walk"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,155,0,20,4,0,20,2,0,20,3,0,48,2,5,20,5,0,20,6,0,20,3,0,48,2,17,5,20,9,0,52,8,0,1,1,10,0,52,7,0,2,33,45,0,51,12,0,20,13,0,20,9,0,52,14,0,1,20,15,0,48,2,52,11,0,2,5,51,16,0,20,17,0,20,9,0,52,14,0,1,48,1,52,11,0,2,32,65,0,20,9,0,52,8,0,1,1,18,0,52,7,0,2,33,47,0,51,12,0,20,13,0,20,19,0,20,9,0,48,1,20,15,0,48,2,52,11,0,2,5,51,16,0,20,17,0,20,19,0,20,9,0,48,1,48,1,52,11,0,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"seen"},{"t":"s","v":"n"},{"t":"s","v":"append!"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"all-refs"},{"t":"s","v":"ref"},{"t":"s","v":"append!"}]}},{"t":"s","v":"scan-io-refs"},{"t":"s","v":"component-body"},{"t":"s","v":"io-names"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,49,5,50],"constants":[{"t":"s","v":"transitive-io-refs-walk"},{"t":"s","v":"dep"},{"t":"s","v":"seen"},{"t":"s","v":"all-refs"},{"t":"s","v":"env"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"scan-refs"},{"t":"s","v":"macro"},{"t":"s","v":"macro-body"}]}},{"t":"s","v":"transitive-io-refs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,3,52,0,0,0,17,4,20,2,0,1,3,0,52,1,0,2,33,6,0,20,2,0,32,10,0,1,3,0,20,2,0,52,4,0,2,17,5,20,5,0,20,6,0,20,7,0,20,8,0,20,9,0,20,10,0,48,5,5,20,8,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"transitive-io-refs-walk"},{"t":"s","v":"key"},{"t":"s","v":"seen"},{"t":"s","v":"all-refs"},{"t":"s","v":"env"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"compute-all-io-refs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,20,5,0,52,4,0,1,1,6,0,52,3,0,2,33,25,0,20,7,0,20,5,0,20,8,0,20,2,0,20,1,0,20,9,0,48,3,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"name"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"component-set-io-refs!"},{"t":"s","v":"transitive-io-refs"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"env-components"},{"t":"s","v":"env"}]}},{"t":"s","v":"component-io-refs-cached"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,1,0,32,10,0,1,2,0,20,1,0,52,3,0,2,17,3,20,4,0,20,5,0,20,6,0,48,2,17,4,20,9,0,52,8,0,1,1,10,0,52,7,0,2,6,33,38,0,5,20,13,0,20,9,0,48,1,52,12,0,1,52,11,0,1,6,33,17,0,5,20,13,0,20,9,0,48,1,52,14,0,1,52,11,0,1,33,11,0,20,13,0,20,9,0,49,1,32,14,0,20,15,0,20,1,0,20,5,0,20,16,0,49,3,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"key"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"component-io-refs"},{"t":"s","v":"empty?"},{"t":"s","v":"transitive-io-refs"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"component-pure?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,1,0,32,10,0,1,2,0,20,1,0,52,3,0,2,17,3,20,4,0,20,5,0,20,6,0,48,2,17,4,20,9,0,52,8,0,1,1,10,0,52,7,0,2,6,33,17,0,5,20,13,0,20,9,0,48,1,52,12,0,1,52,11,0,1,33,15,0,20,13,0,20,9,0,48,1,52,14,0,1,32,18,0,20,15,0,20,1,0,20,5,0,20,16,0,48,3,52,14,0,1,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"key"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"component-io-refs"},{"t":"s","v":"empty?"},{"t":"s","v":"transitive-io-refs"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"render-target"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,1,0,32,10,0,1,2,0,20,1,0,52,3,0,2,17,3,20,4,0,20,5,0,20,6,0,48,2,17,4,20,10,0,52,9,0,1,1,11,0,52,8,0,2,52,7,0,1,33,6,0,1,12,0,32,78,0,20,13,0,20,10,0,48,1,17,5,20,14,0,1,12,0,52,8,0,2,33,6,0,1,12,0,32,49,0,20,14,0,1,15,0,52,8,0,2,33,6,0,1,15,0,32,30,0,20,16,0,20,1,0,20,5,0,20,17,0,48,3,52,7,0,1,33,6,0,1,12,0,32,3,0,1,15,0,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"~"},{"t":"s","v":"str"},{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"key"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"val"},{"t":"s","v":"component"},{"t":"s","v":"server"},{"t":"s","v":"component-affinity"},{"t":"s","v":"affinity"},{"t":"s","v":"client"},{"t":"s","v":"component-pure?"},{"t":"s","v":"io-names"}]}},{"t":"s","v":"page-render-plan"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,52,3,0,0,17,4,52,4,0,0,17,5,52,4,0,0,17,6,52,4,0,0,17,7,51,6,0,20,7,0,52,5,0,2,5,1,8,0,20,8,0,1,9,0,20,10,0,1,11,0,20,12,0,1,13,0,20,14,0,65,4,0,50],"constants":[{"t":"s","v":"components-needed"},{"t":"s","v":"page-source"},{"t":"s","v":"env"},{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,1,20,5,0,20,1,0,20,6,0,52,4,0,3,5,20,6,0,1,8,0,52,7,0,2,33,36,0,20,9,0,20,10,0,20,1,0,48,2,5,51,12,0,20,13,0,20,1,0,20,2,0,20,3,0,48,3,52,11,0,2,32,11,0,20,9,0,20,14,0,20,1,0,49,2,50],"constants":[{"t":"s","v":"render-target"},{"t":"s","v":"name"},{"t":"s","v":"env"},{"t":"s","v":"io-names"},{"t":"s","v":"dict-set!"},{"t":"s","v":"comp-targets"},{"t":"s","v":"target"},{"t":"s","v":"="},{"t":"s","v":"server"},{"t":"s","v":"append!"},{"t":"s","v":"server-list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,2,0,20,3,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"io-deps"},{"t":"s","v":"io-ref"},{"t":"s","v":"append!"}]}},{"t":"s","v":"component-io-refs-cached"},{"t":"s","v":"client-list"}]}},{"t":"s","v":"needed"},{"t":"s","v":"io-deps"},{"t":"s","v":"server"},{"t":"s","v":"server-list"},{"t":"s","v":"components"},{"t":"s","v":"comp-targets"},{"t":"s","v":"client"},{"t":"s","v":"client-list"}]}},{"t":"s","v":"env-components"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,1,20,4,0,52,3,0,1,6,34,8,0,5,20,4,0,52,5,0,1,50],"constants":[{"t":"s","v":"env-get"},{"t":"s","v":"env"},{"t":"s","v":"k"},{"t":"s","v":"component?"},{"t":"s","v":"v"},{"t":"s","v":"macro?"}]}},{"t":"s","v":"keys"},{"t":"s","v":"env"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/dom.sxbc.json b/shared/static/wasm/sx/dom.sxbc.json new file mode 100644 index 00000000..aa082c6e --- /dev/null +++ b/shared/static/wasm/sx/dom.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"86d517886439b3ac","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,51,65,0,128,64,0,5,51,67,0,128,66,0,5,51,69,0,128,68,0,5,51,71,0,128,70,0,5,51,73,0,128,72,0,5,51,75,0,128,74,0,5,51,77,0,128,76,0,5,51,79,0,128,78,0,5,51,81,0,128,80,0,5,51,83,0,128,82,0,5,51,85,0,128,84,0,5,51,87,0,128,86,0,5,51,89,0,128,88,0,5,51,91,0,128,90,0,5,51,93,0,128,92,0,5,51,95,0,128,94,0,5,51,97,0,128,96,0,5,51,99,0,128,98,0,5,51,101,0,128,100,0,5,51,99,0,128,102,0,5,51,104,0,128,103,0,5,51,106,0,128,105,0,5,51,108,0,128,107,0,5,51,110,0,128,109,0,5,51,112,0,128,111,0,5,51,114,0,128,113,0,5,51,116,0,128,115,0,5,51,118,0,128,117,0,5,51,120,0,128,119,0,5,51,122,0,128,121,0,5,51,124,0,128,123,0,5,51,126,0,128,125,0,5,51,128,0,128,127,0,5,51,130,0,128,129,0,5,51,132,0,128,131,0,5,51,134,0,128,133,0,50],"constants":[{"t":"s","v":"dom-document"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,49,1,50],"constants":[{"t":"s","v":"host-global"},{"t":"s","v":"document"}]}},{"t":"s","v":"dom-window"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,49,1,50],"constants":[{"t":"s","v":"host-global"},{"t":"s","v":"window"}]}},{"t":"s","v":"dom-body"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-document"},{"t":"s","v":"body"}]}},{"t":"s","v":"dom-head"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-document"},{"t":"s","v":"head"}]}},{"t":"s","v":"dom-create-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,22,0,20,1,0,20,2,0,48,0,1,3,0,20,0,0,20,4,0,49,4,32,16,0,20,1,0,20,2,0,48,0,1,5,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"ns"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"createElementNS"},{"t":"s","v":"tag"},{"t":"s","v":"createElement"}]}},{"t":"s","v":"create-text-node"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"createTextNode"},{"t":"s","v":"s"}]}},{"t":"s","v":"create-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"createDocumentFragment"}]}},{"t":"s","v":"create-comment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,6,34,4,0,5,1,4,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"createComment"},{"t":"s","v":"text"},{"t":"s","v":""}]}},{"t":"s","v":"dom-append"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,4,0,5,20,1,0,33,17,0,20,2,0,20,0,0,1,3,0,20,1,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"parent"},{"t":"s","v":"child"},{"t":"s","v":"host-call"},{"t":"s","v":"appendChild"}]}},{"t":"s","v":"dom-prepend"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,4,0,5,20,1,0,33,17,0,20,2,0,20,0,0,1,3,0,20,1,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"parent"},{"t":"s","v":"child"},{"t":"s","v":"host-call"},{"t":"s","v":"prepend"}]}},{"t":"s","v":"dom-insert-before"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,4,0,5,20,1,0,33,20,0,20,2,0,20,0,0,1,3,0,20,1,0,20,4,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"parent"},{"t":"s","v":"child"},{"t":"s","v":"host-call"},{"t":"s","v":"insertBefore"},{"t":"s","v":"ref"}]}},{"t":"s","v":"dom-insert-after"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,1,3,0,48,2,17,2,20,1,0,20,2,0,1,4,0,48,2,17,3,20,5,0,33,43,0,20,6,0,33,20,0,20,7,0,20,5,0,1,8,0,20,9,0,20,6,0,49,4,32,14,0,20,7,0,20,5,0,1,10,0,20,9,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"Insert node after ref in the same parent."},{"t":"s","v":"host-get"},{"t":"s","v":"ref"},{"t":"s","v":"parentNode"},{"t":"s","v":"nextSibling"},{"t":"s","v":"parent"},{"t":"s","v":"next"},{"t":"s","v":"host-call"},{"t":"s","v":"insertBefore"},{"t":"s","v":"node"},{"t":"s","v":"appendChild"}]}},{"t":"s","v":"dom-remove"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,14,0,20,1,0,20,0,0,1,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"remove"}]}},{"t":"s","v":"dom-is-active-element?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,48,2,17,1,20,3,0,6,33,4,0,5,20,4,0,33,13,0,20,4,0,20,3,0,52,5,0,2,32,1,0,4,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"dom-document"},{"t":"s","v":"activeElement"},{"t":"s","v":"active"},{"t":"s","v":"el"},{"t":"s","v":"identical?"}]}},{"t":"s","v":"dom-is-input-element?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,6,34,4,0,5,1,3,0,52,0,0,1,17,1,20,5,0,1,6,0,52,4,0,2,6,34,26,0,5,20,5,0,1,7,0,52,4,0,2,6,34,11,0,5,20,5,0,1,8,0,52,4,0,2,50],"constants":[{"t":"s","v":"upper"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":"el"},{"t":"s","v":""},{"t":"s","v":"="},{"t":"s","v":"tag"},{"t":"s","v":"INPUT"},{"t":"s","v":"TEXTAREA"},{"t":"s","v":"SELECT"}]}},{"t":"s","v":"dom-is-child-of?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,23,0,5,20,1,0,6,33,15,0,5,20,2,0,20,1,0,1,3,0,20,0,0,49,3,50],"constants":[{"t":"s","v":"child"},{"t":"s","v":"parent"},{"t":"s","v":"host-call"},{"t":"s","v":"contains"}]}},{"t":"s","v":"dom-attr-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,52,3,0,0,17,2,20,4,0,33,32,0,20,0,0,20,4,0,1,5,0,48,2,17,3,2,17,4,51,6,0,17,4,20,7,0,1,8,0,48,1,32,1,0,2,5,20,9,0,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"attributes"},{"t":"s","v":"list"},{"t":"s","v":"attrs"},{"t":"s","v":"length"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,69,0,20,3,0,20,4,0,1,5,0,20,1,0,48,3,17,1,20,6,0,20,7,0,20,9,0,20,10,0,1,11,0,48,2,20,9,0,20,10,0,1,12,0,48,2,52,8,0,2,48,2,5,20,13,0,20,1,0,1,15,0,52,14,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"n"},{"t":"s","v":"host-call"},{"t":"s","v":"attrs"},{"t":"s","v":"item"},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"list"},{"t":"s","v":"host-get"},{"t":"s","v":"attr"},{"t":"s","v":"name"},{"t":"s","v":"value"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"n","v":0},{"t":"s","v":"result"}]}},{"t":"s","v":"dom-remove-child"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,4,0,5,20,1,0,33,17,0,20,2,0,20,0,0,1,3,0,20,1,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"parent"},{"t":"s","v":"child"},{"t":"s","v":"host-call"},{"t":"s","v":"removeChild"}]}},{"t":"s","v":"dom-replace-child"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,6,33,4,0,5,20,2,0,33,20,0,20,3,0,20,0,0,1,4,0,20,1,0,20,2,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"parent"},{"t":"s","v":"new-child"},{"t":"s","v":"old-child"},{"t":"s","v":"host-call"},{"t":"s","v":"replaceChild"}]}},{"t":"s","v":"dom-clone"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,4,0,52,3,0,1,33,4,0,3,32,3,0,20,4,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"node"},{"t":"s","v":"cloneNode"},{"t":"s","v":"nil?"},{"t":"s","v":"deep"}]}},{"t":"s","v":"dom-query"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,19,0,20,2,0,20,3,0,48,0,1,4,0,20,5,0,49,3,32,14,0,20,2,0,20,5,0,1,4,0,20,1,0,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"sel"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"querySelector"},{"t":"s","v":"root-or-sel"}]}},{"t":"s","v":"dom-query-all"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,52,1,0,1,33,19,0,20,3,0,20,4,0,48,0,1,5,0,20,6,0,48,3,32,14,0,20,3,0,20,6,0,1,5,0,20,2,0,48,3,17,2,20,7,0,52,1,0,1,33,7,0,52,8,0,0,32,39,0,20,9,0,20,7,0,1,10,0,48,2,17,3,52,8,0,0,17,4,2,17,5,51,11,0,17,5,20,12,0,1,13,0,48,1,5,20,14,0,50],"constants":[{"t":"s","v":"Query DOM and return an SX list (not a host NodeList)."},{"t":"s","v":"nil?"},{"t":"s","v":"sel"},{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"querySelectorAll"},{"t":"s","v":"root"},{"t":"s","v":"node-list"},{"t":"s","v":"list"},{"t":"s","v":"host-get"},{"t":"s","v":"length"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,41,0,20,3,0,20,4,0,20,5,0,20,6,0,1,7,0,20,1,0,48,3,48,2,5,20,8,0,20,1,0,1,10,0,52,9,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"n"},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"host-call"},{"t":"s","v":"node-list"},{"t":"s","v":"item"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"n","v":0},{"t":"s","v":"result"}]}},{"t":"s","v":"dom-query-by-id"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"dom-document"},{"t":"s","v":"getElementById"},{"t":"s","v":"id"}]}},{"t":"s","v":"dom-closest"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,17,0,20,1,0,20,0,0,1,2,0,20,3,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"closest"},{"t":"s","v":"sel"}]}},{"t":"s","v":"dom-matches?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,17,0,20,3,0,20,0,0,1,2,0,20,4,0,49,3,32,1,0,4,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"matches"},{"t":"s","v":"host-call"},{"t":"s","v":"sel"}]}},{"t":"s","v":"dom-get-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,36,0,20,3,0,20,0,0,1,2,0,20,4,0,48,3,17,2,20,6,0,52,5,0,1,33,4,0,2,32,3,0,20,6,0,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"getAttribute"},{"t":"s","v":"host-call"},{"t":"s","v":"name"},{"t":"s","v":"nil?"},{"t":"s","v":"v"}]}},{"t":"s","v":"dom-set-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,20,0,20,3,0,20,0,0,1,2,0,20,4,0,20,5,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"setAttribute"},{"t":"s","v":"host-call"},{"t":"s","v":"name"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-remove-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,17,0,20,3,0,20,0,0,1,2,0,20,4,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"removeAttribute"},{"t":"s","v":"host-call"},{"t":"s","v":"name"}]}},{"t":"s","v":"dom-has-attr?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,17,0,20,3,0,20,0,0,1,2,0,20,4,0,49,3,32,1,0,4,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"hasAttribute"},{"t":"s","v":"host-call"},{"t":"s","v":"name"}]}},{"t":"s","v":"dom-add-class"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,25,0,20,1,0,20,2,0,20,0,0,1,3,0,48,2,1,4,0,20,5,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"classList"},{"t":"s","v":"add"},{"t":"s","v":"cls"}]}},{"t":"s","v":"dom-remove-class"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,25,0,20,1,0,20,2,0,20,0,0,1,3,0,48,2,1,4,0,20,5,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"classList"},{"t":"s","v":"remove"},{"t":"s","v":"cls"}]}},{"t":"s","v":"dom-has-class?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,25,0,20,1,0,20,2,0,20,0,0,1,3,0,48,2,1,4,0,20,5,0,49,3,32,1,0,4,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"classList"},{"t":"s","v":"contains"},{"t":"s","v":"cls"}]}},{"t":"s","v":"dom-text-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"textContent"}]}},{"t":"s","v":"dom-set-text-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"el"},{"t":"s","v":"textContent"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-inner-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"innerHTML"}]}},{"t":"s","v":"dom-set-inner-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"el"},{"t":"s","v":"innerHTML"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-outer-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"outerHTML"}]}},{"t":"s","v":"dom-insert-adjacent-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"insertAdjacentHTML"},{"t":"s","v":"position"},{"t":"s","v":"html"}]}},{"t":"s","v":"dom-get-style"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,0,0,20,1,0,1,2,0,48,2,20,3,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"style"},{"t":"s","v":"prop"}]}},{"t":"s","v":"dom-set-style"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,1,3,0,48,2,1,4,0,20,5,0,20,6,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"style"},{"t":"s","v":"setProperty"},{"t":"s","v":"prop"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-get-prop"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"name"}]}},{"t":"s","v":"dom-set-prop"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"el"},{"t":"s","v":"name"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-tag-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,26,0,20,2,0,20,0,0,1,3,0,48,2,6,34,4,0,5,1,4,0,52,1,0,1,32,3,0,1,4,0,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"lower"},{"t":"s","v":"host-get"},{"t":"s","v":"tagName"},{"t":"s","v":""}]}},{"t":"s","v":"dom-node-type"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"nodeType"}]}},{"t":"s","v":"dom-node-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"nodeName"}]}},{"t":"s","v":"dom-id"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"id"}]}},{"t":"s","v":"dom-parent"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"parentNode"}]}},{"t":"s","v":"dom-first-child"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"firstChild"}]}},{"t":"s","v":"dom-next-sibling"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"nextSibling"}]}},{"t":"s","v":"dom-child-list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,33,55,0,20,2,0,20,1,0,1,3,0,48,2,17,1,20,2,0,20,4,0,1,5,0,48,2,17,2,52,6,0,0,17,3,2,17,4,51,7,0,17,4,20,8,0,1,9,0,48,1,5,20,10,0,32,4,0,52,6,0,0,50],"constants":[{"t":"s","v":"Return child nodes as an SX list."},{"t":"s","v":"el"},{"t":"s","v":"host-get"},{"t":"s","v":"childNodes"},{"t":"s","v":"nl"},{"t":"s","v":"length"},{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,41,0,20,3,0,20,4,0,20,5,0,20,6,0,1,7,0,20,1,0,48,3,48,2,5,20,8,0,20,1,0,1,10,0,52,9,0,2,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"n"},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"host-call"},{"t":"s","v":"nl"},{"t":"s","v":"item"},{"t":"s","v":"loop"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"loop"},{"t":"n","v":0},{"t":"s","v":"result"}]}},{"t":"s","v":"dom-is-fragment?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,1,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"nodeType"},{"t":"n","v":11}]}},{"t":"s","v":"dom-child-nodes"},{"t":"s","v":"dom-remove-children-after"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,48,1,17,1,20,3,0,33,16,0,2,17,2,51,4,0,17,2,20,5,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"Remove all siblings after marker node."},{"t":"s","v":"dom-parent"},{"t":"s","v":"marker"},{"t":"s","v":"parent"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,0,20,2,0,33,23,0,20,3,0,20,4,0,1,5,0,20,2,0,48,3,5,20,6,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"dom-next-sibling"},{"t":"s","v":"marker"},{"t":"s","v":"next"},{"t":"s","v":"host-call"},{"t":"s","v":"parent"},{"t":"s","v":"removeChild"},{"t":"s","v":"loop"}]}},{"t":"s","v":"loop"}]}},{"t":"s","v":"dom-focus"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,14,0,20,1,0,20,0,0,1,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"host-call"},{"t":"s","v":"focus"}]}},{"t":"s","v":"dom-parse-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,20,3,0,1,4,0,20,5,0,1,6,0,48,4,17,2,20,7,0,20,7,0,20,8,0,1,9,0,48,2,1,10,0,49,2,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"DOMParser"},{"t":"s","v":"host-call"},{"t":"s","v":"parser"},{"t":"s","v":"parseFromString"},{"t":"s","v":"html"},{"t":"s","v":"text/html"},{"t":"s","v":"host-get"},{"t":"s","v":"doc"},{"t":"s","v":"body"},{"t":"s","v":"childNodes"}]}},{"t":"s","v":"dom-listen"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,3,20,2,0,20,3,0,1,4,0,20,5,0,20,6,0,48,4,5,51,7,0,50],"constants":[{"t":"s","v":"host-callback"},{"t":"s","v":"handler"},{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"addEventListener"},{"t":"s","v":"event-name"},{"t":"s","v":"cb"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"removeEventListener"},{"t":"s","v":"event-name"},{"t":"s","v":"cb"}]}}]}},{"t":"s","v":"dom-add-listener"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,4,20,2,0,33,23,0,20,3,0,20,4,0,1,5,0,20,6,0,20,7,0,20,2,0,48,5,32,17,0,20,3,0,20,4,0,1,5,0,20,6,0,20,7,0,48,4,5,51,8,0,50],"constants":[{"t":"s","v":"host-callback"},{"t":"s","v":"handler"},{"t":"s","v":"opts"},{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"addEventListener"},{"t":"s","v":"event-name"},{"t":"s","v":"cb"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,3,0,20,4,0,49,4,50],"constants":[{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"removeEventListener"},{"t":"s","v":"event-name"},{"t":"s","v":"cb"}]}}]}},{"t":"s","v":"dom-dispatch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,1,4,0,20,4,0,1,5,0,3,52,3,0,4,48,3,17,3,20,6,0,20,7,0,1,8,0,20,9,0,49,3,50],"constants":[{"t":"s","v":"host-new"},{"t":"s","v":"CustomEvent"},{"t":"s","v":"event-name"},{"t":"s","v":"dict"},{"t":"s","v":"detail"},{"t":"s","v":"bubbles"},{"t":"s","v":"host-call"},{"t":"s","v":"el"},{"t":"s","v":"dispatchEvent"},{"t":"s","v":"evt"}]}},{"t":"s","v":"event-detail"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"evt"},{"t":"s","v":"detail"}]}},{"t":"s","v":"prevent-default"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,14,0,20,1,0,20,0,0,1,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"e"},{"t":"s","v":"host-call"},{"t":"s","v":"preventDefault"}]}},{"t":"s","v":"stop-propagation"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,14,0,20,1,0,20,0,0,1,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"e"},{"t":"s","v":"host-call"},{"t":"s","v":"stopPropagation"}]}},{"t":"s","v":"event-modifier-key?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,60,0,5,20,1,0,20,0,0,1,2,0,48,2,6,34,44,0,5,20,1,0,20,0,0,1,3,0,48,2,6,34,28,0,5,20,1,0,20,0,0,1,4,0,48,2,6,34,12,0,5,20,1,0,20,0,0,1,5,0,49,2,50],"constants":[{"t":"s","v":"e"},{"t":"s","v":"host-get"},{"t":"s","v":"ctrlKey"},{"t":"s","v":"metaKey"},{"t":"s","v":"shiftKey"},{"t":"s","v":"altKey"}]}},{"t":"s","v":"element-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,20,0,5,20,3,0,20,0,0,1,4,0,48,2,52,2,0,1,52,1,0,1,33,14,0,20,3,0,20,0,0,1,4,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"el"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"host-get"},{"t":"s","v":"value"}]}},{"t":"s","v":"error-message"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,12,0,5,20,1,0,20,0,0,1,2,0,48,2,33,14,0,20,1,0,20,0,0,1,2,0,49,2,32,7,0,20,0,0,52,3,0,1,50],"constants":[{"t":"s","v":"e"},{"t":"s","v":"host-get"},{"t":"s","v":"message"},{"t":"s","v":"str"}]}},{"t":"s","v":"dom-get-data"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,2,20,3,0,33,14,0,20,0,0,20,3,0,20,4,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"__sx_data"},{"t":"s","v":"store"},{"t":"s","v":"key"}]}},{"t":"s","v":"dom-set-data"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,18,0,20,4,0,20,2,0,1,3,0,52,5,0,0,48,3,32,1,0,2,5,20,4,0,20,1,0,20,2,0,1,3,0,48,2,20,6,0,20,7,0,49,3,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"host-get"},{"t":"s","v":"el"},{"t":"s","v":"__sx_data"},{"t":"s","v":"host-set!"},{"t":"s","v":"dict"},{"t":"s","v":"key"},{"t":"s","v":"val"}]}},{"t":"s","v":"dom-append-to-head"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,33,19,0,20,1,0,20,0,0,48,0,1,2,0,20,3,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-head"},{"t":"s","v":"host-call"},{"t":"s","v":"appendChild"},{"t":"s","v":"el"}]}},{"t":"s","v":"set-document-title"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,1,2,0,20,2,0,49,3,50],"constants":[{"t":"s","v":"host-set!"},{"t":"s","v":"dom-document"},{"t":"s","v":"title"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/engine.sxbc.json b/shared/static/wasm/sx/engine.sxbc.json new file mode 100644 index 00000000..13187c5e --- /dev/null +++ b/shared/static/wasm/sx/engine.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"06d9675a0cbff632","module":{"arity":0,"bytecode":[1,2,0,1,3,0,1,4,0,1,5,0,1,6,0,52,1,0,5,128,0,0,5,1,8,0,128,7,0,5,51,10,0,128,9,0,5,51,12,0,128,11,0,5,51,14,0,128,13,0,5,51,16,0,128,15,0,5,51,18,0,128,17,0,5,51,20,0,128,19,0,5,51,22,0,128,21,0,5,51,24,0,128,23,0,5,51,26,0,128,25,0,5,51,28,0,128,27,0,5,51,30,0,128,29,0,5,51,32,0,128,31,0,5,51,34,0,128,33,0,5,51,36,0,128,35,0,5,51,38,0,128,37,0,5,51,40,0,128,39,0,5,51,42,0,128,41,0,5,51,44,0,128,43,0,5,51,46,0,128,45,0,5,51,48,0,128,47,0,5,51,50,0,128,49,0,5,51,52,0,128,51,0,5,51,54,0,128,53,0,5,51,56,0,128,55,0,5,1,58,0,128,57,0,5,51,60,0,128,59,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,5,51,68,0,128,67,0,5,51,70,0,128,69,0,50],"constants":[{"t":"s","v":"ENGINE_VERBS"},{"t":"s","v":"list"},{"t":"s","v":"get"},{"t":"s","v":"post"},{"t":"s","v":"put"},{"t":"s","v":"delete"},{"t":"s","v":"patch"},{"t":"s","v":"DEFAULT_SWAP"},{"t":"s","v":"outerHTML"},{"t":"s","v":"parse-time"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,1,2,0,32,79,0,20,1,0,1,4,0,52,3,0,2,33,13,0,20,1,0,1,2,0,52,5,0,2,32,53,0,20,1,0,1,1,0,52,3,0,2,33,30,0,20,1,0,1,1,0,1,8,0,52,7,0,3,1,2,0,52,5,0,2,1,9,0,52,6,0,2,32,10,0,20,1,0,1,2,0,52,5,0,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"s"},{"t":"n","v":0},{"t":"s","v":"ends-with?"},{"t":"s","v":"ms"},{"t":"s","v":"parse-int"},{"t":"s","v":"*"},{"t":"s","v":"replace"},{"t":"s","v":""},{"t":"n","v":1000}]}},{"t":"s","v":"parse-trigger-spec"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,29,0,20,1,0,1,3,0,52,2,0,2,17,1,51,5,0,51,7,0,20,8,0,52,6,0,2,52,4,0,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"spec"},{"t":"s","v":"split"},{"t":"s","v":","},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"x"}]}},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,17,1,20,5,0,52,4,0,1,33,4,0,2,32,115,0,20,5,0,52,7,0,1,1,8,0,52,6,0,2,6,33,15,0,5,20,5,0,52,10,0,1,1,11,0,52,9,0,2,33,38,0,1,13,0,1,8,0,1,14,0,1,15,0,20,16,0,20,5,0,1,18,0,52,17,0,2,48,1,52,12,0,2,52,12,0,4,32,41,0,52,12,0,0,17,2,51,20,0,20,5,0,52,21,0,1,52,19,0,2,5,1,13,0,20,5,0,52,7,0,1,1,14,0,20,22,0,52,12,0,4,50],"constants":[{"t":"s","v":"split"},{"t":"s","v":"trim"},{"t":"s","v":"part"},{"t":"s","v":" "},{"t":"s","v":"empty?"},{"t":"s","v":"tokens"},{"t":"s","v":"="},{"t":"s","v":"first"},{"t":"s","v":"every"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"dict"},{"t":"s","v":"event"},{"t":"s","v":"modifiers"},{"t":"s","v":"interval"},{"t":"s","v":"parse-time"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,14,0,20,4,0,1,2,0,3,52,3,0,3,32,105,0,20,1,0,1,5,0,52,0,0,2,33,14,0,20,4,0,1,5,0,3,52,3,0,3,32,78,0,20,1,0,1,7,0,52,6,0,2,33,28,0,20,4,0,1,8,0,20,9,0,20,1,0,1,11,0,52,10,0,2,48,1,52,3,0,3,32,37,0,20,1,0,1,12,0,52,6,0,2,33,23,0,20,4,0,1,13,0,20,1,0,1,14,0,52,10,0,2,52,3,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"tok"},{"t":"s","v":"once"},{"t":"s","v":"dict-set!"},{"t":"s","v":"mods"},{"t":"s","v":"changed"},{"t":"s","v":"starts-with?"},{"t":"s","v":"delay:"},{"t":"s","v":"delay"},{"t":"s","v":"parse-time"},{"t":"s","v":"slice"},{"t":"n","v":6},{"t":"s","v":"from:"},{"t":"s","v":"from"},{"t":"n","v":5}]}},{"t":"s","v":"rest"},{"t":"s","v":"mods"}]}},{"t":"s","v":"raw-parts"}]}},{"t":"s","v":"default-trigger"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,24,0,1,5,0,1,6,0,1,7,0,52,4,0,0,52,4,0,4,52,3,0,1,32,88,0,20,1,0,1,8,0,52,0,0,2,6,34,26,0,5,20,1,0,1,9,0,52,0,0,2,6,34,11,0,5,20,1,0,1,10,0,52,0,0,2,33,24,0,1,5,0,1,11,0,1,7,0,52,4,0,0,52,4,0,4,52,3,0,1,32,21,0,1,5,0,1,12,0,1,7,0,52,4,0,0,52,4,0,4,52,3,0,1,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"tag-name"},{"t":"s","v":"FORM"},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"event"},{"t":"s","v":"submit"},{"t":"s","v":"modifiers"},{"t":"s","v":"INPUT"},{"t":"s","v":"SELECT"},{"t":"s","v":"TEXTAREA"},{"t":"s","v":"change"},{"t":"s","v":"click"}]}},{"t":"s","v":"get-verb-info"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,20,4,0,52,2,0,2,48,2,17,1,20,5,0,33,23,0,1,7,0,20,4,0,52,8,0,1,1,5,0,20,5,0,52,6,0,4,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"str"},{"t":"s","v":"sx-"},{"t":"s","v":"verb"},{"t":"s","v":"url"},{"t":"s","v":"dict"},{"t":"s","v":"method"},{"t":"s","v":"upper"}]}},{"t":"s","v":"ENGINE_VERBS"}]}},{"t":"s","v":"build-request-headers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,1,2,0,1,3,0,20,4,0,48,0,52,0,0,4,17,3,20,5,0,20,6,0,1,7,0,48,2,17,4,20,8,0,33,16,0,20,10,0,1,11,0,20,8,0,52,9,0,3,32,1,0,2,5,20,5,0,20,12,0,1,13,0,48,1,1,14,0,48,2,17,4,20,15,0,33,16,0,20,10,0,1,16,0,20,15,0,52,9,0,3,32,1,0,2,5,20,17,0,33,16,0,20,10,0,1,18,0,20,17,0,52,9,0,3,32,1,0,2,5,20,5,0,20,6,0,1,19,0,48,2,17,4,20,20,0,33,37,0,20,21,0,20,20,0,48,1,17,5,20,22,0,33,17,0,51,24,0,20,22,0,52,25,0,1,52,23,0,2,32,1,0,2,32,1,0,2,5,20,10,0,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"SX-Request"},{"t":"s","v":"true"},{"t":"s","v":"SX-Current-URL"},{"t":"s","v":"browser-location-href"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-target"},{"t":"s","v":"target-sel"},{"t":"s","v":"dict-set!"},{"t":"s","v":"headers"},{"t":"s","v":"SX-Target"},{"t":"s","v":"dom-query"},{"t":"s","v":"script[data-components][data-hash]"},{"t":"s","v":"data-hash"},{"t":"s","v":"comp-hash"},{"t":"s","v":"SX-Components-Hash"},{"t":"s","v":"css-hash"},{"t":"s","v":"SX-Css"},{"t":"s","v":"sx-headers"},{"t":"s","v":"extra-h"},{"t":"s","v":"parse-header-value"},{"t":"s","v":"parsed"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,5,0,20,2,0,52,4,0,2,52,3,0,1,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"headers"},{"t":"s","v":"key"},{"t":"s","v":"str"},{"t":"s","v":"get"},{"t":"s","v":"parsed"}]}},{"t":"s","v":"keys"}]}},{"t":"s","v":"process-response-headers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,20,2,0,1,3,0,48,1,1,4,0,20,2,0,1,5,0,48,1,1,6,0,20,2,0,1,7,0,48,1,1,8,0,20,2,0,1,9,0,48,1,1,10,0,20,2,0,1,11,0,48,1,1,12,0,20,2,0,1,13,0,48,1,1,14,0,20,2,0,1,15,0,48,1,1,16,0,20,2,0,1,17,0,48,1,1,18,0,20,2,0,1,19,0,48,1,1,20,0,20,2,0,1,21,0,48,1,1,22,0,20,2,0,1,23,0,48,1,1,24,0,20,2,0,1,25,0,48,1,1,26,0,20,2,0,1,27,0,48,1,52,0,0,26,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"redirect"},{"t":"s","v":"get-header"},{"t":"s","v":"SX-Redirect"},{"t":"s","v":"refresh"},{"t":"s","v":"SX-Refresh"},{"t":"s","v":"trigger"},{"t":"s","v":"SX-Trigger"},{"t":"s","v":"retarget"},{"t":"s","v":"SX-Retarget"},{"t":"s","v":"reswap"},{"t":"s","v":"SX-Reswap"},{"t":"s","v":"location"},{"t":"s","v":"SX-Location"},{"t":"s","v":"replace-url"},{"t":"s","v":"SX-Replace-Url"},{"t":"s","v":"css-hash"},{"t":"s","v":"SX-Css-Hash"},{"t":"s","v":"trigger-swap"},{"t":"s","v":"SX-Trigger-After-Swap"},{"t":"s","v":"trigger-settle"},{"t":"s","v":"SX-Trigger-After-Settle"},{"t":"s","v":"content-type"},{"t":"s","v":"Content-Type"},{"t":"s","v":"cache-invalidate"},{"t":"s","v":"SX-Cache-Invalidate"},{"t":"s","v":"cache-update"},{"t":"s","v":"SX-Cache-Update"}]}},{"t":"s","v":"parse-swap-spec"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,6,34,4,0,5,20,2,0,1,3,0,52,0,0,2,17,2,20,5,0,52,4,0,1,17,3,20,6,0,17,4,51,8,0,20,5,0,52,9,0,1,52,7,0,2,5,1,11,0,20,11,0,1,12,0,20,13,0,52,10,0,4,50],"constants":[{"t":"s","v":"split"},{"t":"s","v":"raw-swap"},{"t":"s","v":"DEFAULT_SWAP"},{"t":"s","v":" "},{"t":"s","v":"first"},{"t":"s","v":"parts"},{"t":"s","v":"global-transitions?"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,7,0,3,21,3,0,32,21,0,20,1,0,1,4,0,52,0,0,2,33,7,0,4,21,3,0,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"p"},{"t":"s","v":"transition:true"},{"t":"s","v":"use-transition"},{"t":"s","v":"transition:false"}]}},{"t":"s","v":"rest"},{"t":"s","v":"dict"},{"t":"s","v":"style"},{"t":"s","v":"transition"},{"t":"s","v":"use-transition"}]}},{"t":"s","v":"parse-retry-spec"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,66,0,20,1,0,1,3,0,52,2,0,2,17,1,1,5,0,20,7,0,52,6,0,1,1,8,0,20,7,0,1,11,0,52,10,0,2,1,12,0,52,9,0,2,1,13,0,20,7,0,1,14,0,52,10,0,2,1,15,0,52,9,0,2,52,4,0,6,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"retry-attr"},{"t":"s","v":"split"},{"t":"s","v":":"},{"t":"s","v":"dict"},{"t":"s","v":"strategy"},{"t":"s","v":"first"},{"t":"s","v":"parts"},{"t":"s","v":"start-ms"},{"t":"s","v":"parse-int"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"n","v":1000},{"t":"s","v":"cap-ms"},{"t":"n","v":2},{"t":"n","v":30000}]}},{"t":"s","v":"next-retry-ms"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"min"},{"t":"s","v":"*"},{"t":"s","v":"current-ms"},{"t":"n","v":2},{"t":"s","v":"cap-ms"}]}},{"t":"s","v":"filter-params"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,2,0,32,120,0,20,1,0,1,4,0,52,3,0,2,33,7,0,52,5,0,0,32,100,0,20,1,0,1,6,0,52,3,0,2,33,6,0,20,2,0,32,81,0,20,1,0,1,8,0,52,7,0,2,33,39,0,20,10,0,20,1,0,1,13,0,52,12,0,2,1,14,0,52,11,0,2,52,9,0,2,17,2,51,16,0,20,2,0,52,15,0,2,32,29,0,20,10,0,20,1,0,1,14,0,52,11,0,2,52,9,0,2,17,2,51,17,0,20,2,0,52,15,0,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"params-spec"},{"t":"s","v":"all-params"},{"t":"s","v":"="},{"t":"s","v":"none"},{"t":"s","v":"list"},{"t":"s","v":"*"},{"t":"s","v":"starts-with?"},{"t":"s","v":"not "},{"t":"s","v":"map"},{"t":"s","v":"trim"},{"t":"s","v":"split"},{"t":"s","v":"slice"},{"t":"n","v":4},{"t":"s","v":","},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,4,0,52,3,0,1,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"excluded"},{"t":"s","v":"first"},{"t":"s","v":"p"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"allowed"},{"t":"s","v":"first"},{"t":"s","v":"p"}]}}]}},{"t":"s","v":"resolve-target"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,4,0,52,3,0,1,6,34,11,0,5,20,4,0,1,6,0,52,5,0,2,33,6,0,20,1,0,32,32,0,20,4,0,1,7,0,52,5,0,2,33,11,0,20,8,0,20,1,0,49,1,32,8,0,20,9,0,20,4,0,49,1,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-target"},{"t":"s","v":"nil?"},{"t":"s","v":"sel"},{"t":"s","v":"="},{"t":"s","v":"this"},{"t":"s","v":"closest"},{"t":"s","v":"dom-parent"},{"t":"s","v":"dom-query"}]}},{"t":"s","v":"apply-optimistic"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,4,0,52,3,0,1,33,4,0,2,32,211,0,20,5,0,20,1,0,48,1,6,34,4,0,5,20,1,0,17,2,1,7,0,20,7,0,1,4,0,20,4,0,52,6,0,4,17,3,20,4,0,1,9,0,52,8,0,2,33,54,0,20,11,0,1,12,0,20,13,0,20,7,0,1,12,0,48,2,52,10,0,3,5,20,14,0,20,7,0,1,12,0,1,15,0,48,3,5,20,14,0,20,7,0,1,16,0,1,17,0,48,3,32,104,0,20,4,0,1,18,0,52,8,0,2,33,37,0,20,11,0,1,19,0,20,20,0,20,7,0,1,19,0,48,2,52,10,0,3,5,20,21,0,20,7,0,1,19,0,3,48,3,32,54,0,20,4,0,1,23,0,52,22,0,2,33,40,0,20,4,0,1,25,0,52,24,0,2,17,4,20,11,0,1,26,0,20,27,0,52,10,0,3,5,20,28,0,20,7,0,20,27,0,48,2,32,1,0,2,5,20,11,0,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-optimistic"},{"t":"s","v":"nil?"},{"t":"s","v":"directive"},{"t":"s","v":"resolve-target"},{"t":"s","v":"dict"},{"t":"s","v":"target"},{"t":"s","v":"="},{"t":"s","v":"remove"},{"t":"s","v":"dict-set!"},{"t":"s","v":"state"},{"t":"s","v":"opacity"},{"t":"s","v":"dom-get-style"},{"t":"s","v":"dom-set-style"},{"t":"s","v":"0"},{"t":"s","v":"pointer-events"},{"t":"s","v":"none"},{"t":"s","v":"disable"},{"t":"s","v":"disabled"},{"t":"s","v":"dom-get-prop"},{"t":"s","v":"dom-set-prop"},{"t":"s","v":"starts-with?"},{"t":"s","v":"add-class:"},{"t":"s","v":"slice"},{"t":"n","v":10},{"t":"s","v":"add-class"},{"t":"s","v":"cls"},{"t":"s","v":"dom-add-class"}]}},{"t":"s","v":"revert-optimistic"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,165,0,20,0,0,1,2,0,52,1,0,2,17,1,20,0,0,1,3,0,52,1,0,2,17,2,20,3,0,1,5,0,52,4,0,2,33,47,0,20,6,0,20,2,0,1,7,0,20,0,0,1,7,0,52,1,0,2,6,34,4,0,5,1,8,0,48,3,5,20,6,0,20,2,0,1,9,0,1,8,0,49,3,32,78,0,20,3,0,1,10,0,52,4,0,2,33,30,0,20,11,0,20,2,0,1,12,0,20,0,0,1,12,0,52,1,0,2,6,34,2,0,5,4,49,3,32,35,0,20,0,0,1,13,0,52,1,0,2,33,21,0,20,14,0,20,2,0,20,0,0,1,13,0,52,1,0,2,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"state"},{"t":"s","v":"get"},{"t":"s","v":"target"},{"t":"s","v":"directive"},{"t":"s","v":"="},{"t":"s","v":"remove"},{"t":"s","v":"dom-set-style"},{"t":"s","v":"opacity"},{"t":"s","v":""},{"t":"s","v":"pointer-events"},{"t":"s","v":"disable"},{"t":"s","v":"dom-set-prop"},{"t":"s","v":"disabled"},{"t":"s","v":"add-class"},{"t":"s","v":"dom-remove-class"}]}},{"t":"s","v":"find-oob-swaps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,1,51,2,0,1,3,0,1,4,0,52,0,0,2,52,1,0,2,5,20,5,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,20,4,0,1,5,0,52,2,0,3,48,2,17,1,51,7,0,20,8,0,52,6,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"container"},{"t":"s","v":"str"},{"t":"s","v":"["},{"t":"s","v":"attr"},{"t":"s","v":"]"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,6,34,4,0,5,1,3,0,17,1,20,4,0,20,1,0,48,1,17,2,20,5,0,20,1,0,20,2,0,48,2,5,20,6,0,33,33,0,20,7,0,20,8,0,1,10,0,20,1,0,1,11,0,20,11,0,1,6,0,20,6,0,52,9,0,6,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"oob"},{"t":"s","v":"attr"},{"t":"s","v":"outerHTML"},{"t":"s","v":"dom-id"},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"target-id"},{"t":"s","v":"append!"},{"t":"s","v":"results"},{"t":"s","v":"dict"},{"t":"s","v":"element"},{"t":"s","v":"swap-type"}]}},{"t":"s","v":"oob-els"}]}},{"t":"s","v":"sx-swap-oob"},{"t":"s","v":"hx-swap-oob"},{"t":"s","v":"results"}]}},{"t":"s","v":"morph-node"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,12,0,5,20,0,0,20,1,0,1,3,0,48,2,33,4,0,2,32,183,1,20,0,0,20,1,0,1,4,0,48,2,6,33,59,0,5,20,5,0,20,1,0,1,6,0,48,2,6,33,43,0,5,20,0,0,20,7,0,1,4,0,48,2,6,33,27,0,5,20,9,0,20,1,0,1,4,0,48,2,20,9,0,20,7,0,1,4,0,48,2,52,8,0,2,33,26,0,20,10,0,20,1,0,20,7,0,48,2,5,20,11,0,20,1,0,20,7,0,49,2,32,80,1,20,13,0,20,1,0,48,1,20,13,0,20,7,0,48,1,52,8,0,2,52,12,0,1,6,34,25,0,5,20,14,0,20,1,0,48,1,20,14,0,20,7,0,48,1,52,8,0,2,52,12,0,1,33,28,0,20,15,0,20,16,0,20,1,0,48,1,20,17,0,20,7,0,3,48,2,20,1,0,49,3,32,252,0,20,13,0,20,1,0,48,1,1,18,0,52,8,0,2,6,34,16,0,5,20,13,0,20,1,0,48,1,1,19,0,52,8,0,2,33,50,0,20,20,0,20,1,0,48,1,20,20,0,20,7,0,48,1,52,8,0,2,52,12,0,1,33,19,0,20,21,0,20,1,0,20,20,0,20,7,0,48,1,49,2,32,1,0,2,32,164,0,20,13,0,20,1,0,48,1,1,22,0,52,8,0,2,33,145,0,20,0,0,20,1,0,1,4,0,48,2,6,33,47,0,5,20,0,0,20,7,0,1,4,0,48,2,6,33,31,0,5,20,9,0,20,1,0,1,4,0,48,2,20,9,0,20,7,0,1,4,0,48,2,52,8,0,2,52,12,0,1,33,20,0,20,23,0,20,1,0,48,1,5,20,24,0,20,1,0,48,1,32,1,0,2,5,20,10,0,20,1,0,20,7,0,48,2,5,20,25,0,20,1,0,48,1,6,33,9,0,5,20,26,0,20,1,0,48,1,52,12,0,1,33,14,0,20,27,0,20,1,0,20,7,0,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"old-node"},{"t":"s","v":"sx-preserve"},{"t":"s","v":"sx-ignore"},{"t":"s","v":"data-sx-island"},{"t":"s","v":"is-processed?"},{"t":"s","v":"island-hydrated"},{"t":"s","v":"new-node"},{"t":"s","v":"="},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sync-attrs"},{"t":"s","v":"morph-island-children"},{"t":"s","v":"not"},{"t":"s","v":"dom-node-type"},{"t":"s","v":"dom-node-name"},{"t":"s","v":"dom-replace-child"},{"t":"s","v":"dom-parent"},{"t":"s","v":"dom-clone"},{"t":"n","v":3},{"t":"n","v":8},{"t":"s","v":"dom-text-content"},{"t":"s","v":"dom-set-text-content"},{"t":"n","v":1},{"t":"s","v":"dispose-island"},{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"dom-is-active-element?"},{"t":"s","v":"dom-is-input-element?"},{"t":"s","v":"morph-children"}]}},{"t":"s","v":"sync-attrs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,17,2,20,5,0,52,4,0,1,33,7,0,52,6,0,0,32,10,0,20,5,0,1,8,0,52,7,0,2,17,3,51,10,0,20,11,0,20,12,0,48,1,52,9,0,2,5,51,13,0,20,11,0,20,1,0,48,1,52,9,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"old-el"},{"t":"s","v":"data-sx-reactive-attrs"},{"t":"s","v":""},{"t":"s","v":"empty?"},{"t":"s","v":"ra-str"},{"t":"s","v":"list"},{"t":"s","v":"split"},{"t":"s","v":","},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,1,0,1,3,0,52,2,0,2,17,2,20,6,0,20,7,0,20,8,0,48,2,20,9,0,52,5,0,2,52,4,0,1,6,33,15,0,5,20,11,0,20,8,0,52,10,0,2,52,4,0,1,33,17,0,20,12,0,20,7,0,20,8,0,20,9,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"attr"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"old-el"},{"t":"s","v":"name"},{"t":"s","v":"val"},{"t":"s","v":"contains?"},{"t":"s","v":"reactive-attrs"},{"t":"s","v":"dom-set-attr"}]}},{"t":"s","v":"dom-attr-list"},{"t":"s","v":"new-el"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,3,0,20,4,0,20,5,0,48,2,52,2,0,1,6,33,34,0,5,20,7,0,20,5,0,52,6,0,2,52,2,0,1,6,33,15,0,5,20,5,0,1,9,0,52,8,0,2,52,2,0,1,33,14,0,20,10,0,20,11,0,20,5,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"attr"},{"t":"s","v":"not"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"new-el"},{"t":"s","v":"aname"},{"t":"s","v":"contains?"},{"t":"s","v":"reactive-attrs"},{"t":"s","v":"="},{"t":"s","v":"data-sx-reactive-attrs"},{"t":"s","v":"dom-remove-attr"},{"t":"s","v":"old-el"}]}}]}},{"t":"s","v":"morph-children"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,0,0,20,2,0,48,1,17,3,52,3,0,0,17,4,52,3,0,0,17,5,52,3,0,0,17,6,1,4,0,17,7,1,4,0,17,8,51,6,0,20,7,0,52,5,0,2,5,51,8,0,20,9,0,52,5,0,2,5,51,10,0,1,4,0,20,7,0,52,12,0,1,52,11,0,2,52,5,0,2,50],"constants":[{"t":"s","v":"dom-child-list"},{"t":"s","v":"old-parent"},{"t":"s","v":"new-parent"},{"t":"s","v":"dict"},{"t":"n","v":0},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,6,33,12,0,5,20,2,0,52,4,0,1,52,3,0,1,33,30,0,20,6,0,20,2,0,20,1,0,52,5,0,3,5,20,7,0,20,2,0,20,8,0,52,5,0,3,32,1,0,2,5,20,8,0,52,9,0,1,21,8,0,50],"constants":[{"t":"s","v":"dom-id"},{"t":"s","v":"kid"},{"t":"s","v":"id"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"dict-set!"},{"t":"s","v":"old-by-id"},{"t":"s","v":"old-idx-by-id"},{"t":"s","v":"idx"},{"t":"s","v":"inc"}]}},{"t":"s","v":"old-kids"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,6,33,12,0,5,20,2,0,52,4,0,1,52,3,0,1,33,6,0,20,2,0,32,1,0,2,17,2,20,5,0,33,13,0,20,7,0,20,5,0,52,6,0,2,32,1,0,2,17,3,20,8,0,6,33,12,0,5,20,8,0,52,9,0,1,52,3,0,1,33,153,0,20,10,0,20,5,0,52,6,0,2,17,4,20,11,0,33,18,0,20,13,0,20,11,0,52,14,0,1,3,52,12,0,3,32,1,0,2,5,20,16,0,20,18,0,52,17,0,1,52,15,0,2,6,33,22,0,5,20,8,0,20,18,0,20,16,0,52,20,0,2,52,19,0,2,52,3,0,1,33,45,0,20,21,0,20,22,0,20,8,0,20,16,0,20,18,0,52,17,0,1,52,15,0,2,33,13,0,20,18,0,20,16,0,52,20,0,2,32,1,0,2,48,3,32,1,0,2,5,20,23,0,20,8,0,20,1,0,48,2,5,20,16,0,52,24,0,1,21,16,0,32,154,0,20,16,0,20,18,0,52,17,0,1,52,15,0,2,33,120,0,20,18,0,20,16,0,52,20,0,2,17,4,20,0,0,20,25,0,48,1,17,5,20,26,0,6,33,24,0,5,20,26,0,52,4,0,1,52,3,0,1,6,33,8,0,5,20,5,0,52,3,0,1,33,23,0,20,21,0,20,22,0,20,27,0,20,1,0,3,48,2,20,25,0,49,3,32,38,0,20,13,0,20,16,0,52,14,0,1,3,52,12,0,3,5,20,23,0,20,25,0,20,1,0,48,2,5,20,16,0,52,24,0,1,21,16,0,32,17,0,20,28,0,20,22,0,20,27,0,20,1,0,3,48,2,49,2,50],"constants":[{"t":"s","v":"dom-id"},{"t":"s","v":"new-child"},{"t":"s","v":"raw-id"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"match-id"},{"t":"s","v":"dict-get"},{"t":"s","v":"old-by-id"},{"t":"s","v":"match-by-id"},{"t":"s","v":"nil?"},{"t":"s","v":"old-idx-by-id"},{"t":"s","v":"matched-idx"},{"t":"s","v":"dict-set!"},{"t":"s","v":"consumed"},{"t":"s","v":"str"},{"t":"s","v":"<"},{"t":"s","v":"oi"},{"t":"s","v":"len"},{"t":"s","v":"old-kids"},{"t":"s","v":"="},{"t":"s","v":"nth"},{"t":"s","v":"dom-insert-before"},{"t":"s","v":"old-parent"},{"t":"s","v":"morph-node"},{"t":"s","v":"inc"},{"t":"s","v":"old-child"},{"t":"s","v":"old-id"},{"t":"s","v":"dom-clone"},{"t":"s","v":"dom-append"}]}},{"t":"s","v":"new-kids"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,4,0,52,3,0,1,52,1,0,2,52,0,0,1,33,84,0,20,6,0,20,4,0,52,5,0,2,17,1,20,7,0,20,8,0,20,9,0,48,2,6,33,36,0,5,20,10,0,20,8,0,1,11,0,48,2,52,0,0,1,6,33,16,0,5,20,10,0,20,8,0,1,12,0,48,2,52,0,0,1,33,14,0,20,13,0,20,9,0,20,8,0,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"dict-get"},{"t":"s","v":"consumed"},{"t":"s","v":"str"},{"t":"s","v":"i"},{"t":"s","v":"nth"},{"t":"s","v":"old-kids"},{"t":"s","v":"dom-is-child-of?"},{"t":"s","v":"leftover"},{"t":"s","v":"old-parent"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"sx-preserve"},{"t":"s","v":"sx-ignore"},{"t":"s","v":"dom-remove-child"}]}},{"t":"s","v":"range"},{"t":"s","v":"len"}]}},{"t":"s","v":"morph-island-children"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,2,20,0,0,20,3,0,1,2,0,48,2,17,3,20,0,0,20,1,0,1,4,0,48,2,17,4,20,0,0,20,3,0,1,4,0,48,2,17,5,52,5,0,0,17,6,52,5,0,0,17,7,51,7,0,20,8,0,52,6,0,2,5,51,9,0,20,10,0,52,6,0,2,5,51,11,0,20,12,0,52,6,0,2,5,51,13,0,20,14,0,52,6,0,2,5,20,15,0,20,3,0,49,1,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"old-island"},{"t":"s","v":"[data-sx-lake]"},{"t":"s","v":"new-island"},{"t":"s","v":"[data-sx-marsh]"},{"t":"s","v":"dict"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,16,0,20,5,0,20,3,0,20,1,0,52,4,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"lake"},{"t":"s","v":"data-sx-lake"},{"t":"s","v":"id"},{"t":"s","v":"dict-set!"},{"t":"s","v":"new-lake-map"}]}},{"t":"s","v":"new-lakes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,16,0,20,5,0,20,3,0,20,1,0,52,4,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"marsh"},{"t":"s","v":"data-sx-marsh"},{"t":"s","v":"id"},{"t":"s","v":"dict-set!"},{"t":"s","v":"new-marsh-map"}]}},{"t":"s","v":"new-marshes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,4,0,20,5,0,52,3,0,2,17,2,20,6,0,33,26,0,20,7,0,20,1,0,20,6,0,48,2,5,20,8,0,20,1,0,20,6,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"old-lake"},{"t":"s","v":"data-sx-lake"},{"t":"s","v":"dict-get"},{"t":"s","v":"new-lake-map"},{"t":"s","v":"id"},{"t":"s","v":"new-lake"},{"t":"s","v":"sync-attrs"},{"t":"s","v":"morph-children"}]}},{"t":"s","v":"old-lakes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,4,0,20,5,0,52,3,0,2,17,2,20,6,0,33,17,0,20,7,0,20,1,0,20,6,0,20,8,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"old-marsh"},{"t":"s","v":"data-sx-marsh"},{"t":"s","v":"dict-get"},{"t":"s","v":"new-marsh-map"},{"t":"s","v":"id"},{"t":"s","v":"new-marsh"},{"t":"s","v":"morph-marsh"},{"t":"s","v":"old-island"}]}},{"t":"s","v":"old-marshes"},{"t":"s","v":"process-signal-updates"}]}},{"t":"s","v":"morph-marsh"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,3,20,0,0,20,1,0,1,3,0,48,2,17,4,20,4,0,20,5,0,48,1,17,5,20,6,0,6,33,20,0,5,20,7,0,6,33,12,0,5,20,7,0,52,9,0,1,52,8,0,1,33,62,0,20,10,0,20,7,0,48,1,17,6,20,11,0,33,18,0,20,12,0,20,11,0,20,14,0,52,13,0,1,48,2,32,3,0,20,14,0,17,7,20,15,0,20,1,0,48,1,5,20,16,0,20,1,0,51,17,0,49,2,32,23,0,20,18,0,20,1,0,20,5,0,48,2,5,20,19,0,20,1,0,20,5,0,49,2,50],"constants":[{"t":"s","v":"dom-get-data"},{"t":"s","v":"old-marsh"},{"t":"s","v":"sx-marsh-transform"},{"t":"s","v":"sx-marsh-env"},{"t":"s","v":"dom-inner-html"},{"t":"s","v":"new-marsh"},{"t":"s","v":"env"},{"t":"s","v":"new-html"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"parse"},{"t":"s","v":"transform"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"parsed"},{"t":"s","v":"dispose-marsh-scope"},{"t":"s","v":"with-marsh-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,2,48,3,17,0,20,3,0,20,4,0,2,48,2,5,20,5,0,20,4,0,20,6,0,49,2,50],"constants":[{"t":"s","v":"render-to-dom"},{"t":"s","v":"sx-content"},{"t":"s","v":"env"},{"t":"s","v":"dom-remove-children-after"},{"t":"s","v":"old-marsh"},{"t":"s","v":"dom-append"},{"t":"s","v":"new-dom"}]}},{"t":"s","v":"sync-attrs"},{"t":"s","v":"morph-children"}]}},{"t":"s","v":"process-signal-updates"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,51,4,0,20,5,0,52,3,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"[data-sx-signal]"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,103,0,20,3,0,1,5,0,52,4,0,2,17,2,20,7,0,1,8,0,52,6,0,2,33,74,0,20,3,0,1,8,0,20,7,0,52,9,0,3,17,3,20,3,0,20,7,0,1,11,0,52,10,0,2,52,9,0,2,17,4,20,12,0,20,13,0,48,1,17,5,20,14,0,20,16,0,52,15,0,1,20,17,0,48,2,5,20,18,0,20,1,0,1,2,0,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-signal"},{"t":"s","v":"spec"},{"t":"s","v":"index-of"},{"t":"s","v":":"},{"t":"s","v":">"},{"t":"s","v":"colon-idx"},{"t":"n","v":0},{"t":"s","v":"slice"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"json-parse"},{"t":"s","v":"raw-value"},{"t":"s","v":"reset!"},{"t":"s","v":"use-store"},{"t":"s","v":"store-name"},{"t":"s","v":"parsed"},{"t":"s","v":"dom-remove-attr"}]}},{"t":"s","v":"signal-els"}]}},{"t":"s","v":"swap-dom-nodes"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,1,1,0,52,2,0,2,33,63,0,5,20,3,0,20,4,0,48,1,33,14,0,20,5,0,20,6,0,20,4,0,49,2,32,34,0,20,7,0,1,8,0,2,48,2,17,3,20,9,0,20,10,0,20,4,0,48,2,5,20,5,0,20,6,0,20,10,0,49,2,32,113,1,6,1,11,0,52,2,0,2,33,139,0,5,20,12,0,20,6,0,48,1,17,3,20,13,0,20,4,0,3,48,2,17,4,20,3,0,20,4,0,48,1,33,85,0,20,14,0,20,4,0,48,1,17,5,20,15,0,33,55,0,20,13,0,20,15,0,3,48,2,21,16,0,5,20,17,0,20,18,0,20,16,0,20,6,0,48,3,5,20,19,0,20,15,0,48,1,17,6,20,20,0,20,18,0,20,16,0,20,21,0,48,3,32,11,0,20,22,0,20,18,0,20,6,0,48,2,32,14,0,20,17,0,20,18,0,20,16,0,20,6,0,48,3,5,20,16,0,32,219,0,6,1,23,0,52,2,0,2,33,15,0,5,20,24,0,20,6,0,20,4,0,49,2,32,193,0,6,1,25,0,52,2,0,2,33,15,0,5,20,9,0,20,6,0,20,4,0,49,2,32,167,0,6,1,26,0,52,2,0,2,33,15,0,5,20,27,0,20,6,0,20,4,0,49,2,32,141,0,6,1,28,0,52,2,0,2,33,23,0,5,20,29,0,20,12,0,20,6,0,48,1,20,4,0,20,6,0,49,3,32,107,0,6,1,30,0,52,2,0,2,33,20,0,5,20,22,0,20,12,0,20,6,0,48,1,20,6,0,49,2,32,76,0,6,1,31,0,52,2,0,2,33,5,0,5,2,32,60,0,5,20,3,0,20,4,0,48,1,33,14,0,20,5,0,20,6,0,20,4,0,49,2,32,34,0,20,7,0,1,8,0,2,48,2,17,3,20,9,0,20,10,0,20,4,0,48,2,5,20,5,0,20,6,0,20,10,0,49,2,50],"constants":[{"t":"s","v":"strategy"},{"t":"s","v":"innerHTML"},{"t":"s","v":"="},{"t":"s","v":"dom-is-fragment?"},{"t":"s","v":"new-nodes"},{"t":"s","v":"morph-children"},{"t":"s","v":"target"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-append"},{"t":"s","v":"wrapper"},{"t":"s","v":"outerHTML"},{"t":"s","v":"dom-parent"},{"t":"s","v":"dom-clone"},{"t":"s","v":"dom-first-child"},{"t":"s","v":"fc"},{"t":"s","v":"new-el"},{"t":"s","v":"dom-replace-child"},{"t":"s","v":"parent"},{"t":"s","v":"dom-next-sibling"},{"t":"s","v":"insert-remaining-siblings"},{"t":"s","v":"sib"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"afterend"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"beforeend"},{"t":"s","v":"afterbegin"},{"t":"s","v":"dom-prepend"},{"t":"s","v":"beforebegin"},{"t":"s","v":"dom-insert-before"},{"t":"s","v":"delete"},{"t":"s","v":"none"}]}},{"t":"s","v":"insert-remaining-siblings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,39,0,20,1,0,20,0,0,48,1,17,3,20,2,0,20,3,0,20,0,0,48,2,5,20,4,0,20,5,0,20,0,0,20,6,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"sib"},{"t":"s","v":"dom-next-sibling"},{"t":"s","v":"dom-insert-after"},{"t":"s","v":"ref-node"},{"t":"s","v":"insert-remaining-siblings"},{"t":"s","v":"parent"},{"t":"s","v":"next"}]}},{"t":"s","v":"swap-html-string"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,1,1,0,52,2,0,2,33,15,0,5,20,3,0,20,4,0,20,5,0,49,2,32,230,0,6,1,6,0,52,2,0,2,33,44,0,5,20,7,0,20,4,0,48,1,17,3,20,8,0,20,4,0,1,9,0,20,5,0,48,3,5,20,10,0,20,11,0,20,4,0,48,2,5,20,11,0,32,175,0,6,1,9,0,52,2,0,2,33,18,0,5,20,8,0,20,4,0,1,9,0,20,5,0,49,3,32,146,0,6,1,12,0,52,2,0,2,33,18,0,5,20,8,0,20,4,0,1,12,0,20,5,0,49,3,32,117,0,6,1,13,0,52,2,0,2,33,18,0,5,20,8,0,20,4,0,1,13,0,20,5,0,49,3,32,88,0,6,1,14,0,52,2,0,2,33,18,0,5,20,8,0,20,4,0,1,14,0,20,5,0,49,3,32,59,0,6,1,15,0,52,2,0,2,33,20,0,5,20,10,0,20,7,0,20,4,0,48,1,20,4,0,49,2,32,28,0,6,1,16,0,52,2,0,2,33,5,0,5,2,32,12,0,5,20,3,0,20,4,0,20,5,0,49,2,50],"constants":[{"t":"s","v":"strategy"},{"t":"s","v":"innerHTML"},{"t":"s","v":"="},{"t":"s","v":"dom-set-inner-html"},{"t":"s","v":"target"},{"t":"s","v":"html"},{"t":"s","v":"outerHTML"},{"t":"s","v":"dom-parent"},{"t":"s","v":"dom-insert-adjacent-html"},{"t":"s","v":"afterend"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"parent"},{"t":"s","v":"beforeend"},{"t":"s","v":"afterbegin"},{"t":"s","v":"beforebegin"},{"t":"s","v":"delete"},{"t":"s","v":"none"}]}},{"t":"s","v":"handle-history"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,3,20,0,0,20,1,0,1,3,0,48,2,17,4,20,5,0,1,6,0,52,4,0,2,17,5,20,7,0,33,11,0,20,8,0,20,7,0,49,1,32,111,0,20,9,0,6,33,15,0,5,20,9,0,1,12,0,52,11,0,2,52,10,0,1,33,30,0,20,13,0,20,9,0,1,14,0,52,11,0,2,33,6,0,20,15,0,32,3,0,20,9,0,49,1,32,56,0,20,6,0,6,33,15,0,5,20,6,0,1,12,0,52,11,0,2,52,10,0,1,33,30,0,20,8,0,20,6,0,1,14,0,52,11,0,2,33,6,0,20,15,0,32,3,0,20,6,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-push-url"},{"t":"s","v":"sx-replace-url"},{"t":"s","v":"get"},{"t":"s","v":"resp-headers"},{"t":"s","v":"replace-url"},{"t":"s","v":"hdr-replace"},{"t":"s","v":"browser-replace-state"},{"t":"s","v":"push-url"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"false"},{"t":"s","v":"browser-push-state"},{"t":"s","v":"true"},{"t":"s","v":"url"}]}},{"t":"s","v":"PRELOAD_TTL"},{"t":"n","v":30000},{"t":"s","v":"preload-cache-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,2,20,4,0,52,3,0,1,33,4,0,2,32,58,0,20,7,0,48,0,20,4,0,1,9,0,52,8,0,2,52,6,0,2,20,10,0,52,5,0,2,33,15,0,20,1,0,20,2,0,52,11,0,2,5,2,32,14,0,20,1,0,20,2,0,52,11,0,2,5,20,4,0,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"cache"},{"t":"s","v":"url"},{"t":"s","v":"nil?"},{"t":"s","v":"entry"},{"t":"s","v":">"},{"t":"s","v":"-"},{"t":"s","v":"now-ms"},{"t":"s","v":"get"},{"t":"s","v":"timestamp"},{"t":"s","v":"PRELOAD_TTL"},{"t":"s","v":"dict-delete!"}]}},{"t":"s","v":"preload-cache-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,4,0,20,4,0,1,5,0,20,5,0,1,6,0,20,7,0,48,0,52,3,0,6,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"cache"},{"t":"s","v":"url"},{"t":"s","v":"dict"},{"t":"s","v":"text"},{"t":"s","v":"content-type"},{"t":"s","v":"timestamp"},{"t":"s","v":"now-ms"}]}},{"t":"s","v":"classify-trigger"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,2,0,1,4,0,52,3,0,2,33,6,0,1,5,0,32,60,0,20,2,0,1,6,0,52,3,0,2,33,6,0,1,6,0,32,41,0,20,2,0,1,7,0,52,3,0,2,33,6,0,1,7,0,32,22,0,20,2,0,1,8,0,52,3,0,2,33,6,0,1,8,0,32,3,0,1,2,0,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"trigger"},{"t":"s","v":"event"},{"t":"s","v":"="},{"t":"s","v":"every"},{"t":"s","v":"poll"},{"t":"s","v":"intersect"},{"t":"s","v":"load"},{"t":"s","v":"revealed"}]}},{"t":"s","v":"should-boost-link?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,2,0,6,33,126,0,5,20,2,0,1,5,0,52,4,0,2,52,3,0,1,6,33,107,0,5,20,2,0,1,6,0,52,4,0,2,52,3,0,1,6,33,88,0,5,20,2,0,1,7,0,52,4,0,2,52,3,0,1,6,33,69,0,5,20,8,0,20,2,0,48,1,6,33,56,0,5,20,9,0,20,1,0,1,10,0,48,2,52,3,0,1,6,33,36,0,5,20,9,0,20,1,0,1,11,0,48,2,52,3,0,1,6,33,16,0,5,20,9,0,20,1,0,1,12,0,48,2,52,3,0,1,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"link"},{"t":"s","v":"href"},{"t":"s","v":"not"},{"t":"s","v":"starts-with?"},{"t":"s","v":"#"},{"t":"s","v":"javascript:"},{"t":"s","v":"mailto:"},{"t":"s","v":"browser-same-origin?"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"sx-get"},{"t":"s","v":"sx-post"},{"t":"s","v":"sx-disable"}]}},{"t":"s","v":"should-boost-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,6,33,36,0,5,20,1,0,20,2,0,1,4,0,48,2,52,0,0,1,6,33,16,0,5,20,1,0,20,2,0,1,5,0,48,2,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"form"},{"t":"s","v":"sx-get"},{"t":"s","v":"sx-post"},{"t":"s","v":"sx-disable"}]}},{"t":"s","v":"parse-sse-swap"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-sse-swap"},{"t":"s","v":"message"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/freeze.sxbc.json b/shared/static/wasm/sx/freeze.sxbc.json new file mode 100644 index 00000000..5981426a --- /dev/null +++ b/shared/static/wasm/sx/freeze.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"bfa1b3e64a390451","module":{"arity":0,"bytecode":[52,1,0,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,50],"constants":[{"t":"s","v":"freeze-registry"},{"t":"s","v":"dict"},{"t":"s","v":"freeze-signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,2,48,2,17,2,20,2,0,33,62,0,20,4,0,20,2,0,52,3,0,2,6,34,5,0,5,52,5,0,0,17,3,20,6,0,20,7,0,1,9,0,20,9,0,1,10,0,20,11,0,52,8,0,4,48,2,5,20,4,0,20,2,0,20,7,0,52,12,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"context"},{"t":"s","v":"sx-freeze-scope"},{"t":"s","v":"scope-name"},{"t":"s","v":"get"},{"t":"s","v":"freeze-registry"},{"t":"s","v":"list"},{"t":"s","v":"append!"},{"t":"s","v":"entries"},{"t":"s","v":"dict"},{"t":"s","v":"name"},{"t":"s","v":"signal"},{"t":"s","v":"sig"},{"t":"s","v":"dict-set!"}]}},{"t":"s","v":"freeze-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,2,0,48,2,5,20,4,0,20,2,0,52,5,0,0,52,3,0,3,5,20,6,0,20,7,0,2,48,2,5,20,8,0,1,1,0,48,1,5,2,50],"constants":[{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-freeze-scope"},{"t":"s","v":"name"},{"t":"s","v":"dict-set!"},{"t":"s","v":"freeze-registry"},{"t":"s","v":"list"},{"t":"s","v":"cek-call"},{"t":"s","v":"body-fn"},{"t":"s","v":"scope-pop!"}]}},{"t":"s","v":"cek-freeze-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,6,34,5,0,5,52,3,0,0,17,1,52,4,0,0,17,2,51,6,0,20,7,0,52,5,0,2,5,1,2,0,20,2,0,1,8,0,20,9,0,52,4,0,4,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"freeze-registry"},{"t":"s","v":"name"},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,1,4,0,52,2,0,2,20,5,0,20,3,0,1,6,0,52,2,0,2,48,1,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"signals-dict"},{"t":"s","v":"get"},{"t":"s","v":"entry"},{"t":"s","v":"name"},{"t":"s","v":"signal-value"},{"t":"s","v":"signal"}]}},{"t":"s","v":"entries"},{"t":"s","v":"signals"},{"t":"s","v":"signals-dict"}]}},{"t":"s","v":"cek-freeze-all"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"cek-freeze-scope"},{"t":"s","v":"name"}]}},{"t":"s","v":"keys"},{"t":"s","v":"freeze-registry"}]}},{"t":"s","v":"cek-thaw-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,6,34,5,0,5,52,3,0,0,17,2,20,4,0,1,5,0,52,0,0,2,17,3,20,6,0,33,13,0,51,8,0,20,9,0,52,7,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"freeze-registry"},{"t":"s","v":"name"},{"t":"s","v":"list"},{"t":"s","v":"frozen"},{"t":"s","v":"signals"},{"t":"s","v":"values"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,1,0,1,3,0,52,0,0,2,17,2,20,4,0,20,5,0,52,0,0,2,17,3,20,8,0,52,7,0,1,52,6,0,1,33,14,0,20,9,0,20,10,0,20,8,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"entry"},{"t":"s","v":"name"},{"t":"s","v":"signal"},{"t":"s","v":"values"},{"t":"s","v":"sig-name"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"val"},{"t":"s","v":"reset!"},{"t":"s","v":"sig"}]}},{"t":"s","v":"entries"}]}},{"t":"s","v":"cek-thaw-all"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,20,2,0,49,2,50],"constants":[{"t":"s","v":"cek-thaw-scope"},{"t":"s","v":"get"},{"t":"s","v":"frozen"},{"t":"s","v":"name"}]}},{"t":"s","v":"frozen-list"}]}},{"t":"s","v":"freeze-to-sx"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,1,49,1,50],"constants":[{"t":"s","v":"sx-serialize"},{"t":"s","v":"cek-freeze-scope"},{"t":"s","v":"name"}]}},{"t":"s","v":"thaw-from-sx"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,4,0,52,3,0,1,52,2,0,1,33,30,0,20,4,0,52,5,0,1,17,2,20,6,0,20,8,0,1,9,0,52,7,0,2,20,8,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"sx-parse"},{"t":"s","v":"sx-text"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"parsed"},{"t":"s","v":"first"},{"t":"s","v":"cek-thaw-scope"},{"t":"s","v":"get"},{"t":"s","v":"frozen"},{"t":"s","v":"name"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/harness-reactive.sxbc.json b/shared/static/wasm/sx/harness-reactive.sxbc.json new file mode 100644 index 00000000..6aa95a32 --- /dev/null +++ b/shared/static/wasm/sx/harness-reactive.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"f1f561c2cbe0aa76","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,50],"constants":[{"t":"s","v":"assert-signal-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,3,0,20,4,0,1,6,0,20,4,0,1,7,0,20,3,0,52,5,0,4,49,3,50],"constants":[{"t":"s","v":"deref"},{"t":"s","v":"sig"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected signal value "},{"t":"s","v":", got "}]}},{"t":"s","v":"assert-signal-has-subscribers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,3,0,20,4,0,48,1,52,2,0,1,1,5,0,52,1,0,2,1,6,0,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"s","v":"signal-subscribers"},{"t":"s","v":"sig"},{"t":"n","v":0},{"t":"s","v":"Expected signal to have subscribers"}]}},{"t":"s","v":"assert-signal-no-subscribers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,3,0,20,4,0,48,1,52,2,0,1,1,5,0,52,1,0,2,1,6,0,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"s","v":"signal-subscribers"},{"t":"s","v":"sig"},{"t":"n","v":0},{"t":"s","v":"Expected signal to have no subscribers"}]}},{"t":"s","v":"assert-signal-subscriber-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,17,2,20,3,0,20,4,0,20,5,0,1,7,0,20,5,0,1,8,0,20,4,0,52,6,0,4,49,3,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"signal-subscribers"},{"t":"s","v":"sig"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"n"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" subscribers, got "}]}},{"t":"s","v":"simulate-signal-set!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"reset!"},{"t":"s","v":"sig"},{"t":"s","v":"value"}]}},{"t":"s","v":"simulate-signal-swap!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"swap!"},{"t":"s","v":"sig"},{"t":"s","v":"f"}]}},{"t":"s","v":"assert-computed-dep-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,48,1,52,0,0,1,17,2,20,3,0,20,4,0,20,5,0,1,7,0,20,5,0,1,8,0,20,4,0,52,6,0,4,49,3,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"signal-deps"},{"t":"s","v":"sig"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"n"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" deps, got "}]}},{"t":"s","v":"assert-computed-depends-on"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,48,1,20,4,0,52,1,0,2,1,5,0,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"contains?"},{"t":"s","v":"signal-deps"},{"t":"s","v":"computed-sig"},{"t":"s","v":"dep-sig"},{"t":"s","v":"Expected computed to depend on the given signal"}]}},{"t":"s","v":"count-effect-runs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,1,20,2,0,51,3,0,48,1,5,1,1,0,17,2,20,2,0,51,4,0,48,1,17,3,20,5,0,50],"constants":[{"t":"s","v":"signal"},{"t":"n","v":0},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"deref"},{"t":"s","v":"count"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,21,1,0,5,20,3,0,20,4,0,2,49,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"run-count"},{"t":"n","v":1},{"t":"s","v":"cek-call"},{"t":"s","v":"thunk"}]}},{"t":"s","v":"run-count"}]}},{"t":"s","v":"make-test-signal"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,52,2,0,0,17,2,20,3,0,51,4,0,48,1,5,1,0,0,20,5,0,1,6,0,20,6,0,65,2,0,50],"constants":[{"t":"s","v":"signal"},{"t":"s","v":"initial-value"},{"t":"s","v":"list"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,1,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"history"},{"t":"s","v":"deref"},{"t":"s","v":"sig"}]}},{"t":"s","v":"sig"},{"t":"s","v":"history"}]}},{"t":"s","v":"assert-batch-coalesces"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,17,2,20,1,0,1,0,0,48,1,17,3,20,2,0,51,3,0,48,1,5,1,0,0,21,4,0,5,20,5,0,20,6,0,48,1,5,20,7,0,20,4,0,20,8,0,1,10,0,20,8,0,1,11,0,20,4,0,52,9,0,4,49,3,50],"constants":[{"t":"n","v":0},{"t":"s","v":"signal"},{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,3,0,1,4,0,52,2,0,2,21,3,0,50],"constants":[{"t":"s","v":"deref"},{"t":"s","v":"sig"},{"t":"s","v":"+"},{"t":"s","v":"notify-count"},{"t":"n","v":1}]}},{"t":"s","v":"notify-count"},{"t":"s","v":"batch"},{"t":"s","v":"thunk"},{"t":"s","v":"assert="},{"t":"s","v":"expected-notify-count"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" notifications, got "}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/harness-web.sxbc.json b/shared/static/wasm/sx/harness-web.sxbc.json new file mode 100644 index 00000000..f68707d6 --- /dev/null +++ b/shared/static/wasm/sx/harness-web.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"0e39f01af5f0164d","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,50],"constants":[{"t":"s","v":"mock-element"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,52,1,0,0,1,2,0,65,0,0,1,3,0,52,1,0,0,1,4,0,20,4,0,1,5,0,1,6,0,1,7,0,65,0,0,20,9,0,33,12,0,1,9,0,20,9,0,65,1,0,32,3,0,65,0,0,20,10,0,33,12,0,1,10,0,20,10,0,65,1,0,32,3,0,65,0,0,52,8,0,3,65,6,0,50],"constants":[{"t":"s","v":"children"},{"t":"s","v":"list"},{"t":"s","v":"listeners"},{"t":"s","v":"event-log"},{"t":"s","v":"tag"},{"t":"s","v":"text"},{"t":"s","v":""},{"t":"s","v":"attrs"},{"t":"s","v":"merge"},{"t":"s","v":"class"},{"t":"s","v":"id"}]}},{"t":"s","v":"mock-set-text!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,20,2,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"el"},{"t":"s","v":"text"}]}},{"t":"s","v":"mock-append-child!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,20,4,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"get"},{"t":"s","v":"parent"},{"t":"s","v":"children"},{"t":"s","v":"child"}]}},{"t":"s","v":"mock-set-attr!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,20,5,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"attrs"},{"t":"s","v":"name"},{"t":"s","v":"value"}]}},{"t":"s","v":"mock-get-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"attrs"},{"t":"s","v":"name"}]}},{"t":"s","v":"mock-add-listener!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,3,20,2,0,20,5,0,52,4,0,2,52,3,0,1,33,17,0,20,2,0,20,5,0,52,7,0,0,52,6,0,3,32,1,0,2,5,20,8,0,20,2,0,20,5,0,52,0,0,2,20,9,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"listeners"},{"t":"s","v":"not"},{"t":"s","v":"has-key?"},{"t":"s","v":"event-name"},{"t":"s","v":"dict-set!"},{"t":"s","v":"list"},{"t":"s","v":"append!"},{"t":"s","v":"handler"}]}},{"t":"s","v":"simulate-click"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,1,3,0,52,0,0,2,17,1,20,4,0,33,13,0,51,6,0,20,4,0,52,5,0,2,32,1,0,2,5,20,7,0,20,1,0,1,8,0,52,0,0,2,1,9,0,1,3,0,65,1,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"listeners"},{"t":"s","v":"click"},{"t":"s","v":"handlers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,20,4,0,1,5,0,1,6,0,65,2,0,52,2,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"h"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"el"},{"t":"s","v":"type"},{"t":"s","v":"click"}]}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"type"}]}},{"t":"s","v":"simulate-input"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,20,2,0,48,3,5,20,1,0,1,4,0,52,3,0,2,1,5,0,52,3,0,2,17,2,20,6,0,33,13,0,51,8,0,20,6,0,52,7,0,2,32,1,0,2,5,20,9,0,20,1,0,1,10,0,52,3,0,2,1,2,0,20,2,0,1,11,0,1,5,0,65,2,0,49,2,50],"constants":[{"t":"s","v":"mock-set-attr!"},{"t":"s","v":"el"},{"t":"s","v":"value"},{"t":"s","v":"get"},{"t":"s","v":"listeners"},{"t":"s","v":"input"},{"t":"s","v":"handlers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,20,4,0,1,5,0,1,6,0,65,2,0,52,2,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"h"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"el"},{"t":"s","v":"type"},{"t":"s","v":"input"}]}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"type"}]}},{"t":"s","v":"simulate-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,20,3,0,52,0,0,2,17,3,20,4,0,33,13,0,51,6,0,20,4,0,52,5,0,2,32,1,0,2,5,20,7,0,20,1,0,1,8,0,52,0,0,2,1,9,0,20,9,0,1,10,0,20,3,0,65,2,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"listeners"},{"t":"s","v":"event-name"},{"t":"s","v":"handlers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,20,4,0,1,5,0,20,5,0,1,6,0,20,7,0,65,3,0,52,2,0,1,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"h"},{"t":"s","v":"list"},{"t":"s","v":"target"},{"t":"s","v":"el"},{"t":"s","v":"detail"},{"t":"s","v":"type"},{"t":"s","v":"event-name"}]}},{"t":"s","v":"append!"},{"t":"s","v":"event-log"},{"t":"s","v":"detail"},{"t":"s","v":"type"}]}},{"t":"s","v":"assert-text"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,3,0,20,4,0,20,5,0,1,7,0,20,5,0,1,8,0,20,4,0,1,9,0,52,6,0,5,49,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"text"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected text \""},{"t":"s","v":"\", got \""},{"t":"s","v":"\""}]}},{"t":"s","v":"assert-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,3,0,20,4,0,20,5,0,1,7,0,20,2,0,1,8,0,20,5,0,1,9,0,20,4,0,1,10,0,52,6,0,7,49,3,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"name"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected attr "},{"t":"s","v":"=\""},{"t":"s","v":"\", got \""},{"t":"s","v":"\""}]}},{"t":"s","v":"assert-class"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,17,2,20,4,0,20,7,0,1,8,0,52,6,0,2,20,9,0,52,5,0,2,1,11,0,20,9,0,1,12,0,20,7,0,1,13,0,52,10,0,5,49,2,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"class"},{"t":"s","v":""},{"t":"s","v":"assert"},{"t":"s","v":"contains?"},{"t":"s","v":"split"},{"t":"s","v":"classes"},{"t":"s","v":" "},{"t":"s","v":"class-name"},{"t":"s","v":"str"},{"t":"s","v":"Expected class \""},{"t":"s","v":"\" in \""},{"t":"s","v":"\""}]}},{"t":"s","v":"assert-no-class"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,6,34,4,0,5,1,3,0,17,2,20,4,0,20,8,0,1,9,0,52,7,0,2,20,10,0,52,6,0,2,52,5,0,1,1,12,0,20,10,0,1,13,0,20,8,0,1,14,0,52,11,0,5,49,2,50],"constants":[{"t":"s","v":"mock-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"class"},{"t":"s","v":""},{"t":"s","v":"assert"},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"split"},{"t":"s","v":"classes"},{"t":"s","v":" "},{"t":"s","v":"class-name"},{"t":"s","v":"str"},{"t":"s","v":"Expected no class \""},{"t":"s","v":"\" but found in \""},{"t":"s","v":"\""}]}},{"t":"s","v":"assert-child-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,52,0,0,1,17,2,20,4,0,20,5,0,20,6,0,1,8,0,20,6,0,1,9,0,20,5,0,52,7,0,4,49,3,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"children"},{"t":"s","v":"assert="},{"t":"s","v":"actual"},{"t":"s","v":"n"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" children, got "}]}},{"t":"s","v":"assert-event-fired"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,2,0,20,4,0,1,5,0,52,3,0,2,52,1,0,2,1,7,0,20,8,0,1,9,0,52,6,0,3,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"e"},{"t":"s","v":"type"},{"t":"s","v":"event-name"}]}},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"event-log"},{"t":"s","v":"str"},{"t":"s","v":"Expected event \""},{"t":"s","v":"event-name"},{"t":"s","v":"\" to have been fired"}]}},{"t":"s","v":"assert-no-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,3,0,20,5,0,1,6,0,52,4,0,2,52,2,0,2,52,1,0,1,1,8,0,20,9,0,1,10,0,52,7,0,3,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"not"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"e"},{"t":"s","v":"type"},{"t":"s","v":"event-name"}]}},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"event-log"},{"t":"s","v":"str"},{"t":"s","v":"Expected event \""},{"t":"s","v":"event-name"},{"t":"s","v":"\" to NOT have been fired"}]}},{"t":"s","v":"event-fire-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,2,0,20,4,0,1,5,0,52,3,0,2,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"e"},{"t":"s","v":"type"},{"t":"s","v":"event-name"}]}},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"event-log"}]}},{"t":"s","v":"make-web-harness"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,20,1,0,48,2,17,1,20,2,0,20,3,0,1,4,0,1,5,0,65,0,0,1,6,0,20,7,0,1,8,0,1,9,0,1,6,0,48,3,65,2,0,48,3,5,20,3,0,50],"constants":[{"t":"s","v":"make-harness"},{"t":"s","v":"platform"},{"t":"s","v":"harness-set!"},{"t":"s","v":"h"},{"t":"s","v":"dom"},{"t":"s","v":"elements"},{"t":"s","v":"root"},{"t":"s","v":"mock-element"},{"t":"s","v":"div"},{"t":"s","v":"id"}]}},{"t":"s","v":"is-renderable?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,3,32,127,0,20,1,0,52,2,0,1,33,4,0,3,32,113,0,20,1,0,52,3,0,1,33,4,0,3,32,99,0,20,1,0,52,4,0,1,33,4,0,3,32,85,0,20,1,0,52,5,0,1,33,4,0,4,32,71,0,20,1,0,52,7,0,1,52,6,0,1,33,4,0,4,32,53,0,20,1,0,52,8,0,1,33,4,0,3,32,39,0,20,1,0,52,9,0,1,17,1,20,12,0,52,11,0,1,1,13,0,52,10,0,2,6,33,12,0,5,20,12,0,52,5,0,1,52,6,0,1,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"value"},{"t":"s","v":"string?"},{"t":"s","v":"number?"},{"t":"s","v":"boolean?"},{"t":"s","v":"dict?"},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"}]}},{"t":"s","v":"is-render-leak?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,6,33,13,0,5,20,3,0,20,2,0,48,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"value"},{"t":"s","v":"is-renderable?"}]}},{"t":"s","v":"assert-renderable"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,1,1,4,0,20,5,0,1,6,0,20,2,0,52,7,0,1,20,2,0,52,8,0,1,33,6,0,1,9,0,32,51,0,20,2,0,52,10,0,1,6,33,28,0,5,20,2,0,52,12,0,1,52,11,0,1,6,33,12,0,5,20,2,0,52,13,0,1,52,8,0,1,33,6,0,1,14,0,32,3,0,1,15,0,52,3,0,5,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"is-renderable?"},{"t":"s","v":"value"},{"t":"s","v":"str"},{"t":"s","v":"Render leak in "},{"t":"s","v":"label"},{"t":"s","v":": "},{"t":"s","v":"type-of"},{"t":"s","v":"dict?"},{"t":"s","v":" — dict would appear as {:key val} text in output"},{"t":"s","v":"list?"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":" — list of dicts would appear as raw data in output"},{"t":"s","v":" — non-renderable value would appear as text"}]}},{"t":"s","v":"render-body-audit"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,1,51,2,0,20,3,0,52,1,0,2,5,20,4,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,94,0,20,2,0,20,3,0,1,4,0,20,1,0,52,5,0,1,33,6,0,1,6,0,32,51,0,20,1,0,52,7,0,1,6,33,28,0,5,20,1,0,52,9,0,1,52,8,0,1,6,33,12,0,5,20,1,0,52,10,0,1,52,5,0,1,33,6,0,1,11,0,32,3,0,1,12,0,1,13,0,20,1,0,52,14,0,1,65,2,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"is-render-leak?"},{"t":"s","v":"v"},{"t":"s","v":"append!"},{"t":"s","v":"leaks"},{"t":"s","v":"leak-kind"},{"t":"s","v":"dict?"},{"t":"s","v":"dict"},{"t":"s","v":"list?"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"list-of-dicts"},{"t":"s","v":"other"},{"t":"s","v":"value-type"},{"t":"s","v":"type-of"}]}},{"t":"s","v":"values"},{"t":"s","v":"leaks"}]}},{"t":"s","v":"assert-render-body-clean"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,4,0,52,3,0,1,1,6,0,20,4,0,52,7,0,1,1,8,0,20,9,0,1,10,0,1,11,0,1,12,0,52,5,0,7,49,2,50],"constants":[{"t":"s","v":"render-body-audit"},{"t":"s","v":"values"},{"t":"s","v":"assert"},{"t":"s","v":"empty?"},{"t":"s","v":"leaks"},{"t":"s","v":"str"},{"t":"s","v":"Render body has "},{"t":"s","v":"len"},{"t":"s","v":" leak(s) in "},{"t":"s","v":"label"},{"t":"s","v":". "},{"t":"s","v":"render-to-html/render-to-dom render ALL body expressions — "},{"t":"s","v":"put side effects in let bindings, not body expressions."}]}},{"t":"s","v":"mock-render"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,185,0,20,1,0,52,2,0,1,33,28,0,20,3,0,1,4,0,48,1,17,1,20,5,0,20,6,0,20,1,0,48,2,5,20,6,0,32,147,0,20,1,0,52,7,0,1,33,32,0,20,3,0,1,4,0,48,1,17,1,20,5,0,20,6,0,20,1,0,52,8,0,1,48,2,5,20,6,0,32,105,0,20,1,0,52,10,0,1,52,9,0,1,33,4,0,2,32,87,0,20,1,0,52,11,0,1,33,4,0,2,32,73,0,20,1,0,52,12,0,1,17,1,20,15,0,52,14,0,1,1,16,0,52,13,0,2,52,9,0,1,33,4,0,2,32,39,0,20,3,0,20,17,0,20,15,0,48,1,48,1,17,2,2,17,3,51,18,0,17,3,20,19,0,20,1,0,52,20,0,1,48,1,5,20,6,0,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"expr"},{"t":"s","v":"string?"},{"t":"s","v":"mock-element"},{"t":"s","v":"TEXT"},{"t":"s","v":"mock-set-text!"},{"t":"s","v":"el"},{"t":"s","v":"number?"},{"t":"s","v":"str"},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"head"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,141,0,20,2,0,52,3,0,1,17,1,20,6,0,52,5,0,1,1,7,0,52,4,0,2,33,68,0,20,2,0,52,8,0,1,52,1,0,1,52,0,0,1,33,46,0,20,9,0,20,10,0,20,11,0,20,6,0,48,1,20,2,0,1,13,0,52,12,0,2,48,3,5,20,14,0,20,2,0,52,8,0,1,52,8,0,1,49,1,32,1,0,2,32,44,0,20,15,0,20,6,0,48,1,17,2,20,16,0,33,14,0,20,17,0,20,10,0,20,16,0,48,2,32,1,0,2,5,20,14,0,20,2,0,52,8,0,1,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"rest"},{"t":"s","v":"mock-set-attr!"},{"t":"s","v":"el"},{"t":"s","v":"keyword-name"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"loop"},{"t":"s","v":"mock-render"},{"t":"s","v":"child-el"},{"t":"s","v":"mock-append-child!"}]}},{"t":"s","v":"loop"},{"t":"s","v":"rest"}]}},{"t":"s","v":"mock-render-fragment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,20,4,0,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"el"}]}},{"t":"s","v":"map"},{"t":"s","v":"mock-render"},{"t":"s","v":"exprs"}]}},{"t":"s","v":"assert-single-render-root"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,5,0,52,4,0,1,1,6,0,52,3,0,2,1,8,0,20,9,0,1,10,0,20,5,0,52,4,0,1,1,11,0,1,12,0,1,13,0,52,7,0,7,49,2,50],"constants":[{"t":"s","v":"mock-render-fragment"},{"t":"s","v":"exprs"},{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"s","v":"rendered"},{"t":"n","v":1},{"t":"s","v":"str"},{"t":"s","v":"Expected single render root in "},{"t":"s","v":"label"},{"t":"s","v":" but got "},{"t":"s","v":" element(s). "},{"t":"s","v":"Multi-body let/begin in render-to-html/render-to-dom renders "},{"t":"s","v":"ALL expressions — put side effects in let bindings."}]}},{"t":"s","v":"assert-tag"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,3,0,1,4,0,52,2,0,2,20,5,0,52,1,0,2,1,7,0,20,5,0,1,8,0,20,3,0,1,4,0,52,2,0,2,1,9,0,52,6,0,5,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"el"},{"t":"s","v":"tag"},{"t":"s","v":"expected-tag"},{"t":"s","v":"str"},{"t":"s","v":"Expected <"},{"t":"s","v":"> but got <"},{"t":"s","v":">"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/harness.sxbc.json b/shared/static/wasm/sx/harness.sxbc.json new file mode 100644 index 00000000..7336f603 --- /dev/null +++ b/shared/static/wasm/sx/harness.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"e6ee3442b033cac1","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,1,5,0,51,6,0,1,7,0,51,8,0,1,9,0,51,10,0,1,11,0,51,12,0,1,13,0,51,6,0,1,14,0,51,6,0,1,15,0,51,6,0,1,16,0,51,17,0,1,18,0,51,6,0,1,19,0,51,20,0,1,21,0,51,6,0,1,22,0,51,6,0,1,23,0,51,6,0,1,24,0,51,6,0,1,25,0,51,26,0,1,27,0,51,28,0,1,29,0,51,6,0,1,30,0,51,6,0,1,31,0,51,32,0,1,33,0,51,6,0,1,34,0,51,35,0,1,36,0,51,6,0,1,37,0,51,6,0,1,38,0,51,6,0,1,39,0,51,6,0,1,40,0,51,6,0,1,41,0,51,6,0,65,27,0,128,4,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,51,65,0,128,64,0,5,51,67,0,128,66,0,5,51,69,0,128,68,0,5,51,71,0,128,70,0,5,51,73,0,128,72,0,5,51,75,0,128,74,0,5,51,77,0,128,76,0,50],"constants":[{"t":"s","v":"assert"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,18,0,20,3,0,6,34,4,0,5,1,4,0,52,2,0,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"condition"},{"t":"s","v":"error"},{"t":"s","v":"msg"},{"t":"s","v":"Assertion failed"}]}},{"t":"s","v":"assert="},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,20,3,0,52,1,0,2,52,0,0,1,33,31,0,20,5,0,6,34,17,0,5,1,7,0,20,3,0,1,8,0,20,2,0,52,6,0,4,52,4,0,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"error"},{"t":"s","v":"msg"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":", got "}]}},{"t":"s","v":"default-platform"},{"t":"s","v":"current-user"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,50],"constants":[]}},{"t":"s","v":"csrf-token"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"s","v":"test-csrf-token"}]}},{"t":"s","v":"app-url"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"s","v":"/mock-app-url"}]}},{"t":"s","v":"frag"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"s","v":""}]}},{"t":"s","v":"sleep"},{"t":"s","v":"local-storage-set"},{"t":"s","v":"set-cookie"},{"t":"s","v":"url-for"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"s","v":"/mock-url"}]}},{"t":"s","v":"create-element"},{"t":"s","v":"request-path"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"s","v":"/"}]}},{"t":"s","v":"config"},{"t":"s","v":"set-attr"},{"t":"s","v":"set-text"},{"t":"s","v":"remove-child"},{"t":"s","v":"fetch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,1,1,0,1,2,0,1,3,0,1,4,0,3,65,3,0,50],"constants":[{"t":"s","v":"status"},{"t":"n","v":200},{"t":"s","v":"body"},{"t":"s","v":""},{"t":"s","v":"ok"}]}},{"t":"s","v":"query"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,50],"constants":[{"t":"s","v":"list"}]}},{"t":"s","v":"add-class"},{"t":"s","v":"get-element"},{"t":"s","v":"now"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,50],"constants":[{"t":"n","v":0}]}},{"t":"s","v":"abort"},{"t":"s","v":"action"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,3,65,1,0,50],"constants":[{"t":"s","v":"ok"}]}},{"t":"s","v":"remove-class"},{"t":"s","v":"append-child"},{"t":"s","v":"request-arg"},{"t":"s","v":"emit-dom"},{"t":"s","v":"local-storage-get"},{"t":"s","v":"get-cookie"},{"t":"s","v":"make-harness"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,2,0,32,10,0,20,2,0,20,1,0,52,3,0,2,17,1,1,4,0,52,5,0,0,1,1,0,20,6,0,1,7,0,1,8,0,65,0,0,1,9,0,65,0,0,1,10,0,2,65,3,0,65,3,0,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"platform"},{"t":"s","v":"default-platform"},{"t":"s","v":"merge"},{"t":"s","v":"log"},{"t":"s","v":"list"},{"t":"s","v":"merged"},{"t":"s","v":"state"},{"t":"s","v":"cookies"},{"t":"s","v":"storage"},{"t":"s","v":"dom"}]}},{"t":"s","v":"harness-reset!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,3,0,0,52,0,0,3,5,20,1,0,1,4,0,1,5,0,65,0,0,1,6,0,65,0,0,1,7,0,2,65,3,0,52,0,0,3,5,20,1,0,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"session"},{"t":"s","v":"log"},{"t":"s","v":"list"},{"t":"s","v":"state"},{"t":"s","v":"cookies"},{"t":"s","v":"storage"},{"t":"s","v":"dom"}]}},{"t":"s","v":"harness-log"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,4,0,52,3,0,1,33,6,0,20,2,0,32,10,0,51,6,0,20,2,0,52,5,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"log"},{"t":"s","v":"nil?"},{"t":"s","v":"op"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"entry"},{"t":"s","v":"op"}]}}]}},{"t":"s","v":"harness-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,20,3,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"state"},{"t":"s","v":"key"}]}},{"t":"s","v":"harness-set!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,20,5,0,52,0,0,3,5,2,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"state"},{"t":"s","v":"key"},{"t":"s","v":"value"}]}},{"t":"s","v":"make-interceptor"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,0,0,50],"constants":[{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,8,0,20,2,0,48,0,32,136,0,1,4,0,20,1,0,52,5,0,1,52,3,0,2,33,15,0,20,2,0,20,1,0,52,6,0,1,48,1,32,104,0,1,7,0,20,1,0,52,5,0,1,52,3,0,2,33,25,0,20,2,0,20,1,0,52,6,0,1,20,1,0,1,4,0,52,8,0,2,48,2,32,62,0,1,9,0,20,1,0,52,5,0,1,52,3,0,2,33,35,0,20,2,0,20,1,0,52,6,0,1,20,1,0,1,4,0,52,8,0,2,20,1,0,1,7,0,52,8,0,2,48,3,32,10,0,20,2,0,20,1,0,52,10,0,2,17,1,20,12,0,1,13,0,52,11,0,2,17,2,20,14,0,20,13,0,1,1,0,20,1,0,1,15,0,20,15,0,1,16,0,20,17,0,65,3,0,48,2,5,20,15,0,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"args"},{"t":"s","v":"mock-fn"},{"t":"s","v":"="},{"t":"n","v":1},{"t":"s","v":"len"},{"t":"s","v":"first"},{"t":"n","v":2},{"t":"s","v":"nth"},{"t":"n","v":3},{"t":"s","v":"apply"},{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"log"},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"op"},{"t":"s","v":"op-name"}]}}]}},{"t":"s","v":"install-interceptors"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,4,0,1,5,0,52,3,0,2,52,2,0,1,52,0,0,2,5,20,6,0,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,20,3,0,52,0,0,2,17,1,20,4,0,20,1,0,20,3,0,20,5,0,48,3,17,2,20,6,0,20,7,0,20,3,0,20,8,0,49,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"platform"},{"t":"s","v":"key"},{"t":"s","v":"make-interceptor"},{"t":"s","v":"mock-fn"},{"t":"s","v":"env-bind!"},{"t":"s","v":"env"},{"t":"s","v":"interceptor"}]}},{"t":"s","v":"keys"},{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"platform"},{"t":"s","v":"env"}]}},{"t":"s","v":"io-calls"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,1,4,0,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"entry"},{"t":"s","v":"op"},{"t":"s","v":"op-name"}]}},{"t":"s","v":"get"},{"t":"s","v":"session"},{"t":"s","v":"log"}]}},{"t":"s","v":"io-call-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,3,0,48,2,52,0,0,1,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"io-calls"},{"t":"s","v":"session"},{"t":"s","v":"op-name"}]}},{"t":"s","v":"io-call-nth"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,4,0,20,6,0,52,5,0,1,52,3,0,2,33,13,0,20,6,0,20,4,0,52,7,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"io-calls"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"<"},{"t":"s","v":"n"},{"t":"s","v":"len"},{"t":"s","v":"calls"},{"t":"s","v":"nth"}]}},{"t":"s","v":"io-call-args"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,3,20,5,0,52,4,0,1,33,4,0,2,32,10,0,20,5,0,1,7,0,52,6,0,2,50],"constants":[{"t":"s","v":"io-call-nth"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"n"},{"t":"s","v":"nil?"},{"t":"s","v":"call"},{"t":"s","v":"get"},{"t":"s","v":"args"}]}},{"t":"s","v":"io-call-result"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,3,20,5,0,52,4,0,1,33,4,0,2,32,10,0,20,5,0,1,7,0,52,6,0,2,50],"constants":[{"t":"s","v":"io-call-nth"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"n"},{"t":"s","v":"nil?"},{"t":"s","v":"call"},{"t":"s","v":"get"},{"t":"s","v":"result"}]}},{"t":"s","v":"assert-io-called"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,20,4,0,48,2,1,5,0,52,1,0,2,1,7,0,20,4,0,1,8,0,52,6,0,3,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":">"},{"t":"s","v":"io-call-count"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"n","v":0},{"t":"s","v":"str"},{"t":"s","v":"Expected IO operation "},{"t":"s","v":" to be called but it was not"}]}},{"t":"s","v":"assert-no-io"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,20,3,0,20,4,0,48,2,1,5,0,52,1,0,2,1,7,0,20,4,0,1,8,0,20,2,0,20,3,0,20,4,0,48,2,1,9,0,52,6,0,5,49,2,50],"constants":[{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"io-call-count"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"n","v":0},{"t":"s","v":"str"},{"t":"s","v":"Expected IO operation "},{"t":"s","v":" not to be called but it was called "},{"t":"s","v":" time(s)"}]}},{"t":"s","v":"assert-io-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,3,0,20,5,0,20,6,0,52,4,0,2,1,8,0,20,2,0,1,9,0,20,6,0,1,10,0,20,5,0,1,11,0,52,7,0,7,49,2,50],"constants":[{"t":"s","v":"io-call-count"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"assert"},{"t":"s","v":"="},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected "},{"t":"s","v":" to be called "},{"t":"s","v":" time(s) but was called "},{"t":"s","v":" time(s)"}]}},{"t":"s","v":"assert-io-args"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,4,20,4,0,20,5,0,20,6,0,20,7,0,48,2,1,9,0,20,3,0,1,10,0,20,2,0,1,11,0,20,7,0,52,8,0,1,1,12,0,20,6,0,52,8,0,1,52,8,0,8,49,2,50],"constants":[{"t":"s","v":"io-call-args"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"n"},{"t":"s","v":"assert"},{"t":"s","v":"equal?"},{"t":"s","v":"actual"},{"t":"s","v":"expected-args"},{"t":"s","v":"str"},{"t":"s","v":"Expected call "},{"t":"s","v":" to "},{"t":"s","v":" with args "},{"t":"s","v":" but got "}]}},{"t":"s","v":"assert-io-result"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,4,20,4,0,20,5,0,20,6,0,20,7,0,48,2,1,9,0,20,3,0,1,10,0,20,2,0,1,11,0,20,7,0,52,8,0,1,1,12,0,20,6,0,52,8,0,1,52,8,0,8,49,2,50],"constants":[{"t":"s","v":"io-call-result"},{"t":"s","v":"session"},{"t":"s","v":"op-name"},{"t":"s","v":"n"},{"t":"s","v":"assert"},{"t":"s","v":"equal?"},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected call "},{"t":"s","v":" to "},{"t":"s","v":" to return "},{"t":"s","v":" but got "}]}},{"t":"s","v":"assert-state"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,3,0,20,4,0,20,5,0,20,6,0,48,2,1,8,0,20,2,0,1,9,0,20,6,0,52,7,0,1,1,10,0,20,5,0,52,7,0,1,52,7,0,6,49,2,50],"constants":[{"t":"s","v":"harness-get"},{"t":"s","v":"session"},{"t":"s","v":"key"},{"t":"s","v":"assert"},{"t":"s","v":"equal?"},{"t":"s","v":"actual"},{"t":"s","v":"expected"},{"t":"s","v":"str"},{"t":"s","v":"Expected state "},{"t":"s","v":" to be "},{"t":"s","v":" but got "}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/hypersx.sxbc.json b/shared/static/wasm/sx/hypersx.sxbc.json new file mode 100644 index 00000000..cfec28ec --- /dev/null +++ b/shared/static/wasm/sx/hypersx.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"8906e92f3786d124","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,50],"constants":[{"t":"s","v":"hsx-indent"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,17,1,51,2,0,1,4,0,20,5,0,52,3,0,2,52,1,0,2,5,20,6,0,50],"constants":[{"t":"s","v":""},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,21,1,0,50],"constants":[{"t":"s","v":"str"},{"t":"s","v":"result"},{"t":"s","v":" "}]}},{"t":"s","v":"range"},{"t":"n","v":0},{"t":"s","v":"depth"},{"t":"s","v":"result"}]}},{"t":"s","v":"hsx-sym-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,11,0,20,4,0,20,2,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"node"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"}]}},{"t":"s","v":"hsx-kw-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,11,0,20,4,0,20,2,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"node"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"}]}},{"t":"s","v":"hsx-is-element?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,28,0,5,20,0,0,1,3,0,52,2,0,2,52,1,0,1,6,33,9,0,5,20,4,0,20,0,0,49,1,50],"constants":[{"t":"s","v":"name"},{"t":"s","v":"not"},{"t":"s","v":"starts-with?"},{"t":"s","v":"~"},{"t":"s","v":"is-html-tag?"}]}},{"t":"s","v":"hsx-is-component?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,11,0,5,20,0,0,1,2,0,52,1,0,2,50],"constants":[{"t":"s","v":"name"},{"t":"s","v":"starts-with?"},{"t":"s","v":"~"}]}},{"t":"s","v":"hsx-extract-css"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,17,1,2,17,2,52,0,0,0,17,3,1,1,0,17,4,20,3,0,52,2,0,1,17,5,2,17,6,51,4,0,17,6,20,5,0,48,0,5,1,7,0,20,7,0,1,8,0,20,8,0,1,9,0,20,10,0,1,11,0,20,13,0,20,14,0,52,12,0,2,33,13,0,20,3,0,20,13,0,52,15,0,2,32,4,0,52,0,0,0,52,6,0,8,50],"constants":[{"t":"s","v":"list"},{"t":"n","v":0},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,206,0,20,3,0,20,5,0,20,1,0,52,4,0,2,48,1,17,0,20,7,0,1,8,0,52,6,0,2,33,43,0,20,5,0,20,1,0,1,10,0,52,9,0,2,52,4,0,2,21,11,0,5,20,1,0,1,12,0,52,9,0,2,21,1,0,5,20,13,0,49,0,32,130,0,20,7,0,1,14,0,52,6,0,2,33,43,0,20,5,0,20,1,0,1,10,0,52,9,0,2,52,4,0,2,21,14,0,5,20,1,0,1,12,0,52,9,0,2,21,1,0,5,20,13,0,49,0,32,74,0,20,7,0,33,67,0,20,15,0,20,16,0,20,5,0,20,1,0,52,4,0,2,48,2,5,20,15,0,20,16,0,20,5,0,20,1,0,1,10,0,52,9,0,2,52,4,0,2,48,2,5,20,1,0,1,12,0,52,9,0,2,21,1,0,5,20,13,0,49,0,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"n"},{"t":"s","v":"hsx-kw-name"},{"t":"s","v":"nth"},{"t":"s","v":"args"},{"t":"s","v":"="},{"t":"s","v":"kn"},{"t":"s","v":"class"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"classes"},{"t":"n","v":2},{"t":"s","v":"walk"},{"t":"s","v":"id"},{"t":"s","v":"append!"},{"t":"s","v":"rest-attrs"}]}},{"t":"s","v":"walk"},{"t":"s","v":"dict"},{"t":"s","v":"classes"},{"t":"s","v":"id"},{"t":"s","v":"attrs"},{"t":"s","v":"rest-attrs"},{"t":"s","v":"children"},{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"n"},{"t":"s","v":"slice"}]}},{"t":"s","v":"hsx-tag-str"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,17,2,20,2,0,1,3,0,52,1,0,2,17,3,20,2,0,1,4,0,52,1,0,2,17,4,20,5,0,6,33,8,0,5,20,5,0,52,6,0,1,33,20,0,51,8,0,20,5,0,1,10,0,52,9,0,2,52,7,0,2,32,1,0,2,5,20,11,0,33,19,0,20,13,0,1,14,0,20,11,0,52,12,0,3,21,13,0,32,1,0,2,5,20,13,0,50],"constants":[{"t":"s","v":"name"},{"t":"s","v":"get"},{"t":"s","v":"css"},{"t":"s","v":"classes"},{"t":"s","v":"id"},{"t":"s","v":"cls"},{"t":"s","v":"string?"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,20,3,0,52,0,0,3,21,1,0,50],"constants":[{"t":"s","v":"str"},{"t":"s","v":"s"},{"t":"s","v":"."},{"t":"s","v":"c"}]}},{"t":"s","v":"split"},{"t":"s","v":" "},{"t":"s","v":"eid"},{"t":"s","v":"str"},{"t":"s","v":"s"},{"t":"s","v":"#"}]}},{"t":"s","v":"hsx-atom"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,1,2,0,32,162,0,20,1,0,52,3,0,1,33,16,0,1,5,0,20,1,0,1,5,0,52,4,0,3,32,136,0,20,1,0,52,6,0,1,33,10,0,20,1,0,52,4,0,1,32,116,0,20,1,0,52,8,0,1,1,9,0,52,7,0,2,33,18,0,20,1,0,33,6,0,1,10,0,32,3,0,1,11,0,32,81,0,20,1,0,52,8,0,1,1,12,0,52,7,0,2,33,21,0,1,13,0,20,14,0,20,1,0,48,1,1,15,0,52,4,0,3,32,43,0,20,1,0,52,8,0,1,1,16,0,52,7,0,2,33,18,0,1,17,0,20,18,0,20,1,0,48,1,52,4,0,2,32,8,0,20,19,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"node"},{"t":"s","v":"nil"},{"t":"s","v":"string?"},{"t":"s","v":"str"},{"t":"s","v":"\""},{"t":"s","v":"number?"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"boolean"},{"t":"s","v":"true"},{"t":"s","v":"false"},{"t":"s","v":"symbol"},{"t":"s","v":"{"},{"t":"s","v":"symbol-name"},{"t":"s","v":"}"},{"t":"s","v":"keyword"},{"t":"s","v":":"},{"t":"s","v":"keyword-name"},{"t":"s","v":"sx-serialize"}]}},{"t":"s","v":"hsx-inline"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,11,0,20,3,0,20,2,0,49,1,32,102,1,20,2,0,52,4,0,1,33,6,0,1,5,0,32,86,1,20,6,0,20,2,0,52,7,0,1,48,1,17,1,20,9,0,1,10,0,52,8,0,2,33,25,0,1,12,0,20,3,0,20,2,0,1,14,0,52,13,0,2,48,1,52,11,0,2,32,34,1,20,9,0,1,15,0,52,8,0,2,33,51,0,1,16,0,20,2,0,52,18,0,1,1,14,0,52,17,0,2,33,18,0,20,19,0,20,2,0,1,14,0,52,13,0,2,48,1,32,3,0,1,20,0,1,21,0,52,11,0,3,32,226,0,20,9,0,1,22,0,52,8,0,2,33,40,0,20,3,0,20,2,0,1,14,0,52,13,0,2,48,1,1,23,0,20,19,0,20,2,0,1,24,0,52,13,0,2,48,1,52,11,0,3,32,173,0,20,9,0,1,25,0,52,8,0,2,33,40,0,20,3,0,20,2,0,1,14,0,52,13,0,2,48,1,1,26,0,20,19,0,20,2,0,1,24,0,52,13,0,2,48,1,52,11,0,3,32,120,0,20,9,0,1,11,0,52,8,0,2,33,34,0,1,27,0,1,20,0,51,30,0,20,2,0,52,31,0,1,52,29,0,2,52,28,0,2,1,27,0,52,11,0,3,32,73,0,1,32,0,20,3,0,20,2,0,52,7,0,1,48,1,20,2,0,52,18,0,1,1,14,0,52,17,0,2,33,31,0,1,33,0,1,33,0,20,19,0,20,2,0,52,31,0,1,52,29,0,2,52,28,0,2,52,11,0,2,32,3,0,1,20,0,1,21,0,52,11,0,4,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"node"},{"t":"s","v":"sx-serialize"},{"t":"s","v":"empty?"},{"t":"s","v":"()"},{"t":"s","v":"hsx-sym-name"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"hd"},{"t":"s","v":"deref"},{"t":"s","v":"str"},{"t":"s","v":"@"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"signal"},{"t":"s","v":"signal("},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"s","v":"hsx-inline"},{"t":"s","v":""},{"t":"s","v":")"},{"t":"s","v":"reset!"},{"t":"s","v":" := "},{"t":"n","v":2},{"t":"s","v":"swap!"},{"t":"s","v":" <- "},{"t":"s","v":"\""},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,1,0,32,18,0,1,3,0,20,4,0,20,1,0,48,1,1,5,0,52,2,0,3,50],"constants":[{"t":"s","v":"string?"},{"t":"s","v":"a"},{"t":"s","v":"str"},{"t":"s","v":"{"},{"t":"s","v":"hsx-inline"},{"t":"s","v":"}"}]}},{"t":"s","v":"rest"},{"t":"s","v":"("},{"t":"s","v":" "}]}},{"t":"s","v":"hsx-attrs-str"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,1,2,0,32,42,0,52,3,0,0,17,1,1,4,0,17,2,2,17,3,51,5,0,17,3,20,6,0,48,0,5,1,8,0,1,8,0,20,10,0,52,9,0,2,52,7,0,2,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"attrs"},{"t":"s","v":""},{"t":"s","v":"list"},{"t":"n","v":0},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,33,78,0,20,4,0,20,5,0,1,7,0,20,8,0,20,3,0,20,1,0,52,9,0,2,48,1,1,10,0,20,11,0,20,3,0,20,1,0,1,13,0,52,12,0,2,52,9,0,2,48,1,52,6,0,4,48,2,5,20,1,0,1,14,0,52,12,0,2,21,1,0,5,20,15,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"len"},{"t":"s","v":"attrs"},{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"keyword-name"},{"t":"s","v":"nth"},{"t":"s","v":" "},{"t":"s","v":"hsx-atom"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"n","v":2},{"t":"s","v":"walk"}]}},{"t":"s","v":"walk"},{"t":"s","v":"str"},{"t":"s","v":" "},{"t":"s","v":"join"},{"t":"s","v":"parts"}]}},{"t":"s","v":"hsx-children"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,2,0,32,89,0,20,1,0,52,4,0,1,1,5,0,52,3,0,2,6,33,16,0,5,20,1,0,52,8,0,1,52,7,0,1,52,6,0,1,33,25,0,20,2,0,1,10,0,20,11,0,20,1,0,52,8,0,1,48,1,52,9,0,3,32,27,0,20,2,0,1,12,0,1,12,0,51,15,0,20,1,0,52,14,0,2,52,13,0,2,52,9,0,3,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"kids"},{"t":"s","v":"line"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"first"},{"t":"s","v":"str"},{"t":"s","v":" "},{"t":"s","v":"hsx-atom"},{"t":"s","v":"\n"},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"sx->hypersx-node"},{"t":"s","v":"c"},{"t":"s","v":"+"},{"t":"s","v":"depth"},{"t":"n","v":1}]}}]}},{"t":"s","v":"sx->hypersx-node"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,3,0,52,2,0,1,33,13,0,20,5,0,1,6,0,52,4,0,2,32,47,5,20,3,0,52,8,0,1,52,7,0,1,33,18,0,20,5,0,20,9,0,20,3,0,48,1,52,4,0,2,32,15,5,20,3,0,52,10,0,1,33,13,0,20,5,0,1,11,0,52,4,0,2,32,248,4,20,12,0,20,3,0,52,13,0,1,48,1,17,3,20,15,0,1,4,0,52,14,0,2,33,18,0,20,5,0,20,16,0,20,3,0,48,1,52,4,0,2,32,203,4,20,15,0,1,17,0,52,14,0,2,33,18,0,20,5,0,20,16,0,20,3,0,48,1,52,4,0,2,32,172,4,20,15,0,1,18,0,52,14,0,2,33,18,0,20,5,0,20,16,0,20,3,0,48,1,52,4,0,2,32,141,4,20,15,0,1,19,0,52,14,0,2,33,18,0,20,5,0,20,16,0,20,3,0,48,1,52,4,0,2,32,110,4,20,15,0,1,20,0,52,14,0,2,33,18,0,20,5,0,20,16,0,20,3,0,48,1,52,4,0,2,32,79,4,20,15,0,1,21,0,52,14,0,2,6,34,11,0,5,20,15,0,1,22,0,52,14,0,2,33,74,0,20,5,0,20,15,0,1,23,0,20,24,0,20,3,0,1,26,0,52,25,0,2,48,1,1,23,0,20,24,0,20,3,0,1,27,0,52,25,0,2,48,1,1,28,0,20,29,0,20,3,0,52,30,0,1,20,1,0,1,26,0,52,31,0,2,48,2,52,4,0,8,32,233,3,20,15,0,1,32,0,52,14,0,2,33,55,0,20,5,0,1,33,0,20,16,0,20,3,0,1,26,0,52,25,0,2,48,1,1,28,0,1,28,0,51,36,0,20,3,0,1,27,0,52,37,0,2,52,35,0,2,52,34,0,2,52,4,0,5,32,165,3,20,15,0,1,38,0,52,14,0,2,33,243,0,20,3,0,1,26,0,52,25,0,2,17,4,20,3,0,1,27,0,52,25,0,2,17,5,20,3,0,52,40,0,1,1,41,0,52,39,0,2,33,13,0,20,3,0,1,41,0,52,25,0,2,32,1,0,2,17,6,20,42,0,52,8,0,1,52,7,0,1,6,33,24,0,5,20,43,0,52,2,0,1,6,34,12,0,5,20,43,0,52,8,0,1,52,7,0,1,33,59,0,20,5,0,1,44,0,20,16,0,20,45,0,48,1,1,23,0,20,9,0,20,42,0,48,1,20,43,0,33,18,0,1,23,0,20,9,0,20,43,0,48,1,52,4,0,2,32,3,0,1,46,0,52,4,0,6,32,82,0,20,5,0,1,44,0,20,16,0,20,45,0,48,1,1,28,0,20,29,0,20,42,0,20,1,0,1,26,0,52,31,0,2,48,2,20,43,0,33,34,0,1,28,0,20,5,0,1,47,0,20,29,0,20,43,0,20,1,0,1,26,0,52,31,0,2,48,2,52,4,0,4,32,3,0,1,46,0,52,4,0,6,32,165,2,20,15,0,1,48,0,52,14,0,2,6,34,26,0,5,20,15,0,1,49,0,52,14,0,2,6,34,11,0,5,20,15,0,1,50,0,52,14,0,2,33,129,0,20,3,0,1,26,0,52,25,0,2,17,4,20,3,0,1,27,0,52,37,0,2,17,5,20,5,0,20,15,0,1,23,0,1,51,0,51,52,0,20,53,0,52,8,0,1,6,33,28,0,5,20,53,0,52,10,0,1,52,7,0,1,6,33,12,0,5,20,53,0,52,13,0,1,52,8,0,1,33,6,0,20,53,0,32,7,0,20,53,0,52,54,0,1,52,35,0,2,52,34,0,2,1,28,0,1,28,0,51,55,0,20,56,0,52,35,0,2,52,34,0,2,52,4,0,6,32,249,1,20,15,0,1,35,0,52,14,0,2,6,33,65,0,5,20,3,0,52,40,0,1,1,41,0,52,14,0,2,6,33,46,0,5,20,3,0,1,26,0,52,25,0,2,52,8,0,1,6,33,27,0,5,20,12,0,20,3,0,1,26,0,52,25,0,2,52,13,0,1,48,1,1,57,0,52,14,0,2,33,88,0,20,3,0,1,26,0,52,25,0,2,17,4,20,3,0,1,27,0,52,25,0,2,17,5,20,5,0,1,58,0,20,16,0,20,59,0,48,1,1,60,0,20,24,0,20,61,0,1,26,0,52,25,0,2,48,1,1,28,0,20,29,0,20,61,0,52,30,0,1,20,1,0,1,26,0,52,31,0,2,48,2,52,4,0,7,32,79,1,20,15,0,1,62,0,52,14,0,2,6,33,65,0,5,20,3,0,52,40,0,1,1,41,0,52,14,0,2,6,33,46,0,5,20,3,0,1,26,0,52,25,0,2,52,8,0,1,6,33,27,0,5,20,12,0,20,3,0,1,26,0,52,25,0,2,52,13,0,1,48,1,1,57,0,52,14,0,2,33,88,0,20,3,0,1,26,0,52,25,0,2,17,4,20,3,0,1,27,0,52,25,0,2,17,5,20,5,0,1,63,0,20,24,0,20,61,0,1,26,0,52,25,0,2,48,1,1,64,0,20,16,0,20,59,0,48,1,1,28,0,20,29,0,20,61,0,52,30,0,1,20,1,0,1,26,0,52,31,0,2,48,2,52,4,0,7,32,165,0,20,65,0,20,15,0,48,1,33,68,0,20,66,0,20,3,0,52,67,0,1,48,1,17,4,20,68,0,20,5,0,20,69,0,20,15,0,20,70,0,48,2,20,71,0,20,70,0,1,73,0,52,72,0,2,48,1,52,4,0,3,20,70,0,1,74,0,52,72,0,2,20,1,0,49,3,32,86,0,20,75,0,20,15,0,48,1,33,60,0,20,66,0,20,3,0,52,67,0,1,48,1,17,4,20,68,0,20,5,0,20,15,0,20,71,0,20,70,0,1,73,0,52,72,0,2,48,1,52,4,0,3,20,70,0,1,74,0,52,72,0,2,20,1,0,49,3,32,15,0,20,5,0,20,24,0,20,3,0,48,1,52,4,0,2,50],"constants":[{"t":"s","v":"hsx-indent"},{"t":"s","v":"depth"},{"t":"s","v":"nil?"},{"t":"s","v":"node"},{"t":"s","v":"str"},{"t":"s","v":"pad"},{"t":"s","v":"nil"},{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"hsx-atom"},{"t":"s","v":"empty?"},{"t":"s","v":"()"},{"t":"s","v":"hsx-sym-name"},{"t":"s","v":"first"},{"t":"s","v":"="},{"t":"s","v":"hd"},{"t":"s","v":"hsx-inline"},{"t":"s","v":"deref"},{"t":"s","v":"reset!"},{"t":"s","v":"swap!"},{"t":"s","v":"signal"},{"t":"s","v":"defcomp"},{"t":"s","v":"defisland"},{"t":"s","v":" "},{"t":"s","v":"sx-serialize"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"n","v":2},{"t":"s","v":"\n"},{"t":"s","v":"sx->hypersx-node"},{"t":"s","v":"last"},{"t":"s","v":"+"},{"t":"s","v":"when"},{"t":"s","v":"when "},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"sx->hypersx-node"},{"t":"s","v":"c"},{"t":"s","v":"+"},{"t":"s","v":"depth"},{"t":"n","v":1}]}},{"t":"s","v":"slice"},{"t":"s","v":"if"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":3},{"t":"s","v":"then-b"},{"t":"s","v":"else-b"},{"t":"s","v":"if "},{"t":"s","v":"test"},{"t":"s","v":""},{"t":"s","v":"else\n"},{"t":"s","v":"let"},{"t":"s","v":"letrec"},{"t":"s","v":"let*"},{"t":"s","v":", "},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,6,33,15,0,5,20,1,0,52,3,0,1,1,4,0,52,2,0,2,33,37,0,20,6,0,20,1,0,52,7,0,1,48,1,1,8,0,20,9,0,20,1,0,1,11,0,52,10,0,2,48,1,52,5,0,3,32,8,0,20,6,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"list?"},{"t":"s","v":"b"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"str"},{"t":"s","v":"sx-serialize"},{"t":"s","v":"first"},{"t":"s","v":" = "},{"t":"s","v":"hsx-inline"},{"t":"s","v":"nth"},{"t":"n","v":1}]}},{"t":"s","v":"binds"},{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,49,2,50],"constants":[{"t":"s","v":"sx->hypersx-node"},{"t":"s","v":"b"},{"t":"s","v":"+"},{"t":"s","v":"depth"},{"t":"n","v":1}]}},{"t":"s","v":"body"},{"t":"s","v":"fn"},{"t":"s","v":"map "},{"t":"s","v":"coll"},{"t":"s","v":" -> "},{"t":"s","v":"fn-node"},{"t":"s","v":"for-each"},{"t":"s","v":"for "},{"t":"s","v":" in "},{"t":"s","v":"hsx-is-element?"},{"t":"s","v":"hsx-extract-css"},{"t":"s","v":"rest"},{"t":"s","v":"hsx-children"},{"t":"s","v":"hsx-tag-str"},{"t":"s","v":"css"},{"t":"s","v":"hsx-attrs-str"},{"t":"s","v":"get"},{"t":"s","v":"attrs"},{"t":"s","v":"children"},{"t":"s","v":"hsx-is-component?"}]}},{"t":"s","v":"sx->hypersx"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,51,3,0,20,4,0,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"join"},{"t":"s","v":"\n\n"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,49,2,50],"constants":[{"t":"s","v":"sx->hypersx-node"},{"t":"s","v":"expr"},{"t":"n","v":0}]}},{"t":"s","v":"tree"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/orchestration.sx b/shared/static/wasm/sx/orchestration.sx index 82a3ec26..eb3b380b 100644 --- a/shared/static/wasm/sx/orchestration.sx +++ b/shared/static/wasm/sx/orchestration.sx @@ -453,7 +453,18 @@ ((timer nil) (last-val nil) (listen-target - (if (get mods "from") (dom-query (get mods "from")) el))) + (let + ((from-sel (get mods "from"))) + (cond + (nil? from-sel) + el + (= from-sel "body") + (dom-body) + (= from-sel "document") + (dom-document) + (= from-sel "window") + (dom-window) + :else (dom-query from-sel))))) (when listen-target (dom-add-listener @@ -462,7 +473,7 @@ (fn (e) (let - ((should-fire (if (get mods "filter") (host-call (host-call (dom-window) "Function" "event" (get mods "filter")) "call" el e) true))) + ((should-fire (if (get mods "filter") (let ((f (get mods "filter"))) (let ((key-match (index-of f "key=='"))) (if (>= key-match 0) (let ((key-char (slice f (+ key-match 5) (+ key-match 6)))) (and (= (host-get e "key") key-char) (not (dom-matches? (host-get e "target") "input,textarea,select")))) true))) true))) (when (get mods "changed") (let @@ -1492,7 +1503,7 @@ verb-info (when (not (dom-has-attr? el "sx-disable")) - (bind-triggers el verb-info) + (do (bind-triggers el verb-info) (bind-preload-for el)) (bind-preload-for el)))))) (define diff --git a/shared/static/wasm/sx/orchestration.sxbc b/shared/static/wasm/sx/orchestration.sxbc index 33401d43..2608dcb4 100644 --- a/shared/static/wasm/sx/orchestration.sxbc +++ b/shared/static/wasm/sx/orchestration.sxbc @@ -1,3 +1,3 @@ -(sxbc 1 "776fee66723ae5b4" +(sxbc 1 "216a79daa71b7776" (code - :constants ("_preload-cache" "dict" "_css-hash" "" "dispatch-trigger-events" {:upvalue-count 0 :arity 2 :constants ("try-parse-json" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-dispatch" "get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 49 3 50)} "keys" {:upvalue-count 1 :arity 1 :constants ("trim" "not" "empty?" "dom-dispatch" "dict") :bytecode (16 0 52 0 0 1 17 1 16 1 52 2 0 1 52 1 0 1 33 16 0 20 3 0 18 0 16 1 52 4 0 0 49 3 32 1 0 2 50)} "split" ",") :bytecode (16 1 33 55 0 20 0 0 16 1 48 1 17 2 16 2 33 20 0 51 2 0 1 0 1 2 16 2 52 3 0 1 52 1 0 2 32 18 0 51 4 0 1 0 16 1 1 6 0 52 5 0 2 52 1 0 2 32 1 0 2 50)} "init-css-tracking" {:upvalue-count 0 :arity 0 :constants ("dom-query" "meta[name=\"sx-css-classes\"]" "dom-get-attr" "content" "_css-hash") :bytecode (20 0 0 1 1 0 48 1 17 0 16 0 33 29 0 20 2 0 16 0 1 3 0 48 2 17 1 16 1 33 8 0 16 1 21 4 0 32 1 0 2 32 1 0 2 50)} "execute-request" {:upvalue-count 0 :arity 3 :constants ("get-verb-info" "nil?" "promise-resolve" "get" "method" "url" "dom-get-attr" "sx-media" "not" "browser-media-matches?" "sx-confirm" "browser-confirm" "sx-prompt" "browser-prompt" "validate-for-request" "do-fetch" "assoc" "dict" "SX-Prompt") :bytecode (20 0 0 16 0 48 1 6 34 3 0 5 16 1 17 3 16 3 52 1 0 1 33 9 0 20 2 0 2 49 1 32 249 0 16 3 1 4 0 52 3 0 2 17 4 16 3 1 5 0 52 3 0 2 17 5 20 6 0 16 0 1 7 0 48 2 17 6 16 6 6 33 12 0 5 20 9 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 185 0 20 6 0 16 0 1 10 0 48 2 17 6 16 6 6 33 12 0 5 20 11 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 143 0 20 6 0 16 0 1 12 0 48 2 17 6 16 6 33 10 0 20 13 0 16 6 48 1 32 1 0 2 17 7 16 6 6 33 7 0 5 16 7 52 1 0 1 33 9 0 20 2 0 2 49 1 32 88 0 16 4 52 1 0 1 6 34 23 0 5 16 5 52 1 0 1 6 34 12 0 5 20 14 0 16 0 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 43 0 20 15 0 16 0 16 4 16 4 16 5 16 7 33 23 0 16 2 6 34 5 0 5 52 17 0 0 1 18 0 16 7 52 16 0 3 32 2 0 16 2 49 5 50)} "do-fetch" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-sync" "=" "replace" "abort-previous" "resolve-target" "not" "identical?" "abort-previous-target" "new-abort-controller" "track-controller" "track-controller-target" "build-request-body" "get" "url" "body" "content-type" "build-request-headers" "loaded-component-names" "_css-hash" "csrf-token" "for-each" {:upvalue-count 2 :arity 1 :constants ("dict-set!" "get") :bytecode (18 0 16 0 18 1 16 0 52 1 0 2 52 0 0 3 50)} "keys" "dict-set!" "Content-Type" "X-CSRFToken" "preload-cache-get" "_preload-cache" "apply-optimistic" "show-indicator" "disable-elements" "dom-add-class" "sx-request" "dom-set-attr" "aria-busy" "true" "dom-dispatch" "sx:beforeRequest" "dict" "method" "fetch-request" "headers" "signal" "controller-signal" "cross-origin" "cross-origin?" "preloaded" {:upvalue-count 8 :arity 4 :constants ("clear-loading-state" "revert-optimistic" "not" "dom-dispatch" "sx:responseError" "dict" "status" "text" ">" "len" 0 "handle-fetch-success" "handle-retry" "sx:afterRequest") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 16 0 52 2 0 1 33 86 0 20 3 0 18 0 1 4 0 1 6 0 16 1 1 7 0 16 3 52 5 0 4 48 3 5 16 3 6 33 14 0 5 16 3 52 9 0 1 1 10 0 52 8 0 2 33 20 0 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 32 15 0 20 12 0 18 0 18 5 18 7 18 4 18 6 49 5 32 37 0 20 3 0 18 0 1 13 0 1 6 0 16 1 52 5 0 2 48 3 5 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 50)} {:upvalue-count 6 :arity 1 :constants ("clear-loading-state" "revert-optimistic" "not" "abort-error?" "log-warn" "str" "sx:fetch error " " " " — " "dom-dispatch" "sx:requestError" "dict" "error") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 20 3 0 16 0 48 1 52 2 0 1 33 47 0 20 4 0 1 6 0 18 4 1 7 0 18 5 1 8 0 16 0 52 5 0 6 48 1 5 20 9 0 18 0 1 10 0 1 12 0 16 0 52 11 0 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 16 5 1 3 0 52 2 0 2 33 10 0 20 4 0 16 0 48 1 32 1 0 2 5 20 5 0 16 0 48 1 17 6 16 6 6 33 13 0 5 16 0 16 6 52 7 0 2 52 6 0 1 33 10 0 20 8 0 16 6 48 1 32 1 0 2 5 20 9 0 48 0 17 6 20 10 0 16 0 16 6 48 2 5 20 5 0 16 0 48 1 17 7 16 7 33 12 0 20 11 0 16 7 16 6 48 2 32 1 0 2 5 20 12 0 16 0 16 2 16 3 48 3 17 7 16 7 1 14 0 52 13 0 2 17 8 16 7 1 15 0 52 13 0 2 17 9 16 7 1 16 0 52 13 0 2 17 10 20 17 0 16 0 20 18 0 48 0 20 19 0 48 3 17 11 20 20 0 48 0 17 12 16 4 33 20 0 51 22 0 1 11 1 4 16 4 52 23 0 1 52 21 0 2 32 1 0 2 5 16 10 33 14 0 16 11 1 25 0 16 10 52 24 0 3 32 1 0 2 5 16 12 33 14 0 16 11 1 26 0 16 12 52 24 0 3 32 1 0 2 5 20 27 0 20 28 0 16 8 48 2 17 13 20 29 0 16 0 48 1 17 14 20 30 0 16 0 48 1 17 15 20 31 0 16 0 48 1 17 16 20 32 0 16 0 1 33 0 48 2 5 20 34 0 16 0 1 35 0 1 36 0 48 3 5 20 37 0 16 0 1 38 0 1 14 0 16 8 1 40 0 16 2 52 39 0 4 48 3 5 20 41 0 1 14 0 16 8 1 40 0 16 2 1 42 0 16 11 1 15 0 16 9 1 43 0 20 44 0 16 6 48 1 1 45 0 20 46 0 16 8 48 1 1 47 0 16 13 52 39 0 14 51 48 0 1 0 1 15 1 16 1 14 1 8 1 1 1 4 1 2 51 49 0 1 0 1 15 1 16 1 14 1 2 1 8 49 3 50)} "handle-fetch-success" {:upvalue-count 0 :arity 6 :constants ("process-response-headers" "get" "css-hash" "_css-hash" "dispatch-trigger-events" "trigger" "process-cache-directives" "redirect" "browser-navigate" "refresh" "browser-reload" "location" "fetch-location" "retarget" "dom-query" "resolve-target" "parse-swap-spec" "reswap" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "style" "transition" "content-type" "" "contains?" "text/sx" "handle-sx-response" "handle-html-response" "trigger-swap" "handle-history" "set-timeout" {:upvalue-count 2 :arity 0 :constants ("get" "trigger-settle" "dispatch-trigger-events" "process-settle-hooks") :bytecode (18 0 1 1 0 52 0 0 2 33 19 0 20 2 0 18 1 18 0 1 1 0 52 0 0 2 48 2 32 1 0 2 5 20 3 0 18 1 49 1 50)} 20 "dom-dispatch" "sx:afterSwap" "dict" "target" "swap") :bytecode (20 0 0 16 4 48 1 17 6 16 6 1 2 0 52 1 0 2 17 7 16 7 33 8 0 16 7 21 3 0 32 1 0 2 5 20 4 0 16 0 16 6 1 5 0 52 1 0 2 48 2 5 20 6 0 16 0 16 6 16 5 48 3 5 16 6 1 7 0 52 1 0 2 33 17 0 20 8 0 16 6 1 7 0 52 1 0 2 49 1 32 31 1 16 6 1 9 0 52 1 0 2 33 8 0 20 10 0 49 0 32 11 1 16 6 1 11 0 52 1 0 2 33 17 0 20 12 0 16 6 1 11 0 52 1 0 2 49 1 32 238 0 16 6 1 13 0 52 1 0 2 33 17 0 20 14 0 16 6 1 13 0 52 1 0 2 48 1 32 7 0 20 15 0 16 0 48 1 17 7 20 16 0 16 6 1 17 0 52 1 0 2 6 34 11 0 5 20 18 0 16 0 1 19 0 48 2 20 20 0 20 21 0 48 0 1 22 0 48 2 48 2 17 8 16 8 1 23 0 52 1 0 2 17 9 16 8 1 24 0 52 1 0 2 17 10 16 6 1 25 0 52 1 0 2 6 34 4 0 5 1 26 0 17 11 16 11 1 28 0 52 27 0 2 33 18 0 20 29 0 16 0 16 7 16 5 16 9 16 10 48 5 32 15 0 20 30 0 16 0 16 7 16 5 16 9 16 10 48 5 5 20 4 0 16 0 16 6 1 31 0 52 1 0 2 48 2 5 20 32 0 16 0 16 1 16 6 48 3 5 20 33 0 51 34 0 1 6 1 0 1 35 0 48 2 5 20 36 0 16 0 1 37 0 1 39 0 16 7 1 40 0 16 9 52 38 0 4 49 3 50)} "handle-sx-response" {:upvalue-count 0 :arity 5 :constants ("strip-component-scripts" "extract-response-css" "trim" "not" "empty?" "sx-render" "dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "sx-select" "select-from-container" "children-to-fragment" "dispose-islands-in" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "post-swap" "=" "outerHTML" "dom-parent") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 18 2 1 3 0 52 2 0 2 33 17 0 20 4 0 16 0 6 34 3 0 5 18 0 48 1 32 9 0 16 0 6 34 3 0 5 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 20 1 0 16 5 48 1 17 6 16 6 52 2 0 1 17 7 16 7 52 4 0 1 52 3 0 1 33 106 0 20 5 0 16 7 48 1 17 8 20 6 0 1 7 0 2 48 2 17 9 20 8 0 16 9 16 8 48 2 5 20 9 0 16 9 51 10 0 48 2 5 20 11 0 16 0 1 12 0 48 2 17 10 16 10 33 12 0 20 13 0 16 9 16 10 48 2 32 7 0 20 14 0 16 9 48 1 17 11 20 15 0 16 1 48 1 5 20 16 0 16 4 51 17 0 1 1 1 11 1 3 49 2 32 1 0 2 50)} "handle-html-response" {:upvalue-count 0 :arity 5 :constants ("dom-parse-html-document" "dom-get-attr" "sx-select" "dispose-islands-in" "dom-create-element" "div" "dom-set-inner-html" "dom-body-inner-html" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 1 16 2 48 3 5 20 2 0 16 0 49 1 50)} "hoist-head-elements" "select-from-container" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "log-info" "str" "swap-root: " "dom-tag-name" "nil" " target: " "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 1 3 0 16 0 33 10 0 20 4 0 16 0 48 1 32 3 0 1 5 0 1 6 0 20 4 0 18 0 48 1 52 2 0 4 48 1 5 20 7 0 16 0 6 34 3 0 5 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 16 5 33 164 0 20 1 0 16 0 1 2 0 48 2 17 6 20 3 0 16 1 48 1 5 16 6 33 75 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 11 0 16 7 16 6 48 2 17 8 20 12 0 16 4 51 13 0 1 1 1 8 1 3 49 2 32 61 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 12 0 16 4 51 14 0 1 1 1 7 1 3 49 2 32 1 0 2 50)} "handle-retry" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-retry" "parse-retry-spec" "data-sx-retry-ms" "get" "start-ms" "parse-int" "dom-set-attr" "str" "next-retry-ms" "cap-ms" "set-timeout" {:upvalue-count 5 :arity 0 :constants ("do-fetch") :bytecode (20 0 0 18 0 18 1 18 2 18 3 18 4 49 5 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 20 2 0 16 5 48 1 17 6 16 6 33 97 0 20 0 0 16 0 1 3 0 48 2 6 34 10 0 5 16 6 1 5 0 52 4 0 2 17 7 16 7 16 6 1 5 0 52 4 0 2 52 6 0 2 17 8 20 7 0 16 0 1 3 0 20 9 0 16 8 16 6 1 10 0 52 4 0 2 48 2 52 8 0 1 48 3 5 20 11 0 51 12 0 1 0 1 1 1 2 1 3 1 4 16 8 49 2 32 1 0 2 50)} "bind-triggers" {:upvalue-count 0 :arity 2 :constants ("parse-trigger-spec" "dom-get-attr" "sx-trigger" "default-trigger" "dom-tag-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("classify-trigger" "get" "modifiers" "=" "poll" "set-interval" {:upvalue-count 2 :arity 0 :constants ("host-get" "isConnected" "execute-request" "clear-interval" "log-info" "poll stopped: element removed") :bytecode (20 0 0 18 0 1 1 0 48 2 33 12 0 20 2 0 18 0 2 2 49 3 32 16 0 20 3 0 18 1 48 1 5 20 4 0 1 5 0 49 1 50)} "interval" "intersect" "observe-intersection" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "delay" "load" "set-timeout" 0 "revealed" "event" "bind-event") :bytecode (20 0 0 16 0 48 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 29 0 2 17 3 20 5 0 51 6 0 0 0 1 3 16 2 1 7 0 52 1 0 2 48 2 17 3 32 152 0 16 1 1 8 0 52 3 0 2 33 25 0 20 9 0 18 0 51 10 0 0 0 4 16 2 1 11 0 52 1 0 2 49 4 32 115 0 16 1 1 12 0 52 3 0 2 33 30 0 20 13 0 51 10 0 0 0 16 2 1 11 0 52 1 0 2 6 34 4 0 5 1 14 0 49 2 32 73 0 16 1 1 15 0 52 3 0 2 33 25 0 20 9 0 18 0 51 10 0 0 0 3 16 2 1 11 0 52 1 0 2 49 4 32 36 0 16 1 1 16 0 52 3 0 2 33 23 0 20 17 0 18 0 16 0 1 16 0 52 1 0 2 16 2 18 1 49 4 32 1 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 1 2 0 48 2 48 1 6 34 13 0 5 20 3 0 20 4 0 16 0 48 1 48 1 17 2 51 6 0 1 0 1 1 16 2 52 5 0 2 50)} "bind-event" {:upvalue-count 0 :arity 4 :constants ("get" "from" "dom-query" "dom-add-listener" {:upvalue-count 5 :arity 1 :constants ("get" "filter" "host-call" "dom-window" "Function" "event" "call" "changed" "element-value" "=" "not" "click" "event-modifier-key?" "submit" "dom-has-attr?" "href" "prevent-default" "get-verb-info" "method" "GET" "delay" "try-client-route" "url-pathname" "url" "dom-get-attr" "sx-target" "browser-push-state" "browser-scroll-to" 0 "log-info" "str" "sx:route server fetch " "clear-timeout" "set-timeout" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "execute-request") :bytecode (18 0 1 1 0 52 0 0 2 33 40 0 20 2 0 20 2 0 20 3 0 48 0 1 4 0 1 5 0 18 0 1 1 0 52 0 0 2 48 4 1 6 0 18 1 16 0 48 4 32 1 0 3 17 1 18 0 1 7 0 52 0 0 2 33 29 0 20 8 0 17 2 16 2 18 2 52 9 0 2 33 6 0 4 17 1 32 4 0 16 2 19 2 32 1 0 2 5 16 1 6 33 26 0 5 18 3 1 11 0 52 9 0 2 6 33 8 0 5 20 12 0 16 0 48 1 52 10 0 1 33 36 1 18 3 1 13 0 52 9 0 2 6 34 25 0 5 18 3 1 11 0 52 9 0 2 6 33 11 0 5 20 14 0 18 1 1 15 0 48 2 33 10 0 20 16 0 16 0 48 1 32 1 0 2 5 20 17 0 18 1 48 1 17 2 18 3 1 11 0 52 9 0 2 6 33 50 0 5 16 2 1 18 0 52 0 0 2 1 19 0 52 9 0 2 6 33 29 0 5 20 14 0 18 1 1 15 0 48 2 6 33 14 0 5 18 0 1 20 0 52 0 0 2 52 10 0 1 17 3 4 17 4 16 3 33 34 0 20 21 0 20 22 0 16 2 1 23 0 52 0 0 2 48 1 20 24 0 18 1 1 25 0 48 2 48 2 17 4 32 1 0 2 5 16 4 33 29 0 20 26 0 16 2 1 23 0 52 0 0 2 48 1 5 20 27 0 1 28 0 1 28 0 49 2 32 84 0 16 3 33 24 0 20 29 0 1 31 0 16 2 1 23 0 52 0 0 2 52 30 0 2 48 1 32 1 0 2 5 18 0 1 20 0 52 0 0 2 33 32 0 20 32 0 18 4 48 1 5 20 33 0 51 34 0 0 1 18 0 1 20 0 52 0 0 2 48 2 19 4 32 9 0 20 35 0 18 1 2 2 49 3 32 1 0 2 50)} "once" "dict") :bytecode (2 17 4 2 17 5 16 2 1 1 0 52 0 0 2 33 17 0 20 2 0 16 2 1 1 0 52 0 0 2 48 1 32 2 0 16 0 17 6 16 6 33 49 0 20 3 0 16 6 16 1 51 4 0 1 2 1 0 1 5 1 1 1 4 16 2 1 5 0 52 0 0 2 33 11 0 1 5 0 3 52 6 0 2 32 1 0 2 49 4 32 1 0 2 50)} "post-swap" {:upvalue-count 0 :arity 1 :constants ("log-info" "str" "post-swap: root=" "dom-tag-name" "nil" "activate-scripts" "sx-process-scripts" "sx-hydrate" "sx-hydrate-islands" "run-post-render-hooks" "process-elements") :bytecode (20 0 0 1 2 0 16 0 33 10 0 20 3 0 16 0 48 1 32 3 0 1 4 0 52 1 0 2 48 1 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 48 1 5 20 9 0 48 0 5 20 10 0 16 0 49 1 50)} "process-settle-hooks" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-on-settle" "not" "empty?" "sx-parse" "for-each" {:upvalue-count 0 :arity 1 :constants ("eval-expr" "env-extend" "dict") :bytecode (20 0 0 16 0 20 1 0 52 2 0 0 48 1 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 6 33 11 0 5 16 1 52 3 0 1 52 2 0 1 33 21 0 20 4 0 16 1 48 1 17 2 51 6 0 16 2 52 5 0 2 32 1 0 2 50)} "activate-scripts" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "script" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "dom-has-attr?" "data-components" "data-sx-activated" "create-script-clone" "dom-set-attr" "true" "dom-replace-child" "dom-parent") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 15 0 5 20 1 0 16 0 1 3 0 48 2 52 0 0 1 33 42 0 20 4 0 16 0 48 1 17 1 20 5 0 16 1 1 3 0 1 6 0 48 3 5 20 7 0 20 8 0 16 0 48 1 16 1 16 0 49 3 32 1 0 2 50)}) :bytecode (16 0 33 24 0 20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 16 1 52 2 0 2 32 1 0 2 50)} "process-oob-swaps" {:upvalue-count 0 :arity 2 :constants ("find-oob-swaps" "for-each" {:upvalue-count 1 :arity 1 :constants ("get" "target-id" "dom-query-by-id" "element" "swap-type" "dom-parent" "dom-remove-child") :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 16 1 48 1 17 2 16 0 1 3 0 52 0 0 2 17 3 16 0 1 4 0 52 0 0 2 17 4 20 5 0 16 3 48 1 33 17 0 20 6 0 20 5 0 16 3 48 1 16 3 48 2 32 1 0 2 5 16 2 33 13 0 18 0 16 2 16 3 16 4 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 48 1 17 2 51 2 0 1 1 16 2 52 1 0 2 50)} "hoist-head-elements" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-parent" "dom-remove-child" "dom-append-to-head") :bytecode (20 0 0 16 0 48 1 33 17 0 20 1 0 20 0 0 16 0 48 1 16 0 48 2 32 1 0 2 5 20 2 0 16 0 49 1 50)} "dom-query-all" "style[data-sx-css]" "link[rel=\"stylesheet\"]") :bytecode (51 1 0 20 2 0 16 0 1 3 0 48 2 52 0 0 2 5 51 1 0 20 2 0 16 0 1 4 0 48 2 52 0 0 2 50)} "process-boosted" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("boost-descendants") :bytecode (20 0 0 16 0 49 1 50)} "dom-query-all" "dom-body" "[sx-boost]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "boost-descendants" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-boost" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-link?" "mark-processed!" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "sx-push-url" "bind-client-route-link" "dom-get-attr" "href") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 160 0 20 4 0 16 0 1 2 0 48 2 5 20 5 0 16 0 1 6 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 8 0 52 7 0 2 52 0 0 1 33 15 0 20 9 0 16 0 1 6 0 18 0 48 3 32 1 0 2 5 20 5 0 16 0 1 10 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 10 0 1 11 0 48 3 32 1 0 2 5 20 5 0 16 0 1 12 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 12 0 1 8 0 48 3 32 1 0 2 5 20 13 0 16 0 20 14 0 16 0 1 15 0 48 2 49 2 32 1 0 2 50)} "dom-query-all" "a[href]" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-form?" "mark-processed!" "upper" "dom-get-attr" "method" "GET" "action" "browser-location-href" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "bind-boost-form") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 165 0 20 4 0 16 0 1 2 0 48 2 5 20 6 0 16 0 1 7 0 48 2 6 34 4 0 5 1 8 0 52 5 0 1 17 1 20 6 0 16 0 1 9 0 48 2 6 34 6 0 5 20 10 0 48 0 17 2 20 11 0 16 0 1 12 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 14 0 52 13 0 2 52 0 0 1 33 15 0 20 15 0 16 0 1 12 0 18 0 48 3 32 1 0 2 5 20 11 0 16 0 1 16 0 48 2 52 0 0 1 33 16 0 20 15 0 16 0 1 16 0 1 17 0 48 3 32 1 0 2 5 20 18 0 16 0 16 1 16 2 49 3 32 1 0 2 50)} "form") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 1 1 20 4 0 16 0 1 5 0 48 2 52 2 0 2 5 51 6 0 1 1 20 4 0 16 0 1 7 0 48 2 52 2 0 2 50)} "_page-data-cache" "_page-data-cache-ttl" 30000 "page-data-cache-key" {:upvalue-count 0 :arity 2 :constants ("nil?" "empty?" "keys" "list" "for-each" {:upvalue-count 2 :arity 1 :constants ("append!" "str" "=" "get") :bytecode (20 0 0 18 0 16 0 1 2 0 18 1 16 0 52 3 0 2 52 1 0 3 49 2 50)} "str" ":" "join" "&") :bytecode (16 0 17 2 16 1 52 0 0 1 6 34 11 0 5 16 1 52 2 0 1 52 1 0 1 33 5 0 16 2 32 42 0 52 3 0 0 17 3 51 5 0 1 3 1 1 16 1 52 2 0 1 52 4 0 2 5 16 2 1 7 0 1 9 0 16 3 52 8 0 2 52 6 0 3 50)} "page-data-cache-get" {:upvalue-count 0 :arity 1 :constants ("get" "_page-data-cache" "nil?" ">" "-" "now-ms" "ts" "_page-data-cache-ttl" "dict-set!" "data") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 52 2 0 1 33 4 0 2 32 52 0 20 5 0 48 0 16 1 1 6 0 52 0 0 2 52 4 0 2 20 7 0 52 3 0 2 33 15 0 20 1 0 16 0 2 52 8 0 3 5 2 32 9 0 16 1 1 9 0 52 0 0 2 50)} "page-data-cache-set" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "_page-data-cache" "data" "ts" "now-ms") :bytecode (20 1 0 16 0 1 2 0 16 1 1 3 0 20 4 0 48 0 65 2 0 52 0 0 3 50)} "invalidate-page-cache" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("=" "starts-with?" "str" ":" "dict-set!" "_page-data-cache") :bytecode (16 0 18 0 52 0 0 2 6 34 16 0 5 16 0 18 0 1 3 0 52 2 0 2 52 1 0 2 33 13 0 20 5 0 16 0 2 52 4 0 3 32 1 0 2 50)} "keys" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "log-info" "str" "sx:cache invalidate ") :bytecode (51 1 0 1 0 20 3 0 52 2 0 1 52 0 0 2 5 20 4 0 1 5 0 1 6 0 1 7 0 16 0 65 2 0 48 1 5 20 8 0 1 10 0 16 0 52 9 0 2 49 1 50)} "invalidate-all-page-cache" {:upvalue-count 0 :arity 0 :constants ("dict" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "*" "log-info" "sx:cache invalidate *") :bytecode (52 0 0 0 21 1 0 5 20 2 0 1 3 0 1 4 0 1 5 0 1 6 0 65 2 0 48 1 5 20 7 0 1 8 0 49 1 50)} "update-page-cache" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-key" "dict" "page-data-cache-set" "log-info" "str" "sx:cache update ") :bytecode (20 0 0 16 0 52 1 0 0 48 2 17 2 20 2 0 16 2 16 1 48 2 5 20 3 0 1 5 0 16 0 52 4 0 2 49 1 50)} "process-cache-directives" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "sx-cache-invalidate" "=" "*" "invalidate-all-page-cache" "invalidate-page-cache" "get" "cache-invalidate" "cache-update" "parse-sx-data" "update-page-cache") :bytecode (20 0 0 16 0 1 1 0 48 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 7 0 52 6 0 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 8 0 52 6 0 2 17 3 16 3 33 30 0 20 9 0 16 2 48 1 17 4 16 4 33 12 0 20 10 0 16 3 16 4 49 2 32 1 0 2 32 1 0 2 50)} "_optimistic-snapshots" "optimistic-cache-update" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-get" "dict-set!" "_optimistic-snapshots" "page-data-cache-set") :bytecode (20 0 0 16 0 48 1 17 2 16 2 33 35 0 16 1 16 2 48 1 17 3 20 2 0 16 0 16 2 52 1 0 3 5 20 3 0 16 0 16 3 48 2 5 16 3 32 1 0 2 50)} "optimistic-cache-revert" {:upvalue-count 0 :arity 1 :constants ("get" "_optimistic-snapshots" "page-data-cache-set" "dict-delete!") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 33 25 0 20 2 0 16 0 16 1 48 2 5 20 1 0 16 0 52 3 0 2 5 16 1 32 1 0 2 50)} "optimistic-cache-confirm" {:upvalue-count 0 :arity 1 :constants ("dict-delete!" "_optimistic-snapshots") :bytecode (20 1 0 16 0 52 0 0 2 50)} "submit-mutation" {:upvalue-count 0 :arity 6 :constants ("page-data-cache-key" "optimistic-cache-update" "try-rerender-page" "execute-action" {:upvalue-count 4 :arity 1 :constants ("page-data-cache-set" "optimistic-cache-confirm" "try-rerender-page" "log-info" "str" "sx:optimistic confirmed " "confirmed") :bytecode (16 0 33 12 0 20 0 0 18 0 16 0 48 2 32 1 0 2 5 20 1 0 18 0 48 1 5 16 0 33 14 0 20 2 0 18 1 18 2 16 0 48 3 32 1 0 2 5 20 3 0 1 5 0 18 1 52 4 0 2 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)} {:upvalue-count 4 :arity 1 :constants ("optimistic-cache-revert" "try-rerender-page" "log-warn" "str" "sx:optimistic reverted " ": " "reverted") :bytecode (20 0 0 18 0 48 1 17 1 16 1 33 14 0 20 1 0 18 1 18 2 16 1 48 3 32 1 0 2 5 20 2 0 1 4 0 18 1 1 5 0 16 0 52 3 0 4 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)}) :bytecode (20 0 0 16 0 16 1 48 2 17 6 20 1 0 16 6 16 4 48 2 17 7 16 7 33 14 0 20 2 0 16 0 16 1 16 7 48 3 32 1 0 2 5 20 3 0 16 2 16 3 51 4 0 1 6 1 0 1 1 1 5 51 5 0 1 6 1 0 1 1 1 5 49 4 50)} "_is-online" "_offline-queue" "list" "offline-is-online?" {:upvalue-count 0 :arity 0 :constants ("_is-online") :bytecode (20 0 0 50)} "offline-set-online!" {:upvalue-count 0 :arity 1 :constants ("_is-online") :bytecode (16 0 21 0 0 50)} "offline-queue-mutation" {:upvalue-count 0 :arity 5 :constants ("page-data-cache-key" "dict" "action" "payload" "page" "params" "timestamp" "now-ms" "status" "pending" "append!" "_offline-queue" "optimistic-cache-update" "try-rerender-page" "log-info" "str" "sx:offline queued " " (" "len" " pending)") :bytecode (20 0 0 16 2 16 3 48 2 17 5 1 2 0 16 0 1 3 0 16 1 1 4 0 16 2 1 5 0 16 3 1 6 0 20 7 0 48 0 1 8 0 1 9 0 52 1 0 12 17 6 20 10 0 20 11 0 16 6 48 2 5 20 12 0 16 5 16 4 48 2 17 7 16 7 33 14 0 20 13 0 16 2 16 3 16 7 48 3 32 1 0 2 5 20 14 0 1 16 0 16 0 1 17 0 20 11 0 52 18 0 1 1 19 0 52 15 0 5 48 1 5 16 6 50)} "offline-sync" {:upvalue-count 0 :arity 0 :constants ("filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue" "not" "empty?" "log-info" "str" "sx:offline syncing " "len" " mutations" "for-each" {:upvalue-count 0 :arity 1 :constants ("execute-action" "get" "action" "payload" {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "synced" "log-info" "str" "sx:offline synced " "get" "action") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 52 4 0 2 49 1 50)} {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "failed" "log-warn" "str" "sx:offline sync failed " "get" "action" ": ") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 1 8 0 16 0 52 4 0 4 49 1 50)}) :bytecode (20 0 0 16 0 1 2 0 52 1 0 2 16 0 1 3 0 52 1 0 2 51 4 0 1 0 51 5 0 1 0 49 4 50)}) :bytecode (51 1 0 20 2 0 52 0 0 2 17 0 16 0 52 4 0 1 52 3 0 1 33 34 0 20 5 0 1 7 0 16 0 52 8 0 1 1 9 0 52 6 0 3 48 1 5 51 11 0 16 0 52 10 0 2 32 1 0 2 50)} "offline-pending-count" {:upvalue-count 0 :arity 0 :constants ("len" "filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue") :bytecode (51 2 0 20 3 0 52 1 0 2 52 0 0 1 50)} "offline-aware-mutation" {:upvalue-count 0 :arity 6 :constants ("_is-online" "submit-mutation" "offline-queue-mutation" "queued") :bytecode (20 0 0 33 20 0 20 1 0 16 0 16 1 16 2 16 3 16 4 16 5 49 6 32 32 0 20 2 0 16 2 16 3 16 0 16 1 16 4 48 5 5 16 5 33 10 0 16 5 1 3 0 49 1 32 1 0 2 50)} "current-page-layout" {:upvalue-count 0 :arity 0 :constants ("url-pathname" "browser-location-href" "find-matching-route" "_page-routes" "nil?" "" "get" "layout") :bytecode (20 0 0 20 1 0 48 0 48 1 17 0 20 2 0 16 0 20 3 0 48 2 17 1 16 1 52 4 0 1 33 6 0 1 5 0 32 17 0 16 1 1 7 0 52 6 0 2 6 34 4 0 5 1 5 0 50)} "swap-rendered-content" {:upvalue-count 0 :arity 3 :constants ("dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "id" "dom-query" "str" "#" "children-to-fragment" "dispose-islands-in" "dom-set-text-content" "" "hoist-head-elements-full" "process-elements" "sx-hydrate-elements" "sx-hydrate-islands" "run-post-render-hooks" "dom-dispatch" "sx:clientRoute" "dict" "pathname" "log-info" "sx:route client ") :bytecode (20 0 0 1 1 0 2 48 2 17 3 20 2 0 16 3 16 1 48 2 5 20 3 0 16 3 51 4 0 48 2 5 20 5 0 16 0 1 6 0 48 2 17 4 16 4 33 19 0 20 7 0 16 3 1 9 0 16 4 52 8 0 2 48 2 32 1 0 2 17 5 16 5 33 10 0 20 10 0 16 5 48 1 32 7 0 20 10 0 16 3 48 1 17 6 20 11 0 16 0 48 1 5 20 12 0 16 0 1 13 0 48 2 5 20 2 0 16 0 16 6 48 2 5 20 14 0 16 0 48 1 5 20 15 0 16 0 48 1 5 20 16 0 16 0 48 1 5 20 17 0 16 0 48 1 5 20 18 0 48 0 5 20 19 0 16 0 1 20 0 1 22 0 16 2 52 21 0 2 48 3 5 20 23 0 1 24 0 16 2 52 8 0 2 49 1 50)} "resolve-route-target" {:upvalue-count 0 :arity 1 :constants ("not" "=" "true" "dom-query") :bytecode (16 0 6 33 14 0 5 16 0 1 2 0 52 1 0 2 52 0 0 1 33 10 0 20 3 0 16 0 49 1 32 1 0 2 50)} "deps-satisfied?" {:upvalue-count 0 :arity 1 :constants ("get" "deps" "loaded-component-names" "nil?" "empty?" "every?" {:upvalue-count 1 :arity 1 :constants ("contains?") :bytecode (18 0 16 0 52 0 0 2 50)}) :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 48 0 17 2 16 1 52 3 0 1 6 34 7 0 5 16 1 52 4 0 1 33 4 0 3 32 11 0 51 6 0 1 2 16 1 52 5 0 2 50)} "try-client-route" {:upvalue-count 0 :arity 2 :constants ("find-matching-route" "_page-routes" "nil?" "log-info" "str" "sx:route no match (" "len" " routes) " "get" "layout" "" "current-page-layout" "not" "=" "sx:route server (layout: " " -> " ") " "content" "closure" "params" "name" "empty?" "log-warn" "sx:route no content for " "resolve-route-target" "sx:route target not found: " "deps-satisfied?" "sx:route deps miss for " "io-deps" "render-plan" "server" "list" "client" "sx:route plan " " — " " server, " " client" "register-io-deps" "stream" "sx:route streaming " "fetch-streaming" "build-request-headers" "loaded-component-names" "_css-hash" "has-data" "page-data-cache-key" "page-data-cache-get" "merge" "sx:route client+cache+async " "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route cache+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "sx:route cached eval failed for " "sx:route client+cache " "swap-rendered-content" "sx:route client+data " "resolve-page-data" {:upvalue-count 7 :arity 1 :constants ("page-data-cache-set" "merge" "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route data+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "nil?" "log-warn" "str" "sx:route data eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (20 0 0 18 0 16 0 48 2 5 18 1 18 2 16 0 52 1 0 3 17 1 18 3 33 19 0 20 2 0 18 4 16 1 51 3 0 0 5 0 6 49 3 32 79 0 20 4 0 18 4 16 1 48 2 17 2 16 2 52 5 0 1 33 48 0 20 6 0 1 8 0 18 5 1 9 0 52 7 0 3 48 1 5 20 10 0 18 6 18 5 20 11 0 18 6 20 12 0 48 0 20 13 0 48 3 1 14 0 49 4 32 11 0 20 15 0 18 6 16 2 18 5 49 3 50)} "sx:route client+async " {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "sx:route server (eval failed) ") :bytecode (20 0 0 16 0 20 1 0 48 2 17 2 16 2 52 2 0 1 33 29 0 20 3 0 1 5 0 20 1 0 52 6 0 1 1 7 0 16 0 52 4 0 4 48 1 5 4 32 233 2 16 2 1 9 0 52 8 0 2 6 34 4 0 5 1 10 0 17 3 20 11 0 48 0 17 4 16 3 16 4 52 13 0 2 52 12 0 1 33 29 0 20 3 0 1 14 0 16 4 1 15 0 16 3 1 16 0 16 0 52 4 0 6 48 1 5 4 32 163 2 16 2 1 17 0 52 8 0 2 17 5 16 2 1 18 0 52 8 0 2 6 34 4 0 5 65 0 0 17 6 16 2 1 19 0 52 8 0 2 17 7 16 2 1 20 0 52 8 0 2 17 8 16 5 52 2 0 1 6 34 7 0 5 16 5 52 21 0 1 33 19 0 20 22 0 1 23 0 16 0 52 4 0 2 48 1 5 4 32 72 2 20 24 0 16 1 48 1 17 9 16 9 52 2 0 1 33 19 0 20 22 0 1 25 0 16 1 52 4 0 2 48 1 5 4 32 35 2 20 26 0 16 2 48 1 52 12 0 1 33 19 0 20 3 0 1 27 0 16 8 52 4 0 2 48 1 5 4 32 2 2 16 2 1 28 0 52 8 0 2 17 10 16 10 6 33 11 0 5 16 10 52 21 0 1 52 12 0 1 17 11 16 2 1 29 0 52 8 0 2 17 12 16 12 33 78 0 16 12 1 30 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 13 16 12 1 32 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 14 20 3 0 1 33 0 16 8 1 34 0 16 13 52 6 0 1 1 35 0 16 14 52 6 0 1 1 36 0 52 4 0 7 48 1 32 1 0 2 5 16 11 33 10 0 20 37 0 16 10 48 1 32 1 0 2 5 16 2 1 38 0 52 8 0 2 33 44 0 20 3 0 1 39 0 16 0 52 4 0 2 48 1 5 20 40 0 16 9 16 0 20 41 0 16 9 20 42 0 48 0 20 43 0 48 3 48 3 5 3 32 59 1 16 2 1 44 0 52 8 0 2 33 194 0 20 45 0 16 8 16 7 48 2 17 13 20 46 0 16 13 48 1 17 14 16 14 33 123 0 16 6 16 7 16 14 52 47 0 3 17 15 16 11 33 36 0 20 3 0 1 48 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 15 51 50 0 1 0 1 9 48 3 5 3 32 67 0 20 51 0 16 5 16 15 48 2 17 16 16 16 52 2 0 1 33 19 0 20 22 0 1 52 0 16 0 52 4 0 2 48 1 5 4 32 28 0 20 3 0 1 53 0 16 0 52 4 0 2 48 1 5 20 54 0 16 9 16 16 16 0 48 3 5 3 32 43 0 20 3 0 1 55 0 16 0 52 4 0 2 48 1 5 20 56 0 16 8 16 7 51 57 0 1 13 1 6 1 7 1 11 1 5 1 0 1 9 48 3 5 3 32 109 0 16 11 33 42 0 20 3 0 1 58 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 6 16 7 52 47 0 2 51 59 0 1 0 1 9 48 3 5 3 32 62 0 16 6 16 7 52 47 0 2 17 13 20 51 0 16 5 16 13 48 2 17 14 16 14 52 2 0 1 33 19 0 20 3 0 1 60 0 16 0 52 4 0 2 48 1 5 4 32 13 0 20 54 0 16 9 16 14 16 0 48 3 5 3 50)} "bind-client-route-link" {:upvalue-count 0 :arity 2 :constants ("bind-client-route-click" {:upvalue-count 2 :arity 0 :constants ("bind-boost-link") :bytecode (20 0 0 18 0 18 1 49 2 50)}) :bytecode (20 0 0 16 0 16 1 51 1 0 1 0 1 1 49 3 50)} "process-sse" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "sse" "mark-processed!" "bind-sse") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "dom-query-all" "dom-body" "[sx-sse]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-sse" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-sse" "event-source-connect" "parse-sse-swap" "event-source-listen" {:upvalue-count 1 :arity 1 :constants ("bind-sse-swap") :bytecode (20 0 0 18 0 16 0 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 37 0 20 2 0 16 1 16 0 48 2 17 2 20 3 0 16 0 48 1 17 3 20 4 0 16 2 16 3 51 5 0 1 0 49 3 32 1 0 2 50)} "bind-sse-swap" {:upvalue-count 0 :arity 2 :constants ("resolve-target" "parse-swap-spec" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "get" "style" "transition" "trim" "not" "empty?" "dispose-islands-in" "starts-with?" "(" "sx-render" "dom-create-element" "div" "dom-append" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-html-string" "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 0 49 1 50)}) :bytecode (20 0 0 16 0 48 1 17 2 20 1 0 20 2 0 16 0 1 3 0 48 2 20 4 0 20 5 0 48 0 1 6 0 48 2 48 2 17 3 16 3 1 8 0 52 7 0 2 17 4 16 3 1 9 0 52 7 0 2 17 5 16 1 52 10 0 1 17 6 16 6 52 12 0 1 52 11 0 1 33 88 0 20 13 0 16 2 48 1 5 16 6 1 15 0 52 14 0 2 33 49 0 20 16 0 16 6 48 1 17 7 20 17 0 1 18 0 2 48 2 17 8 20 19 0 16 8 16 7 48 2 5 20 20 0 16 5 51 21 0 1 2 1 8 1 4 49 2 32 16 0 20 20 0 16 5 51 22 0 1 2 1 6 1 4 49 2 32 1 0 2 50)} "bind-inline-handlers" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("first" "nth" 1 "starts-with?" "sx-on:" "slice" 6 "after" "before" "str" "sx:" "not" "is-processed?" "on:" "mark-processed!" "dom-on" "contains?" "." {:upvalue-count 2 :arity 1 :constants ("host-call" "dom-window" "Function" "event" "call") :bytecode (20 0 0 20 0 0 20 1 0 48 0 1 2 0 1 3 0 18 0 48 4 1 4 0 18 1 16 0 49 4 50)} "parse" {:upvalue-count 2 :arity 1 :constants ("make-env" "env-bind!" "event" "this" "detail" "event-detail" "for-each" {:upvalue-count 1 :arity 1 :constants ("eval-expr") :bytecode (20 0 0 16 0 18 0 49 2 50)}) :bytecode (20 0 0 48 0 17 1 20 1 0 16 1 1 2 0 16 0 48 3 5 20 1 0 16 1 1 3 0 18 0 48 3 5 20 1 0 16 1 1 4 0 20 5 0 16 0 48 1 48 3 5 51 7 0 1 1 18 1 52 6 0 2 50)}) :bytecode (16 0 52 0 0 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 147 0 16 1 1 6 0 52 5 0 2 17 4 16 4 1 7 0 52 3 0 2 6 34 10 0 5 16 4 1 8 0 52 3 0 2 33 12 0 1 10 0 16 4 52 9 0 2 32 2 0 16 4 17 3 20 12 0 18 0 1 13 0 16 3 52 9 0 2 48 2 52 11 0 1 33 67 0 20 14 0 18 0 1 13 0 16 3 52 9 0 2 48 2 5 20 15 0 18 0 16 3 16 2 1 17 0 52 16 0 2 33 10 0 51 18 0 1 2 0 0 32 16 0 20 19 0 16 2 48 1 17 4 51 20 0 0 0 1 4 49 3 32 1 0 2 32 1 0 2 50)} "dom-attr-list") :bytecode (51 1 0 1 0 20 2 0 16 0 48 1 52 0 0 2 50)} "dom-query-all" "dom-body" "[sx-on\\:]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-preload-for" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-preload" "=" "mousedown" "list" "touchstart" "mouseover" 0 100 "bind-preload" {:upvalue-count 1 :arity 0 :constants ("get-verb-info" "do-preload" "get" "url" "build-request-headers" "loaded-component-names" "_css-hash") :bytecode (20 0 0 18 0 48 1 17 0 16 0 33 32 0 20 1 0 16 0 1 3 0 52 2 0 2 20 4 0 18 0 20 5 0 48 0 20 6 0 48 3 49 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 76 0 16 1 1 3 0 52 2 0 2 33 13 0 1 3 0 1 5 0 52 4 0 2 32 7 0 1 6 0 52 4 0 1 17 2 16 1 1 3 0 52 2 0 2 33 6 0 1 7 0 32 3 0 1 8 0 17 3 20 9 0 16 0 16 2 16 3 51 10 0 1 0 49 4 32 1 0 2 50)} "do-preload" {:upvalue-count 0 :arity 2 :constants ("nil?" "preload-cache-get" "_preload-cache" "fetch-preload") :bytecode (20 1 0 20 2 0 16 0 48 2 52 0 0 1 33 15 0 20 3 0 16 0 16 1 20 2 0 49 3 32 1 0 2 50)} "VERB_SELECTOR" "str" "[sx-get],[sx-post],[sx-put],[sx-delete],[sx-patch]" "process-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "VERB_SELECTOR" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "verb" "mark-processed!" "process-one") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "process-boosted" "process-sse" "bind-inline-handlers" "process-emit-elements") :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 20 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 49 1 50)} "process-one" {:upvalue-count 0 :arity 1 :constants ("get-verb-info" "not" "dom-has-attr?" "sx-disable" "bind-triggers" "bind-preload-for") :bytecode (20 0 0 16 0 48 1 17 1 16 1 33 41 0 20 2 0 16 0 1 3 0 48 2 52 1 0 1 33 20 0 20 4 0 16 0 16 1 48 2 5 20 5 0 16 0 49 1 32 1 0 2 32 1 0 2 50)} "process-emit-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "[data-sx-emit]" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "emit" "mark-processed!" "dom-get-attr" "data-sx-emit" "dom-on" "click" {:upvalue-count 2 :arity 1 :constants ("dom-get-attr" "data-sx-emit-detail" "json-parse" "dict" "dom-dispatch") :bytecode (20 0 0 18 0 1 1 0 48 2 17 1 16 1 33 10 0 20 2 0 16 1 48 1 32 4 0 52 3 0 0 17 2 20 4 0 18 0 18 1 16 2 49 3 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 52 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 1 5 0 48 2 17 1 16 1 33 20 0 20 6 0 16 0 1 7 0 51 8 0 1 0 1 1 49 3 32 1 0 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 1 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 50)} "handle-popstate" {:upvalue-count 0 :arity 1 :constants ("browser-location-href" "dom-query" "[sx-boost]" "dom-get-attr" "sx-boost" "not" "=" "true" "#main-panel" "url-pathname" "try-client-route" "browser-scroll-to" 0 "build-request-headers" "loaded-component-names" "_css-hash" "fetch-and-restore") :bytecode (20 0 0 48 0 17 1 20 1 0 1 2 0 48 1 17 2 16 2 33 44 0 20 3 0 16 2 1 4 0 48 2 17 4 16 4 6 33 14 0 5 16 4 1 7 0 52 6 0 2 52 5 0 1 33 5 0 16 4 32 1 0 2 32 1 0 2 17 3 16 3 6 34 4 0 5 1 8 0 17 3 20 1 0 16 3 48 1 17 4 20 9 0 16 1 48 1 17 5 16 4 33 58 0 20 10 0 16 5 16 3 48 2 33 13 0 20 11 0 1 12 0 16 0 49 2 32 30 0 20 13 0 16 4 20 14 0 48 0 20 15 0 48 3 17 6 20 16 0 16 4 16 1 16 6 16 0 49 4 32 1 0 2 50)} "engine-init" {:upvalue-count 0 :arity 0 :constants ("init-css-tracking" "sx-process-scripts" "sx-hydrate" "process-elements") :bytecode (20 0 0 48 0 5 20 1 0 2 48 1 5 20 2 0 2 48 1 5 20 3 0 2 49 1 50)}) :bytecode (52 1 0 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 51 19 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 52 1 0 0 128 38 0 5 1 40 0 128 39 0 5 51 42 0 128 41 0 5 51 44 0 128 43 0 5 51 46 0 128 45 0 5 51 48 0 128 47 0 5 51 50 0 128 49 0 5 51 52 0 128 51 0 5 51 54 0 128 53 0 5 52 1 0 0 128 55 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 5 51 61 0 128 60 0 5 51 63 0 128 62 0 5 3 128 64 0 5 52 66 0 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 51 84 0 128 83 0 5 51 86 0 128 85 0 5 51 88 0 128 87 0 5 51 90 0 128 89 0 5 51 92 0 128 91 0 5 51 94 0 128 93 0 5 51 96 0 128 95 0 5 51 98 0 128 97 0 5 51 100 0 128 99 0 5 51 102 0 128 101 0 5 1 105 0 52 104 0 1 128 103 0 5 51 107 0 128 106 0 5 51 109 0 128 108 0 5 51 111 0 128 110 0 5 51 113 0 128 112 0 5 51 115 0 128 114 0 50))) + :constants ("_preload-cache" "dict" "_css-hash" "" "dispatch-trigger-events" {:upvalue-count 0 :arity 2 :constants ("try-parse-json" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-dispatch" "get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 49 3 50)} "keys" {:upvalue-count 1 :arity 1 :constants ("trim" "not" "empty?" "dom-dispatch" "dict") :bytecode (16 0 52 0 0 1 17 1 16 1 52 2 0 1 52 1 0 1 33 16 0 20 3 0 18 0 16 1 52 4 0 0 49 3 32 1 0 2 50)} "split" ",") :bytecode (16 1 33 55 0 20 0 0 16 1 48 1 17 2 16 2 33 20 0 51 2 0 1 0 1 2 16 2 52 3 0 1 52 1 0 2 32 18 0 51 4 0 1 0 16 1 1 6 0 52 5 0 2 52 1 0 2 32 1 0 2 50)} "init-css-tracking" {:upvalue-count 0 :arity 0 :constants ("dom-query" "meta[name=\"sx-css-classes\"]" "dom-get-attr" "content" "_css-hash") :bytecode (20 0 0 1 1 0 48 1 17 0 16 0 33 29 0 20 2 0 16 0 1 3 0 48 2 17 1 16 1 33 8 0 16 1 21 4 0 32 1 0 2 32 1 0 2 50)} "execute-request" {:upvalue-count 0 :arity 3 :constants ("get-verb-info" "nil?" "promise-resolve" "get" "method" "url" "dom-get-attr" "sx-media" "not" "browser-media-matches?" "sx-confirm" "browser-confirm" "sx-prompt" "browser-prompt" "validate-for-request" "do-fetch" "assoc" "dict" "SX-Prompt") :bytecode (20 0 0 16 0 48 1 6 34 3 0 5 16 1 17 3 16 3 52 1 0 1 33 9 0 20 2 0 2 49 1 32 249 0 16 3 1 4 0 52 3 0 2 17 4 16 3 1 5 0 52 3 0 2 17 5 20 6 0 16 0 1 7 0 48 2 17 6 16 6 6 33 12 0 5 20 9 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 185 0 20 6 0 16 0 1 10 0 48 2 17 6 16 6 6 33 12 0 5 20 11 0 16 6 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 143 0 20 6 0 16 0 1 12 0 48 2 17 6 16 6 33 10 0 20 13 0 16 6 48 1 32 1 0 2 17 7 16 6 6 33 7 0 5 16 7 52 1 0 1 33 9 0 20 2 0 2 49 1 32 88 0 16 4 52 1 0 1 6 34 23 0 5 16 5 52 1 0 1 6 34 12 0 5 20 14 0 16 0 48 1 52 8 0 1 33 9 0 20 2 0 2 49 1 32 43 0 20 15 0 16 0 16 4 16 4 16 5 16 7 33 23 0 16 2 6 34 5 0 5 52 17 0 0 1 18 0 16 7 52 16 0 3 32 2 0 16 2 49 5 50)} "do-fetch" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-sync" "=" "replace" "abort-previous" "resolve-target" "not" "identical?" "abort-previous-target" "new-abort-controller" "track-controller" "track-controller-target" "build-request-body" "get" "url" "body" "content-type" "build-request-headers" "loaded-component-names" "_css-hash" "csrf-token" "for-each" {:upvalue-count 2 :arity 1 :constants ("dict-set!" "get") :bytecode (18 0 16 0 18 1 16 0 52 1 0 2 52 0 0 3 50)} "keys" "dict-set!" "Content-Type" "X-CSRFToken" "preload-cache-get" "_preload-cache" "apply-optimistic" "show-indicator" "disable-elements" "dom-add-class" "sx-request" "dom-set-attr" "aria-busy" "true" "dom-dispatch" "sx:beforeRequest" "dict" "method" "fetch-request" "headers" "signal" "controller-signal" "cross-origin" "cross-origin?" "preloaded" {:upvalue-count 8 :arity 4 :constants ("clear-loading-state" "revert-optimistic" "not" "dom-dispatch" "sx:responseError" "dict" "status" "text" ">" "len" 0 "handle-fetch-success" "handle-retry" "sx:afterRequest") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 16 0 52 2 0 1 33 86 0 20 3 0 18 0 1 4 0 1 6 0 16 1 1 7 0 16 3 52 5 0 4 48 3 5 16 3 6 33 14 0 5 16 3 52 9 0 1 1 10 0 52 8 0 2 33 20 0 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 32 15 0 20 12 0 18 0 18 5 18 7 18 4 18 6 49 5 32 37 0 20 3 0 18 0 1 13 0 1 6 0 16 1 52 5 0 2 48 3 5 20 11 0 18 0 18 4 18 5 18 6 16 2 16 3 49 6 50)} {:upvalue-count 6 :arity 1 :constants ("clear-loading-state" "revert-optimistic" "not" "abort-error?" "log-warn" "str" "sx:fetch error " " " " — " "dom-dispatch" "sx:requestError" "dict" "error") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 3 48 1 5 20 3 0 16 0 48 1 52 2 0 1 33 47 0 20 4 0 1 6 0 18 4 1 7 0 18 5 1 8 0 16 0 52 5 0 6 48 1 5 20 9 0 18 0 1 10 0 1 12 0 16 0 52 11 0 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 16 5 1 3 0 52 2 0 2 33 10 0 20 4 0 16 0 48 1 32 1 0 2 5 20 5 0 16 0 48 1 17 6 16 6 6 33 13 0 5 16 0 16 6 52 7 0 2 52 6 0 1 33 10 0 20 8 0 16 6 48 1 32 1 0 2 5 20 9 0 48 0 17 6 20 10 0 16 0 16 6 48 2 5 20 5 0 16 0 48 1 17 7 16 7 33 12 0 20 11 0 16 7 16 6 48 2 32 1 0 2 5 20 12 0 16 0 16 2 16 3 48 3 17 7 16 7 1 14 0 52 13 0 2 17 8 16 7 1 15 0 52 13 0 2 17 9 16 7 1 16 0 52 13 0 2 17 10 20 17 0 16 0 20 18 0 48 0 20 19 0 48 3 17 11 20 20 0 48 0 17 12 16 4 33 20 0 51 22 0 1 11 1 4 16 4 52 23 0 1 52 21 0 2 32 1 0 2 5 16 10 33 14 0 16 11 1 25 0 16 10 52 24 0 3 32 1 0 2 5 16 12 33 14 0 16 11 1 26 0 16 12 52 24 0 3 32 1 0 2 5 20 27 0 20 28 0 16 8 48 2 17 13 20 29 0 16 0 48 1 17 14 20 30 0 16 0 48 1 17 15 20 31 0 16 0 48 1 17 16 20 32 0 16 0 1 33 0 48 2 5 20 34 0 16 0 1 35 0 1 36 0 48 3 5 20 37 0 16 0 1 38 0 1 14 0 16 8 1 40 0 16 2 52 39 0 4 48 3 5 20 41 0 1 14 0 16 8 1 40 0 16 2 1 42 0 16 11 1 15 0 16 9 1 43 0 20 44 0 16 6 48 1 1 45 0 20 46 0 16 8 48 1 1 47 0 16 13 52 39 0 14 51 48 0 1 0 1 15 1 16 1 14 1 8 1 1 1 4 1 2 51 49 0 1 0 1 15 1 16 1 14 1 2 1 8 49 3 50)} "handle-fetch-success" {:upvalue-count 0 :arity 6 :constants ("process-response-headers" "get" "css-hash" "_css-hash" "dispatch-trigger-events" "trigger" "process-cache-directives" "redirect" "browser-navigate" "refresh" "browser-reload" "location" "fetch-location" "retarget" "dom-query" "resolve-target" "parse-swap-spec" "reswap" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "style" "transition" "content-type" "" "contains?" "text/sx" "handle-sx-response" "handle-html-response" "trigger-swap" "handle-history" "set-timeout" {:upvalue-count 2 :arity 0 :constants ("get" "trigger-settle" "dispatch-trigger-events" "process-settle-hooks") :bytecode (18 0 1 1 0 52 0 0 2 33 19 0 20 2 0 18 1 18 0 1 1 0 52 0 0 2 48 2 32 1 0 2 5 20 3 0 18 1 49 1 50)} 20 "dom-dispatch" "sx:afterSwap" "dict" "target" "swap") :bytecode (20 0 0 16 4 48 1 17 6 16 6 1 2 0 52 1 0 2 17 7 16 7 33 8 0 16 7 21 3 0 32 1 0 2 5 20 4 0 16 0 16 6 1 5 0 52 1 0 2 48 2 5 20 6 0 16 0 16 6 16 5 48 3 5 16 6 1 7 0 52 1 0 2 33 17 0 20 8 0 16 6 1 7 0 52 1 0 2 49 1 32 31 1 16 6 1 9 0 52 1 0 2 33 8 0 20 10 0 49 0 32 11 1 16 6 1 11 0 52 1 0 2 33 17 0 20 12 0 16 6 1 11 0 52 1 0 2 49 1 32 238 0 16 6 1 13 0 52 1 0 2 33 17 0 20 14 0 16 6 1 13 0 52 1 0 2 48 1 32 7 0 20 15 0 16 0 48 1 17 7 20 16 0 16 6 1 17 0 52 1 0 2 6 34 11 0 5 20 18 0 16 0 1 19 0 48 2 20 20 0 20 21 0 48 0 1 22 0 48 2 48 2 17 8 16 8 1 23 0 52 1 0 2 17 9 16 8 1 24 0 52 1 0 2 17 10 16 6 1 25 0 52 1 0 2 6 34 4 0 5 1 26 0 17 11 16 11 1 28 0 52 27 0 2 33 18 0 20 29 0 16 0 16 7 16 5 16 9 16 10 48 5 32 15 0 20 30 0 16 0 16 7 16 5 16 9 16 10 48 5 5 20 4 0 16 0 16 6 1 31 0 52 1 0 2 48 2 5 20 32 0 16 0 16 1 16 6 48 3 5 20 33 0 51 34 0 1 6 1 0 1 35 0 48 2 5 20 36 0 16 0 1 37 0 1 39 0 16 7 1 40 0 16 9 52 38 0 4 49 3 50)} "handle-sx-response" {:upvalue-count 0 :arity 5 :constants ("strip-component-scripts" "extract-response-css" "trim" "not" "empty?" "sx-render" "dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "sx-select" "select-from-container" "children-to-fragment" "dispose-islands-in" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "post-swap" "=" "outerHTML" "dom-parent") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 18 2 1 3 0 52 2 0 2 33 17 0 20 4 0 16 0 6 34 3 0 5 18 0 48 1 32 9 0 16 0 6 34 3 0 5 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 20 1 0 16 5 48 1 17 6 16 6 52 2 0 1 17 7 16 7 52 4 0 1 52 3 0 1 33 106 0 20 5 0 16 7 48 1 17 8 20 6 0 1 7 0 2 48 2 17 9 20 8 0 16 9 16 8 48 2 5 20 9 0 16 9 51 10 0 48 2 5 20 11 0 16 0 1 12 0 48 2 17 10 16 10 33 12 0 20 13 0 16 9 16 10 48 2 32 7 0 20 14 0 16 9 48 1 17 11 20 15 0 16 1 48 1 5 20 16 0 16 4 51 17 0 1 1 1 11 1 3 49 2 32 1 0 2 50)} "handle-html-response" {:upvalue-count 0 :arity 5 :constants ("dom-parse-html-document" "dom-get-attr" "sx-select" "dispose-islands-in" "dom-create-element" "div" "dom-set-inner-html" "dom-body-inner-html" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 1 16 2 48 3 5 20 2 0 16 0 49 1 50)} "hoist-head-elements" "select-from-container" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "log-info" "str" "swap-root: " "dom-tag-name" "nil" " target: " "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 17 0 20 1 0 1 3 0 16 0 33 10 0 20 4 0 16 0 48 1 32 3 0 1 5 0 1 6 0 20 4 0 18 0 48 1 52 2 0 4 48 1 5 20 7 0 16 0 6 34 3 0 5 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)}) :bytecode (20 0 0 16 2 48 1 17 5 16 5 33 164 0 20 1 0 16 0 1 2 0 48 2 17 6 20 3 0 16 1 48 1 5 16 6 33 75 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 11 0 16 7 16 6 48 2 17 8 20 12 0 16 4 51 13 0 1 1 1 8 1 3 49 2 32 61 0 20 4 0 1 5 0 2 48 2 17 7 20 6 0 16 7 20 7 0 16 5 48 1 48 2 5 20 8 0 16 7 51 9 0 48 2 5 20 10 0 16 7 48 1 5 20 12 0 16 4 51 14 0 1 1 1 7 1 3 49 2 32 1 0 2 50)} "handle-retry" {:upvalue-count 0 :arity 5 :constants ("dom-get-attr" "sx-retry" "parse-retry-spec" "data-sx-retry-ms" "get" "start-ms" "parse-int" "dom-set-attr" "str" "next-retry-ms" "cap-ms" "set-timeout" {:upvalue-count 5 :arity 0 :constants ("do-fetch") :bytecode (20 0 0 18 0 18 1 18 2 18 3 18 4 49 5 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 5 20 2 0 16 5 48 1 17 6 16 6 33 97 0 20 0 0 16 0 1 3 0 48 2 6 34 10 0 5 16 6 1 5 0 52 4 0 2 17 7 16 7 16 6 1 5 0 52 4 0 2 52 6 0 2 17 8 20 7 0 16 0 1 3 0 20 9 0 16 8 16 6 1 10 0 52 4 0 2 48 2 52 8 0 1 48 3 5 20 11 0 51 12 0 1 0 1 1 1 2 1 3 1 4 16 8 49 2 32 1 0 2 50)} "bind-triggers" {:upvalue-count 0 :arity 2 :constants ("parse-trigger-spec" "dom-get-attr" "sx-trigger" "default-trigger" "dom-tag-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("classify-trigger" "get" "modifiers" "=" "poll" "set-interval" {:upvalue-count 2 :arity 0 :constants ("host-get" "isConnected" "execute-request" "clear-interval" "log-info" "poll stopped: element removed") :bytecode (20 0 0 18 0 1 1 0 48 2 33 12 0 20 2 0 18 0 2 2 49 3 32 16 0 20 3 0 18 1 48 1 5 20 4 0 1 5 0 49 1 50)} "interval" "intersect" "observe-intersection" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "delay" "load" "set-timeout" 0 "revealed" "event" "bind-event") :bytecode (20 0 0 16 0 48 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 29 0 2 17 3 20 5 0 51 6 0 0 0 1 3 16 2 1 7 0 52 1 0 2 48 2 17 3 32 152 0 16 1 1 8 0 52 3 0 2 33 25 0 20 9 0 18 0 51 10 0 0 0 4 16 2 1 11 0 52 1 0 2 49 4 32 115 0 16 1 1 12 0 52 3 0 2 33 30 0 20 13 0 51 10 0 0 0 16 2 1 11 0 52 1 0 2 6 34 4 0 5 1 14 0 49 2 32 73 0 16 1 1 15 0 52 3 0 2 33 25 0 20 9 0 18 0 51 10 0 0 0 3 16 2 1 11 0 52 1 0 2 49 4 32 36 0 16 1 1 16 0 52 3 0 2 33 23 0 20 17 0 18 0 16 0 1 16 0 52 1 0 2 16 2 18 1 49 4 32 1 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 1 2 0 48 2 48 1 6 34 13 0 5 20 3 0 20 4 0 16 0 48 1 48 1 17 2 51 6 0 1 0 1 1 16 2 52 5 0 2 50)} "bind-event" {:upvalue-count 0 :arity 4 :constants ("get" "from" "nil?" "=" "body" "dom-body" "document" "dom-document" "window" "dom-window" "dom-query" "dom-add-listener" {:upvalue-count 5 :arity 1 :constants ("get" "filter" "index-of" "key=='" ">=" 0 "slice" "+" 5 6 "=" "host-get" "key" "not" "dom-matches?" "target" "input,textarea,select" "changed" "element-value" "click" "event-modifier-key?" "submit" "dom-has-attr?" "href" "prevent-default" "get-verb-info" "method" "GET" "delay" "try-client-route" "url-pathname" "url" "dom-get-attr" "sx-target" "browser-push-state" "browser-scroll-to" "log-info" "str" "sx:route server fetch " "clear-timeout" "set-timeout" {:upvalue-count 1 :arity 0 :constants ("execute-request") :bytecode (20 0 0 18 0 2 2 49 3 50)} "execute-request") :bytecode (18 0 1 1 0 52 0 0 2 33 110 0 18 0 1 1 0 52 0 0 2 17 2 16 2 1 3 0 52 2 0 2 17 3 16 3 1 5 0 52 4 0 2 33 72 0 16 2 16 3 1 8 0 52 7 0 2 16 3 1 9 0 52 7 0 2 52 6 0 3 17 4 20 11 0 16 0 1 12 0 48 2 16 4 52 10 0 2 6 33 23 0 5 20 14 0 20 11 0 16 0 1 15 0 48 2 1 16 0 48 2 52 13 0 1 32 1 0 3 32 1 0 3 17 1 18 0 1 17 0 52 0 0 2 33 29 0 20 18 0 17 2 16 2 18 1 52 10 0 2 33 6 0 4 17 1 32 4 0 16 2 19 1 32 1 0 2 5 16 1 6 33 26 0 5 18 2 1 19 0 52 10 0 2 6 33 8 0 5 20 20 0 16 0 48 1 52 13 0 1 33 36 1 18 2 1 21 0 52 10 0 2 6 34 25 0 5 18 2 1 19 0 52 10 0 2 6 33 11 0 5 20 22 0 18 3 1 23 0 48 2 33 10 0 20 24 0 16 0 48 1 32 1 0 2 5 20 25 0 18 3 48 1 17 2 18 2 1 19 0 52 10 0 2 6 33 50 0 5 16 2 1 26 0 52 0 0 2 1 27 0 52 10 0 2 6 33 29 0 5 20 22 0 18 3 1 23 0 48 2 6 33 14 0 5 18 0 1 28 0 52 0 0 2 52 13 0 1 17 3 4 17 4 16 3 33 34 0 20 29 0 20 30 0 16 2 1 31 0 52 0 0 2 48 1 20 32 0 18 3 1 33 0 48 2 48 2 17 4 32 1 0 2 5 16 4 33 29 0 20 34 0 16 2 1 31 0 52 0 0 2 48 1 5 20 35 0 1 5 0 1 5 0 49 2 32 84 0 16 3 33 24 0 20 36 0 1 38 0 16 2 1 31 0 52 0 0 2 52 37 0 2 48 1 32 1 0 2 5 18 0 1 28 0 52 0 0 2 33 32 0 20 39 0 18 4 48 1 5 20 40 0 51 41 0 0 3 18 0 1 28 0 52 0 0 2 48 2 19 4 32 9 0 20 42 0 18 3 2 2 49 3 32 1 0 2 50)} "once" "dict") :bytecode (2 17 4 2 17 5 16 2 1 1 0 52 0 0 2 17 7 16 7 52 2 0 1 33 5 0 16 0 32 67 0 16 7 1 4 0 52 3 0 2 33 8 0 20 5 0 48 0 32 47 0 16 7 1 6 0 52 3 0 2 33 8 0 20 7 0 48 0 32 27 0 16 7 1 8 0 52 3 0 2 33 8 0 20 9 0 48 0 32 7 0 20 10 0 16 7 48 1 17 6 16 6 33 49 0 20 11 0 16 6 16 1 51 12 0 1 2 1 5 1 1 1 0 1 4 16 2 1 13 0 52 0 0 2 33 11 0 1 13 0 3 52 14 0 2 32 1 0 2 49 4 32 1 0 2 50)} "post-swap" {:upvalue-count 0 :arity 1 :constants ("log-info" "str" "post-swap: root=" "dom-tag-name" "nil" "activate-scripts" "sx-process-scripts" "sx-hydrate" "sx-hydrate-islands" "run-post-render-hooks" "process-elements") :bytecode (20 0 0 1 2 0 16 0 33 10 0 20 3 0 16 0 48 1 32 3 0 1 4 0 52 1 0 2 48 1 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 48 1 5 20 9 0 48 0 5 20 10 0 16 0 49 1 50)} "process-settle-hooks" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-on-settle" "not" "empty?" "sx-parse" "for-each" {:upvalue-count 0 :arity 1 :constants ("eval-expr" "env-extend" "dict") :bytecode (20 0 0 16 0 20 1 0 52 2 0 0 48 1 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 6 33 11 0 5 16 1 52 3 0 1 52 2 0 1 33 21 0 20 4 0 16 1 48 1 17 2 51 6 0 16 2 52 5 0 2 32 1 0 2 50)} "activate-scripts" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "script" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "dom-has-attr?" "data-components" "data-sx-activated" "create-script-clone" "dom-set-attr" "true" "dom-replace-child" "dom-parent") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 15 0 5 20 1 0 16 0 1 3 0 48 2 52 0 0 1 33 42 0 20 4 0 16 0 48 1 17 1 20 5 0 16 1 1 3 0 1 6 0 48 3 5 20 7 0 20 8 0 16 0 48 1 16 1 16 0 49 3 32 1 0 2 50)}) :bytecode (16 0 33 24 0 20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 16 1 52 2 0 2 32 1 0 2 50)} "process-oob-swaps" {:upvalue-count 0 :arity 2 :constants ("find-oob-swaps" "for-each" {:upvalue-count 1 :arity 1 :constants ("get" "target-id" "dom-query-by-id" "element" "swap-type" "dom-parent" "dom-remove-child") :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 16 1 48 1 17 2 16 0 1 3 0 52 0 0 2 17 3 16 0 1 4 0 52 0 0 2 17 4 20 5 0 16 3 48 1 33 17 0 20 6 0 20 5 0 16 3 48 1 16 3 48 2 32 1 0 2 5 16 2 33 13 0 18 0 16 2 16 3 16 4 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 48 1 17 2 51 2 0 1 1 16 2 52 1 0 2 50)} "hoist-head-elements" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-parent" "dom-remove-child" "dom-append-to-head") :bytecode (20 0 0 16 0 48 1 33 17 0 20 1 0 20 0 0 16 0 48 1 16 0 48 2 32 1 0 2 5 20 2 0 16 0 49 1 50)} "dom-query-all" "style[data-sx-css]" "link[rel=\"stylesheet\"]") :bytecode (51 1 0 20 2 0 16 0 1 3 0 48 2 52 0 0 2 5 51 1 0 20 2 0 16 0 1 4 0 48 2 52 0 0 2 50)} "process-boosted" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("boost-descendants") :bytecode (20 0 0 16 0 49 1 50)} "dom-query-all" "dom-body" "[sx-boost]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "boost-descendants" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-boost" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-link?" "mark-processed!" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "sx-push-url" "bind-client-route-link" "dom-get-attr" "href") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 160 0 20 4 0 16 0 1 2 0 48 2 5 20 5 0 16 0 1 6 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 8 0 52 7 0 2 52 0 0 1 33 15 0 20 9 0 16 0 1 6 0 18 0 48 3 32 1 0 2 5 20 5 0 16 0 1 10 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 10 0 1 11 0 48 3 32 1 0 2 5 20 5 0 16 0 1 12 0 48 2 52 0 0 1 33 16 0 20 9 0 16 0 1 12 0 1 8 0 48 3 32 1 0 2 5 20 13 0 16 0 20 14 0 16 0 1 15 0 48 2 49 2 32 1 0 2 50)} "dom-query-all" "a[href]" {:upvalue-count 1 :arity 1 :constants ("not" "is-processed?" "boost" "should-boost-form?" "mark-processed!" "upper" "dom-get-attr" "method" "GET" "action" "browser-location-href" "dom-has-attr?" "sx-target" "=" "true" "dom-set-attr" "sx-swap" "innerHTML" "bind-boost-form") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 6 33 8 0 5 20 3 0 16 0 48 1 33 165 0 20 4 0 16 0 1 2 0 48 2 5 20 6 0 16 0 1 7 0 48 2 6 34 4 0 5 1 8 0 52 5 0 1 17 1 20 6 0 16 0 1 9 0 48 2 6 34 6 0 5 20 10 0 48 0 17 2 20 11 0 16 0 1 12 0 48 2 52 0 0 1 6 33 21 0 5 18 0 6 33 14 0 5 18 0 1 14 0 52 13 0 2 52 0 0 1 33 15 0 20 15 0 16 0 1 12 0 18 0 48 3 32 1 0 2 5 20 11 0 16 0 1 16 0 48 2 52 0 0 1 33 16 0 20 15 0 16 0 1 16 0 1 17 0 48 3 32 1 0 2 5 20 18 0 16 0 16 1 16 2 49 3 32 1 0 2 50)} "form") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 51 3 0 1 1 20 4 0 16 0 1 5 0 48 2 52 2 0 2 5 51 6 0 1 1 20 4 0 16 0 1 7 0 48 2 52 2 0 2 50)} "_page-data-cache" "_page-data-cache-ttl" 30000 "page-data-cache-key" {:upvalue-count 0 :arity 2 :constants ("nil?" "empty?" "keys" "list" "for-each" {:upvalue-count 2 :arity 1 :constants ("append!" "str" "=" "get") :bytecode (20 0 0 18 0 16 0 1 2 0 18 1 16 0 52 3 0 2 52 1 0 3 49 2 50)} "str" ":" "join" "&") :bytecode (16 0 17 2 16 1 52 0 0 1 6 34 11 0 5 16 1 52 2 0 1 52 1 0 1 33 5 0 16 2 32 42 0 52 3 0 0 17 3 51 5 0 1 3 1 1 16 1 52 2 0 1 52 4 0 2 5 16 2 1 7 0 1 9 0 16 3 52 8 0 2 52 6 0 3 50)} "page-data-cache-get" {:upvalue-count 0 :arity 1 :constants ("get" "_page-data-cache" "nil?" ">" "-" "now-ms" "ts" "_page-data-cache-ttl" "dict-set!" "data") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 52 2 0 1 33 4 0 2 32 52 0 20 5 0 48 0 16 1 1 6 0 52 0 0 2 52 4 0 2 20 7 0 52 3 0 2 33 15 0 20 1 0 16 0 2 52 8 0 3 5 2 32 9 0 16 1 1 9 0 52 0 0 2 50)} "page-data-cache-set" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "_page-data-cache" "data" "ts" "now-ms") :bytecode (20 1 0 16 0 1 2 0 16 1 1 3 0 20 4 0 48 0 65 2 0 52 0 0 3 50)} "invalidate-page-cache" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("=" "starts-with?" "str" ":" "dict-set!" "_page-data-cache") :bytecode (16 0 18 0 52 0 0 2 6 34 16 0 5 16 0 18 0 1 3 0 52 2 0 2 52 1 0 2 33 13 0 20 5 0 16 0 2 52 4 0 3 32 1 0 2 50)} "keys" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "log-info" "str" "sx:cache invalidate ") :bytecode (51 1 0 1 0 20 3 0 52 2 0 1 52 0 0 2 5 20 4 0 1 5 0 1 6 0 1 7 0 16 0 65 2 0 48 1 5 20 8 0 1 10 0 16 0 52 9 0 2 49 1 50)} "invalidate-all-page-cache" {:upvalue-count 0 :arity 0 :constants ("dict" "_page-data-cache" "sw-post-message" "type" "invalidate" "page" "*" "log-info" "sx:cache invalidate *") :bytecode (52 0 0 0 21 1 0 5 20 2 0 1 3 0 1 4 0 1 5 0 1 6 0 65 2 0 48 1 5 20 7 0 1 8 0 49 1 50)} "update-page-cache" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-key" "dict" "page-data-cache-set" "log-info" "str" "sx:cache update ") :bytecode (20 0 0 16 0 52 1 0 0 48 2 17 2 20 2 0 16 2 16 1 48 2 5 20 3 0 1 5 0 16 0 52 4 0 2 49 1 50)} "process-cache-directives" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "sx-cache-invalidate" "=" "*" "invalidate-all-page-cache" "invalidate-page-cache" "get" "cache-invalidate" "cache-update" "parse-sx-data" "update-page-cache") :bytecode (20 0 0 16 0 1 1 0 48 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 7 0 52 6 0 2 17 3 16 3 33 30 0 16 3 1 3 0 52 2 0 2 33 8 0 20 4 0 48 0 32 7 0 20 5 0 16 3 48 1 32 1 0 2 5 16 1 1 8 0 52 6 0 2 17 3 16 3 33 30 0 20 9 0 16 2 48 1 17 4 16 4 33 12 0 20 10 0 16 3 16 4 49 2 32 1 0 2 32 1 0 2 50)} "_optimistic-snapshots" "optimistic-cache-update" {:upvalue-count 0 :arity 2 :constants ("page-data-cache-get" "dict-set!" "_optimistic-snapshots" "page-data-cache-set") :bytecode (20 0 0 16 0 48 1 17 2 16 2 33 35 0 16 1 16 2 48 1 17 3 20 2 0 16 0 16 2 52 1 0 3 5 20 3 0 16 0 16 3 48 2 5 16 3 32 1 0 2 50)} "optimistic-cache-revert" {:upvalue-count 0 :arity 1 :constants ("get" "_optimistic-snapshots" "page-data-cache-set" "dict-delete!") :bytecode (20 1 0 16 0 52 0 0 2 17 1 16 1 33 25 0 20 2 0 16 0 16 1 48 2 5 20 1 0 16 0 52 3 0 2 5 16 1 32 1 0 2 50)} "optimistic-cache-confirm" {:upvalue-count 0 :arity 1 :constants ("dict-delete!" "_optimistic-snapshots") :bytecode (20 1 0 16 0 52 0 0 2 50)} "submit-mutation" {:upvalue-count 0 :arity 6 :constants ("page-data-cache-key" "optimistic-cache-update" "try-rerender-page" "execute-action" {:upvalue-count 4 :arity 1 :constants ("page-data-cache-set" "optimistic-cache-confirm" "try-rerender-page" "log-info" "str" "sx:optimistic confirmed " "confirmed") :bytecode (16 0 33 12 0 20 0 0 18 0 16 0 48 2 32 1 0 2 5 20 1 0 18 0 48 1 5 16 0 33 14 0 20 2 0 18 1 18 2 16 0 48 3 32 1 0 2 5 20 3 0 1 5 0 18 1 52 4 0 2 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)} {:upvalue-count 4 :arity 1 :constants ("optimistic-cache-revert" "try-rerender-page" "log-warn" "str" "sx:optimistic reverted " ": " "reverted") :bytecode (20 0 0 18 0 48 1 17 1 16 1 33 14 0 20 1 0 18 1 18 2 16 1 48 3 32 1 0 2 5 20 2 0 1 4 0 18 1 1 5 0 16 0 52 3 0 4 48 1 5 18 3 33 10 0 18 3 1 6 0 49 1 32 1 0 2 50)}) :bytecode (20 0 0 16 0 16 1 48 2 17 6 20 1 0 16 6 16 4 48 2 17 7 16 7 33 14 0 20 2 0 16 0 16 1 16 7 48 3 32 1 0 2 5 20 3 0 16 2 16 3 51 4 0 1 6 1 0 1 1 1 5 51 5 0 1 6 1 0 1 1 1 5 49 4 50)} "_is-online" "_offline-queue" "list" "offline-is-online?" {:upvalue-count 0 :arity 0 :constants ("_is-online") :bytecode (20 0 0 50)} "offline-set-online!" {:upvalue-count 0 :arity 1 :constants ("_is-online") :bytecode (16 0 21 0 0 50)} "offline-queue-mutation" {:upvalue-count 0 :arity 5 :constants ("page-data-cache-key" "dict" "action" "payload" "page" "params" "timestamp" "now-ms" "status" "pending" "append!" "_offline-queue" "optimistic-cache-update" "try-rerender-page" "log-info" "str" "sx:offline queued " " (" "len" " pending)") :bytecode (20 0 0 16 2 16 3 48 2 17 5 1 2 0 16 0 1 3 0 16 1 1 4 0 16 2 1 5 0 16 3 1 6 0 20 7 0 48 0 1 8 0 1 9 0 52 1 0 12 17 6 20 10 0 20 11 0 16 6 48 2 5 20 12 0 16 5 16 4 48 2 17 7 16 7 33 14 0 20 13 0 16 2 16 3 16 7 48 3 32 1 0 2 5 20 14 0 1 16 0 16 0 1 17 0 20 11 0 52 18 0 1 1 19 0 52 15 0 5 48 1 5 16 6 50)} "offline-sync" {:upvalue-count 0 :arity 0 :constants ("filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue" "not" "empty?" "log-info" "str" "sx:offline syncing " "len" " mutations" "for-each" {:upvalue-count 0 :arity 1 :constants ("execute-action" "get" "action" "payload" {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "synced" "log-info" "str" "sx:offline synced " "get" "action") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 52 4 0 2 49 1 50)} {:upvalue-count 1 :arity 1 :constants ("dict-set!" "status" "failed" "log-warn" "str" "sx:offline sync failed " "get" "action" ": ") :bytecode (18 0 1 1 0 1 2 0 52 0 0 3 5 20 3 0 1 5 0 18 0 1 7 0 52 6 0 2 1 8 0 16 0 52 4 0 4 49 1 50)}) :bytecode (20 0 0 16 0 1 2 0 52 1 0 2 16 0 1 3 0 52 1 0 2 51 4 0 1 0 51 5 0 1 0 49 4 50)}) :bytecode (51 1 0 20 2 0 52 0 0 2 17 0 16 0 52 4 0 1 52 3 0 1 33 34 0 20 5 0 1 7 0 16 0 52 8 0 1 1 9 0 52 6 0 3 48 1 5 51 11 0 16 0 52 10 0 2 32 1 0 2 50)} "offline-pending-count" {:upvalue-count 0 :arity 0 :constants ("len" "filter" {:upvalue-count 0 :arity 1 :constants ("=" "get" "status" "pending") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 50)} "_offline-queue") :bytecode (51 2 0 20 3 0 52 1 0 2 52 0 0 1 50)} "offline-aware-mutation" {:upvalue-count 0 :arity 6 :constants ("_is-online" "submit-mutation" "offline-queue-mutation" "queued") :bytecode (20 0 0 33 20 0 20 1 0 16 0 16 1 16 2 16 3 16 4 16 5 49 6 32 32 0 20 2 0 16 2 16 3 16 0 16 1 16 4 48 5 5 16 5 33 10 0 16 5 1 3 0 49 1 32 1 0 2 50)} "current-page-layout" {:upvalue-count 0 :arity 0 :constants ("url-pathname" "browser-location-href" "find-matching-route" "_page-routes" "nil?" "" "get" "layout") :bytecode (20 0 0 20 1 0 48 0 48 1 17 0 20 2 0 16 0 20 3 0 48 2 17 1 16 1 52 4 0 1 33 6 0 1 5 0 32 17 0 16 1 1 7 0 52 6 0 2 6 34 4 0 5 1 5 0 50)} "swap-rendered-content" {:upvalue-count 0 :arity 3 :constants ("dom-create-element" "div" "dom-append" "process-oob-swaps" {:upvalue-count 0 :arity 3 :constants ("dispose-islands-in" "swap-dom-nodes" "=" "innerHTML" "children-to-fragment" "post-swap") :bytecode (20 0 0 16 0 48 1 5 20 1 0 16 0 16 2 1 3 0 52 2 0 2 33 10 0 20 4 0 16 1 48 1 32 2 0 16 1 16 2 48 3 5 20 5 0 16 0 49 1 50)} "dom-get-attr" "id" "dom-query" "str" "#" "children-to-fragment" "dispose-islands-in" "dom-set-text-content" "" "hoist-head-elements-full" "process-elements" "sx-hydrate-elements" "sx-hydrate-islands" "run-post-render-hooks" "dom-dispatch" "sx:clientRoute" "dict" "pathname" "log-info" "sx:route client ") :bytecode (20 0 0 1 1 0 2 48 2 17 3 20 2 0 16 3 16 1 48 2 5 20 3 0 16 3 51 4 0 48 2 5 20 5 0 16 0 1 6 0 48 2 17 4 16 4 33 19 0 20 7 0 16 3 1 9 0 16 4 52 8 0 2 48 2 32 1 0 2 17 5 16 5 33 10 0 20 10 0 16 5 48 1 32 7 0 20 10 0 16 3 48 1 17 6 20 11 0 16 0 48 1 5 20 12 0 16 0 1 13 0 48 2 5 20 2 0 16 0 16 6 48 2 5 20 14 0 16 0 48 1 5 20 15 0 16 0 48 1 5 20 16 0 16 0 48 1 5 20 17 0 16 0 48 1 5 20 18 0 48 0 5 20 19 0 16 0 1 20 0 1 22 0 16 2 52 21 0 2 48 3 5 20 23 0 1 24 0 16 2 52 8 0 2 49 1 50)} "resolve-route-target" {:upvalue-count 0 :arity 1 :constants ("not" "=" "true" "dom-query") :bytecode (16 0 6 33 14 0 5 16 0 1 2 0 52 1 0 2 52 0 0 1 33 10 0 20 3 0 16 0 49 1 32 1 0 2 50)} "deps-satisfied?" {:upvalue-count 0 :arity 1 :constants ("get" "deps" "loaded-component-names" "nil?" "empty?" "every?" {:upvalue-count 1 :arity 1 :constants ("contains?") :bytecode (18 0 16 0 52 0 0 2 50)}) :bytecode (16 0 1 1 0 52 0 0 2 17 1 20 2 0 48 0 17 2 16 1 52 3 0 1 6 34 7 0 5 16 1 52 4 0 1 33 4 0 3 32 11 0 51 6 0 1 2 16 1 52 5 0 2 50)} "try-client-route" {:upvalue-count 0 :arity 2 :constants ("find-matching-route" "_page-routes" "nil?" "log-info" "str" "sx:route no match (" "len" " routes) " "get" "layout" "" "current-page-layout" "not" "=" "sx:route server (layout: " " -> " ") " "content" "closure" "params" "name" "empty?" "log-warn" "sx:route no content for " "resolve-route-target" "sx:route target not found: " "deps-satisfied?" "sx:route deps miss for " "io-deps" "render-plan" "server" "list" "client" "sx:route plan " " — " " server, " " client" "register-io-deps" "stream" "sx:route streaming " "fetch-streaming" "build-request-headers" "loaded-component-names" "_css-hash" "has-data" "page-data-cache-key" "page-data-cache-get" "merge" "sx:route client+cache+async " "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route cache+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "sx:route cached eval failed for " "sx:route client+cache " "swap-rendered-content" "sx:route client+data " "resolve-page-data" {:upvalue-count 7 :arity 1 :constants ("page-data-cache-set" "merge" "try-async-eval-content" {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route data+async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "try-eval-content" "nil?" "log-warn" "str" "sx:route data eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (20 0 0 18 0 16 0 48 2 5 18 1 18 2 16 0 52 1 0 3 17 1 18 3 33 19 0 20 2 0 18 4 16 1 51 3 0 0 5 0 6 49 3 32 79 0 20 4 0 18 4 16 1 48 2 17 2 16 2 52 5 0 1 33 48 0 20 6 0 1 8 0 18 5 1 9 0 52 7 0 3 48 1 5 20 10 0 18 6 18 5 20 11 0 18 6 20 12 0 48 0 20 13 0 48 3 1 14 0 49 4 32 11 0 20 15 0 18 6 16 2 18 5 49 3 50)} "sx:route client+async " {:upvalue-count 2 :arity 1 :constants ("nil?" "log-warn" "str" "sx:route async eval failed for " " — server fallback" "fetch-and-restore" "build-request-headers" "loaded-component-names" "_css-hash" 0 "swap-rendered-content") :bytecode (16 0 52 0 0 1 33 48 0 20 1 0 1 3 0 18 0 1 4 0 52 2 0 3 48 1 5 20 5 0 18 1 18 0 20 6 0 18 1 20 7 0 48 0 20 8 0 48 3 1 9 0 49 4 32 11 0 20 10 0 18 1 16 0 18 0 49 3 50)} "sx:route server (eval failed) ") :bytecode (20 0 0 16 0 20 1 0 48 2 17 2 16 2 52 2 0 1 33 29 0 20 3 0 1 5 0 20 1 0 52 6 0 1 1 7 0 16 0 52 4 0 4 48 1 5 4 32 233 2 16 2 1 9 0 52 8 0 2 6 34 4 0 5 1 10 0 17 3 20 11 0 48 0 17 4 16 3 16 4 52 13 0 2 52 12 0 1 33 29 0 20 3 0 1 14 0 16 4 1 15 0 16 3 1 16 0 16 0 52 4 0 6 48 1 5 4 32 163 2 16 2 1 17 0 52 8 0 2 17 5 16 2 1 18 0 52 8 0 2 6 34 4 0 5 65 0 0 17 6 16 2 1 19 0 52 8 0 2 17 7 16 2 1 20 0 52 8 0 2 17 8 16 5 52 2 0 1 6 34 7 0 5 16 5 52 21 0 1 33 19 0 20 22 0 1 23 0 16 0 52 4 0 2 48 1 5 4 32 72 2 20 24 0 16 1 48 1 17 9 16 9 52 2 0 1 33 19 0 20 22 0 1 25 0 16 1 52 4 0 2 48 1 5 4 32 35 2 20 26 0 16 2 48 1 52 12 0 1 33 19 0 20 3 0 1 27 0 16 8 52 4 0 2 48 1 5 4 32 2 2 16 2 1 28 0 52 8 0 2 17 10 16 10 6 33 11 0 5 16 10 52 21 0 1 52 12 0 1 17 11 16 2 1 29 0 52 8 0 2 17 12 16 12 33 78 0 16 12 1 30 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 13 16 12 1 32 0 52 8 0 2 6 34 5 0 5 52 31 0 0 17 14 20 3 0 1 33 0 16 8 1 34 0 16 13 52 6 0 1 1 35 0 16 14 52 6 0 1 1 36 0 52 4 0 7 48 1 32 1 0 2 5 16 11 33 10 0 20 37 0 16 10 48 1 32 1 0 2 5 16 2 1 38 0 52 8 0 2 33 44 0 20 3 0 1 39 0 16 0 52 4 0 2 48 1 5 20 40 0 16 9 16 0 20 41 0 16 9 20 42 0 48 0 20 43 0 48 3 48 3 5 3 32 59 1 16 2 1 44 0 52 8 0 2 33 194 0 20 45 0 16 8 16 7 48 2 17 13 20 46 0 16 13 48 1 17 14 16 14 33 123 0 16 6 16 7 16 14 52 47 0 3 17 15 16 11 33 36 0 20 3 0 1 48 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 15 51 50 0 1 0 1 9 48 3 5 3 32 67 0 20 51 0 16 5 16 15 48 2 17 16 16 16 52 2 0 1 33 19 0 20 22 0 1 52 0 16 0 52 4 0 2 48 1 5 4 32 28 0 20 3 0 1 53 0 16 0 52 4 0 2 48 1 5 20 54 0 16 9 16 16 16 0 48 3 5 3 32 43 0 20 3 0 1 55 0 16 0 52 4 0 2 48 1 5 20 56 0 16 8 16 7 51 57 0 1 13 1 6 1 7 1 11 1 5 1 0 1 9 48 3 5 3 32 109 0 16 11 33 42 0 20 3 0 1 58 0 16 0 52 4 0 2 48 1 5 20 49 0 16 5 16 6 16 7 52 47 0 2 51 59 0 1 0 1 9 48 3 5 3 32 62 0 16 6 16 7 52 47 0 2 17 13 20 51 0 16 5 16 13 48 2 17 14 16 14 52 2 0 1 33 19 0 20 3 0 1 60 0 16 0 52 4 0 2 48 1 5 4 32 13 0 20 54 0 16 9 16 14 16 0 48 3 5 3 50)} "bind-client-route-link" {:upvalue-count 0 :arity 2 :constants ("bind-client-route-click" {:upvalue-count 2 :arity 0 :constants ("bind-boost-link") :bytecode (20 0 0 18 0 18 1 49 2 50)}) :bytecode (20 0 0 16 0 16 1 51 1 0 1 0 1 1 49 3 50)} "process-sse" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "sse" "mark-processed!" "bind-sse") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "dom-query-all" "dom-body" "[sx-sse]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-sse" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-sse" "event-source-connect" "parse-sse-swap" "event-source-listen" {:upvalue-count 1 :arity 1 :constants ("bind-sse-swap") :bytecode (20 0 0 18 0 16 0 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 37 0 20 2 0 16 1 16 0 48 2 17 2 20 3 0 16 0 48 1 17 3 20 4 0 16 2 16 3 51 5 0 1 0 49 3 32 1 0 2 50)} "bind-sse-swap" {:upvalue-count 0 :arity 2 :constants ("resolve-target" "parse-swap-spec" "dom-get-attr" "sx-swap" "dom-has-class?" "dom-body" "sx-transitions" "get" "style" "transition" "trim" "not" "empty?" "dispose-islands-in" "starts-with?" "(" "sx-render" "dom-create-element" "div" "dom-append" "with-transition" {:upvalue-count 3 :arity 0 :constants ("swap-dom-nodes" "children-to-fragment" "post-swap") :bytecode (20 0 0 18 0 20 1 0 18 1 48 1 18 2 48 3 5 20 2 0 18 0 49 1 50)} {:upvalue-count 3 :arity 0 :constants ("swap-html-string" "post-swap") :bytecode (20 0 0 18 0 18 1 18 2 48 3 5 20 1 0 18 0 49 1 50)}) :bytecode (20 0 0 16 0 48 1 17 2 20 1 0 20 2 0 16 0 1 3 0 48 2 20 4 0 20 5 0 48 0 1 6 0 48 2 48 2 17 3 16 3 1 8 0 52 7 0 2 17 4 16 3 1 9 0 52 7 0 2 17 5 16 1 52 10 0 1 17 6 16 6 52 12 0 1 52 11 0 1 33 88 0 20 13 0 16 2 48 1 5 16 6 1 15 0 52 14 0 2 33 49 0 20 16 0 16 6 48 1 17 7 20 17 0 1 18 0 2 48 2 17 8 20 19 0 16 8 16 7 48 2 5 20 20 0 16 5 51 21 0 1 2 1 8 1 4 49 2 32 16 0 20 20 0 16 5 51 22 0 1 2 1 6 1 4 49 2 32 1 0 2 50)} "bind-inline-handlers" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("for-each" {:upvalue-count 1 :arity 1 :constants ("first" "nth" 1 "starts-with?" "sx-on:" "slice" 6 "after" "before" "str" "sx:" "not" "is-processed?" "on:" "mark-processed!" "dom-on" "contains?" "." {:upvalue-count 2 :arity 1 :constants ("host-call" "dom-window" "Function" "event" "call") :bytecode (20 0 0 20 0 0 20 1 0 48 0 1 2 0 1 3 0 18 0 48 4 1 4 0 18 1 16 0 49 4 50)} "parse" {:upvalue-count 2 :arity 1 :constants ("make-env" "env-bind!" "event" "this" "detail" "event-detail" "for-each" {:upvalue-count 1 :arity 1 :constants ("eval-expr") :bytecode (20 0 0 16 0 18 0 49 2 50)}) :bytecode (20 0 0 48 0 17 1 20 1 0 16 1 1 2 0 16 0 48 3 5 20 1 0 16 1 1 3 0 18 0 48 3 5 20 1 0 16 1 1 4 0 20 5 0 16 0 48 1 48 3 5 51 7 0 1 1 18 1 52 6 0 2 50)}) :bytecode (16 0 52 0 0 1 17 1 16 0 1 2 0 52 1 0 2 17 2 16 1 1 4 0 52 3 0 2 33 147 0 16 1 1 6 0 52 5 0 2 17 4 16 4 1 7 0 52 3 0 2 6 34 10 0 5 16 4 1 8 0 52 3 0 2 33 12 0 1 10 0 16 4 52 9 0 2 32 2 0 16 4 17 3 20 12 0 18 0 1 13 0 16 3 52 9 0 2 48 2 52 11 0 1 33 67 0 20 14 0 18 0 1 13 0 16 3 52 9 0 2 48 2 5 20 15 0 18 0 16 3 16 2 1 17 0 52 16 0 2 33 10 0 51 18 0 1 2 0 0 32 16 0 20 19 0 16 2 48 1 17 4 51 20 0 0 0 1 4 49 3 32 1 0 2 32 1 0 2 50)} "dom-attr-list") :bytecode (51 1 0 1 0 20 2 0 16 0 48 1 52 0 0 2 50)} "dom-query-all" "dom-body" "[sx-on\\:]") :bytecode (51 1 0 20 2 0 16 0 6 34 6 0 5 20 3 0 48 0 1 4 0 48 2 52 0 0 2 50)} "bind-preload-for" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-preload" "=" "mousedown" "list" "touchstart" "mouseover" 0 100 "bind-preload" {:upvalue-count 1 :arity 0 :constants ("get-verb-info" "do-preload" "get" "url" "build-request-headers" "loaded-component-names" "_css-hash") :bytecode (20 0 0 18 0 48 1 17 0 16 0 33 32 0 20 1 0 16 0 1 3 0 52 2 0 2 20 4 0 18 0 20 5 0 48 0 20 6 0 48 3 49 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 76 0 16 1 1 3 0 52 2 0 2 33 13 0 1 3 0 1 5 0 52 4 0 2 32 7 0 1 6 0 52 4 0 1 17 2 16 1 1 3 0 52 2 0 2 33 6 0 1 7 0 32 3 0 1 8 0 17 3 20 9 0 16 0 16 2 16 3 51 10 0 1 0 49 4 32 1 0 2 50)} "do-preload" {:upvalue-count 0 :arity 2 :constants ("nil?" "preload-cache-get" "_preload-cache" "fetch-preload") :bytecode (20 1 0 20 2 0 16 0 48 2 52 0 0 1 33 15 0 20 3 0 16 0 16 1 20 2 0 49 3 32 1 0 2 50)} "VERB_SELECTOR" "str" "[sx-get],[sx-post],[sx-put],[sx-delete],[sx-patch]" "process-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "VERB_SELECTOR" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "verb" "mark-processed!" "process-one") :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 21 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 49 1 32 1 0 2 50)} "process-boosted" "process-sse" "bind-inline-handlers" "process-emit-elements") :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 20 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 5 20 5 0 16 0 48 1 5 20 6 0 16 0 48 1 5 20 7 0 16 0 48 1 5 20 8 0 16 0 49 1 50)} "process-one" {:upvalue-count 0 :arity 1 :constants ("get-verb-info" "not" "dom-has-attr?" "sx-disable" "bind-triggers" "bind-preload-for") :bytecode (20 0 0 16 0 48 1 17 1 16 1 33 49 0 20 2 0 16 0 1 3 0 48 2 52 1 0 1 33 28 0 20 4 0 16 0 16 1 48 2 5 20 5 0 16 0 48 1 5 20 5 0 16 0 49 1 32 1 0 2 32 1 0 2 50)} "process-emit-elements" {:upvalue-count 0 :arity 1 :constants ("dom-query-all" "dom-body" "[data-sx-emit]" "for-each" {:upvalue-count 0 :arity 1 :constants ("not" "is-processed?" "emit" "mark-processed!" "dom-get-attr" "data-sx-emit" "dom-on" "click" {:upvalue-count 2 :arity 1 :constants ("dom-get-attr" "data-sx-emit-detail" "json-parse" "dict" "dom-dispatch") :bytecode (20 0 0 18 0 1 1 0 48 2 17 1 16 1 33 10 0 20 2 0 16 1 48 1 32 4 0 52 3 0 0 17 2 20 4 0 18 0 18 1 16 2 49 3 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 52 0 0 1 33 52 0 20 3 0 16 0 1 2 0 48 2 5 20 4 0 16 0 1 5 0 48 2 17 1 16 1 33 20 0 20 6 0 16 0 1 7 0 51 8 0 1 0 1 1 49 3 32 1 0 2 32 1 0 2 50)}) :bytecode (20 0 0 16 0 6 34 6 0 5 20 1 0 48 0 1 2 0 48 2 17 1 51 4 0 16 1 52 3 0 2 50)} "handle-popstate" {:upvalue-count 0 :arity 1 :constants ("browser-location-href" "dom-query" "[sx-boost]" "dom-get-attr" "sx-boost" "not" "=" "true" "#main-panel" "url-pathname" "try-client-route" "browser-scroll-to" 0 "build-request-headers" "loaded-component-names" "_css-hash" "fetch-and-restore") :bytecode (20 0 0 48 0 17 1 20 1 0 1 2 0 48 1 17 2 16 2 33 44 0 20 3 0 16 2 1 4 0 48 2 17 4 16 4 6 33 14 0 5 16 4 1 7 0 52 6 0 2 52 5 0 1 33 5 0 16 4 32 1 0 2 32 1 0 2 17 3 16 3 6 34 4 0 5 1 8 0 17 3 20 1 0 16 3 48 1 17 4 20 9 0 16 1 48 1 17 5 16 4 33 58 0 20 10 0 16 5 16 3 48 2 33 13 0 20 11 0 1 12 0 16 0 49 2 32 30 0 20 13 0 16 4 20 14 0 48 0 20 15 0 48 3 17 6 20 16 0 16 4 16 1 16 6 16 0 49 4 32 1 0 2 50)} "engine-init" {:upvalue-count 0 :arity 0 :constants ("init-css-tracking" "sx-process-scripts" "sx-hydrate" "process-elements") :bytecode (20 0 0 48 0 5 20 1 0 2 48 1 5 20 2 0 2 48 1 5 20 3 0 2 49 1 50)}) :bytecode (52 1 0 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 51 19 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 52 1 0 0 128 38 0 5 1 40 0 128 39 0 5 51 42 0 128 41 0 5 51 44 0 128 43 0 5 51 46 0 128 45 0 5 51 48 0 128 47 0 5 51 50 0 128 49 0 5 51 52 0 128 51 0 5 51 54 0 128 53 0 5 52 1 0 0 128 55 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 5 51 61 0 128 60 0 5 51 63 0 128 62 0 5 3 128 64 0 5 52 66 0 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 51 84 0 128 83 0 5 51 86 0 128 85 0 5 51 88 0 128 87 0 5 51 90 0 128 89 0 5 51 92 0 128 91 0 5 51 94 0 128 93 0 5 51 96 0 128 95 0 5 51 98 0 128 97 0 5 51 100 0 128 99 0 5 51 102 0 128 101 0 5 1 105 0 52 104 0 1 128 103 0 5 51 107 0 128 106 0 5 51 109 0 128 108 0 5 51 111 0 128 110 0 5 51 113 0 128 112 0 5 51 115 0 128 114 0 50))) diff --git a/shared/static/wasm/sx/orchestration.sxbc.json b/shared/static/wasm/sx/orchestration.sxbc.json new file mode 100644 index 00000000..47693e8b --- /dev/null +++ b/shared/static/wasm/sx/orchestration.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"1aeebda1b7cf36fc","module":{"arity":0,"bytecode":[52,1,0,0,128,0,0,5,1,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,52,1,0,0,128,38,0,5,1,40,0,128,39,0,5,51,42,0,128,41,0,5,51,44,0,128,43,0,5,51,46,0,128,45,0,5,51,48,0,128,47,0,5,51,50,0,128,49,0,5,51,52,0,128,51,0,5,51,54,0,128,53,0,5,52,1,0,0,128,55,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,3,128,64,0,5,52,66,0,0,128,65,0,5,51,68,0,128,67,0,5,51,70,0,128,69,0,5,51,72,0,128,71,0,5,51,74,0,128,73,0,5,51,76,0,128,75,0,5,51,78,0,128,77,0,5,51,80,0,128,79,0,5,51,82,0,128,81,0,5,51,84,0,128,83,0,5,51,86,0,128,85,0,5,51,88,0,128,87,0,5,51,90,0,128,89,0,5,51,92,0,128,91,0,5,51,94,0,128,93,0,5,51,96,0,128,95,0,5,51,98,0,128,97,0,5,51,100,0,128,99,0,5,51,102,0,128,101,0,5,1,105,0,52,104,0,1,128,103,0,5,51,107,0,128,106,0,5,51,109,0,128,108,0,5,51,111,0,128,110,0,5,51,113,0,128,112,0,5,51,115,0,128,114,0,50],"constants":[{"t":"s","v":"_preload-cache"},{"t":"s","v":"dict"},{"t":"s","v":"_css-hash"},{"t":"s","v":""},{"t":"s","v":"dispatch-trigger-events"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,53,0,20,1,0,20,0,0,48,1,17,2,20,2,0,33,17,0,51,4,0,20,2,0,52,5,0,1,52,3,0,2,32,17,0,51,6,0,20,0,0,1,8,0,52,7,0,2,52,3,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"header-val"},{"t":"s","v":"try-parse-json"},{"t":"s","v":"parsed"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,49,3,50],"constants":[{"t":"s","v":"dom-dispatch"},{"t":"s","v":"el"},{"t":"s","v":"key"},{"t":"s","v":"get"},{"t":"s","v":"parsed"}]}},{"t":"s","v":"keys"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,4,0,52,3,0,1,52,2,0,1,33,18,0,20,5,0,20,6,0,20,4,0,52,7,0,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"trim"},{"t":"s","v":"name"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"trimmed"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"el"},{"t":"s","v":"dict"}]}},{"t":"s","v":"split"},{"t":"s","v":","}]}},{"t":"s","v":"init-css-tracking"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,1,0,48,1,17,0,20,2,0,33,32,0,20,3,0,20,2,0,1,4,0,48,2,17,1,20,4,0,33,9,0,20,4,0,21,5,0,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-query"},{"t":"s","v":"meta[name=\"sx-css-classes\"]"},{"t":"s","v":"meta"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"content"},{"t":"s","v":"_css-hash"}]}},{"t":"s","v":"execute-request"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,6,34,4,0,5,20,2,0,17,3,20,4,0,52,3,0,1,33,9,0,20,5,0,2,49,1,32,17,1,20,4,0,1,7,0,52,6,0,2,17,4,20,4,0,1,8,0,52,6,0,2,17,5,20,9,0,20,1,0,1,10,0,48,2,17,6,20,11,0,6,33,13,0,5,20,13,0,20,11,0,48,1,52,12,0,1,33,9,0,20,5,0,2,49,1,32,204,0,20,9,0,20,1,0,1,14,0,48,2,17,6,20,15,0,6,33,13,0,5,20,16,0,20,15,0,48,1,52,12,0,1,33,9,0,20,5,0,2,49,1,32,159,0,20,9,0,20,1,0,1,17,0,48,2,17,6,20,18,0,33,11,0,20,19,0,20,18,0,48,1,32,1,0,2,17,7,20,18,0,6,33,8,0,5,20,20,0,52,3,0,1,33,9,0,20,5,0,2,49,1,32,99,0,20,21,0,52,3,0,1,6,34,25,0,5,20,8,0,52,3,0,1,6,34,13,0,5,20,22,0,20,1,0,48,1,52,12,0,1,33,9,0,20,5,0,2,49,1,32,51,0,20,23,0,20,1,0,20,21,0,20,21,0,20,8,0,20,20,0,33,25,0,20,25,0,6,34,5,0,5,52,26,0,0,1,27,0,20,20,0,52,24,0,3,32,3,0,20,25,0,49,5,50],"constants":[{"t":"s","v":"get-verb-info"},{"t":"s","v":"el"},{"t":"s","v":"verbInfo"},{"t":"s","v":"nil?"},{"t":"s","v":"info"},{"t":"s","v":"promise-resolve"},{"t":"s","v":"get"},{"t":"s","v":"method"},{"t":"s","v":"url"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-media"},{"t":"s","v":"media"},{"t":"s","v":"not"},{"t":"s","v":"browser-media-matches?"},{"t":"s","v":"sx-confirm"},{"t":"s","v":"confirm-msg"},{"t":"s","v":"browser-confirm"},{"t":"s","v":"sx-prompt"},{"t":"s","v":"prompt-msg"},{"t":"s","v":"browser-prompt"},{"t":"s","v":"prompt-val"},{"t":"s","v":"verb"},{"t":"s","v":"validate-for-request"},{"t":"s","v":"do-fetch"},{"t":"s","v":"assoc"},{"t":"s","v":"extraParams"},{"t":"s","v":"dict"},{"t":"s","v":"SX-Prompt"}]}},{"t":"s","v":"do-fetch"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,5,20,4,0,1,5,0,52,3,0,2,33,11,0,20,6,0,20,1,0,48,1,32,1,0,2,5,20,7,0,20,1,0,48,1,17,6,20,8,0,6,33,15,0,5,20,1,0,20,8,0,52,10,0,2,52,9,0,1,33,11,0,20,11,0,20,8,0,48,1,32,1,0,2,5,20,12,0,48,0,17,6,20,13,0,20,1,0,20,14,0,48,2,5,20,7,0,20,1,0,48,1,17,7,20,8,0,33,14,0,20,15,0,20,8,0,20,14,0,48,2,32,1,0,2,5,20,16,0,20,1,0,20,17,0,20,18,0,48,3,17,7,20,20,0,1,18,0,52,19,0,2,17,8,20,20,0,1,21,0,52,19,0,2,17,9,20,20,0,1,22,0,52,19,0,2,17,10,20,23,0,20,1,0,20,24,0,48,0,20,25,0,48,3,17,11,20,26,0,48,0,17,12,20,27,0,33,17,0,51,29,0,20,27,0,52,30,0,1,52,28,0,2,32,1,0,2,5,20,31,0,33,16,0,20,33,0,1,34,0,20,31,0,52,32,0,3,32,1,0,2,5,20,35,0,33,16,0,20,33,0,1,36,0,20,35,0,52,32,0,3,32,1,0,2,5,20,37,0,20,38,0,20,39,0,48,2,17,13,20,40,0,20,1,0,48,1,17,14,20,41,0,20,1,0,48,1,17,15,20,42,0,20,1,0,48,1,17,16,20,43,0,20,1,0,1,44,0,48,2,5,20,45,0,20,1,0,1,46,0,1,47,0,48,3,5,20,48,0,20,1,0,1,49,0,1,18,0,20,39,0,1,17,0,20,17,0,52,50,0,4,48,3,5,20,51,0,1,18,0,20,39,0,1,17,0,20,17,0,1,33,0,20,33,0,1,21,0,20,21,0,1,52,0,20,53,0,20,14,0,48,1,1,54,0,20,55,0,20,39,0,48,1,1,56,0,20,57,0,52,50,0,14,51,58,0,51,59,0,49,3,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-sync"},{"t":"s","v":"="},{"t":"s","v":"sync"},{"t":"s","v":"replace"},{"t":"s","v":"abort-previous"},{"t":"s","v":"resolve-target"},{"t":"s","v":"target-el"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"abort-previous-target"},{"t":"s","v":"new-abort-controller"},{"t":"s","v":"track-controller"},{"t":"s","v":"ctrl"},{"t":"s","v":"track-controller-target"},{"t":"s","v":"build-request-body"},{"t":"s","v":"method"},{"t":"s","v":"url"},{"t":"s","v":"get"},{"t":"s","v":"body-info"},{"t":"s","v":"body"},{"t":"s","v":"content-type"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"s","v":"csrf-token"},{"t":"s","v":"extraParams"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,4,0,20,2,0,52,3,0,2,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"headers"},{"t":"s","v":"k"},{"t":"s","v":"get"},{"t":"s","v":"extraParams"}]}},{"t":"s","v":"keys"},{"t":"s","v":"ct"},{"t":"s","v":"dict-set!"},{"t":"s","v":"headers"},{"t":"s","v":"Content-Type"},{"t":"s","v":"csrf"},{"t":"s","v":"X-CSRFToken"},{"t":"s","v":"preload-cache-get"},{"t":"s","v":"_preload-cache"},{"t":"s","v":"final-url"},{"t":"s","v":"apply-optimistic"},{"t":"s","v":"show-indicator"},{"t":"s","v":"disable-elements"},{"t":"s","v":"dom-add-class"},{"t":"s","v":"sx-request"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"aria-busy"},{"t":"s","v":"true"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:beforeRequest"},{"t":"s","v":"dict"},{"t":"s","v":"fetch-request"},{"t":"s","v":"signal"},{"t":"s","v":"controller-signal"},{"t":"s","v":"cross-origin"},{"t":"s","v":"cross-origin?"},{"t":"s","v":"preloaded"},{"t":"s","v":"cached"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,5,20,4,0,20,5,0,48,1,5,20,7,0,52,6,0,1,33,102,0,20,8,0,20,1,0,1,9,0,1,11,0,20,11,0,1,12,0,20,12,0,52,10,0,4,48,3,5,20,12,0,6,33,15,0,5,20,12,0,52,14,0,1,1,15,0,52,13,0,2,33,26,0,20,16,0,20,1,0,20,17,0,20,18,0,20,19,0,20,20,0,20,12,0,49,6,32,20,0,20,21,0,20,1,0,20,18,0,20,22,0,20,17,0,20,19,0,49,5,32,45,0,20,8,0,20,1,0,1,23,0,1,11,0,20,11,0,52,10,0,2,48,3,5,20,16,0,20,1,0,20,17,0,20,18,0,20,19,0,20,20,0,20,12,0,49,6,50],"constants":[{"t":"s","v":"clear-loading-state"},{"t":"s","v":"el"},{"t":"s","v":"indicator"},{"t":"s","v":"disabled-elts"},{"t":"s","v":"revert-optimistic"},{"t":"s","v":"optimistic-state"},{"t":"s","v":"not"},{"t":"s","v":"resp-ok"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:responseError"},{"t":"s","v":"dict"},{"t":"s","v":"status"},{"t":"s","v":"text"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":0},{"t":"s","v":"handle-fetch-success"},{"t":"s","v":"final-url"},{"t":"s","v":"verb"},{"t":"s","v":"extraParams"},{"t":"s","v":"get-header"},{"t":"s","v":"handle-retry"},{"t":"s","v":"method"},{"t":"s","v":"sx:afterRequest"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,5,20,4,0,20,5,0,48,1,5,20,7,0,20,8,0,48,1,52,6,0,1,33,52,0,20,9,0,1,11,0,20,12,0,1,13,0,20,14,0,1,15,0,20,8,0,52,10,0,6,48,1,5,20,16,0,20,1,0,1,17,0,1,19,0,20,8,0,52,18,0,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"clear-loading-state"},{"t":"s","v":"el"},{"t":"s","v":"indicator"},{"t":"s","v":"disabled-elts"},{"t":"s","v":"revert-optimistic"},{"t":"s","v":"optimistic-state"},{"t":"s","v":"not"},{"t":"s","v":"abort-error?"},{"t":"s","v":"err"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:fetch error "},{"t":"s","v":"method"},{"t":"s","v":" "},{"t":"s","v":"final-url"},{"t":"s","v":" — "},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:requestError"},{"t":"s","v":"dict"},{"t":"s","v":"error"}]}}]}},{"t":"s","v":"handle-fetch-success"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,6,20,3,0,1,4,0,52,2,0,2,17,7,20,5,0,33,9,0,20,5,0,21,6,0,32,1,0,2,5,20,7,0,20,8,0,20,3,0,1,9,0,52,2,0,2,48,2,5,20,10,0,20,8,0,20,3,0,20,11,0,48,3,5,20,3,0,1,12,0,52,2,0,2,33,18,0,20,13,0,20,3,0,1,12,0,52,2,0,2,49,1,32,57,1,20,3,0,1,14,0,52,2,0,2,33,8,0,20,15,0,49,0,32,36,1,20,3,0,1,16,0,52,2,0,2,33,18,0,20,17,0,20,3,0,1,16,0,52,2,0,2,49,1,32,5,1,20,3,0,1,18,0,52,2,0,2,33,18,0,20,19,0,20,3,0,1,18,0,52,2,0,2,48,1,32,8,0,20,20,0,20,8,0,48,1,17,7,20,21,0,20,3,0,1,22,0,52,2,0,2,6,34,12,0,5,20,23,0,20,8,0,1,24,0,48,2,20,25,0,20,26,0,48,0,1,27,0,48,2,48,2,17,8,20,28,0,1,29,0,52,2,0,2,17,9,20,28,0,1,30,0,52,2,0,2,17,10,20,3,0,1,31,0,52,2,0,2,6,34,4,0,5,1,32,0,17,11,20,34,0,1,35,0,52,33,0,2,33,23,0,20,36,0,20,8,0,20,37,0,20,11,0,20,38,0,20,39,0,48,5,32,20,0,20,40,0,20,8,0,20,37,0,20,11,0,20,38,0,20,39,0,48,5,5,20,7,0,20,8,0,20,3,0,1,41,0,52,2,0,2,48,2,5,20,42,0,20,8,0,20,43,0,20,3,0,48,3,5,20,44,0,51,45,0,1,46,0,48,2,5,20,47,0,20,8,0,1,48,0,1,50,0,20,37,0,1,51,0,20,38,0,52,49,0,4,49,3,50],"constants":[{"t":"s","v":"process-response-headers"},{"t":"s","v":"get-header"},{"t":"s","v":"get"},{"t":"s","v":"resp-headers"},{"t":"s","v":"css-hash"},{"t":"s","v":"new-hash"},{"t":"s","v":"_css-hash"},{"t":"s","v":"dispatch-trigger-events"},{"t":"s","v":"el"},{"t":"s","v":"trigger"},{"t":"s","v":"process-cache-directives"},{"t":"s","v":"text"},{"t":"s","v":"redirect"},{"t":"s","v":"browser-navigate"},{"t":"s","v":"refresh"},{"t":"s","v":"browser-reload"},{"t":"s","v":"location"},{"t":"s","v":"fetch-location"},{"t":"s","v":"retarget"},{"t":"s","v":"dom-query"},{"t":"s","v":"resolve-target"},{"t":"s","v":"parse-swap-spec"},{"t":"s","v":"reswap"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-swap"},{"t":"s","v":"dom-has-class?"},{"t":"s","v":"dom-body"},{"t":"s","v":"sx-transitions"},{"t":"s","v":"swap-spec"},{"t":"s","v":"style"},{"t":"s","v":"transition"},{"t":"s","v":"content-type"},{"t":"s","v":""},{"t":"s","v":"contains?"},{"t":"s","v":"ct"},{"t":"s","v":"text/sx"},{"t":"s","v":"handle-sx-response"},{"t":"s","v":"target-el"},{"t":"s","v":"swap-style"},{"t":"s","v":"use-transition"},{"t":"s","v":"handle-html-response"},{"t":"s","v":"trigger-swap"},{"t":"s","v":"handle-history"},{"t":"s","v":"url"},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,21,0,20,3,0,20,4,0,20,1,0,1,2,0,52,0,0,2,48,2,32,1,0,2,5,20,5,0,20,4,0,49,1,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"resp-headers"},{"t":"s","v":"trigger-settle"},{"t":"s","v":"dispatch-trigger-events"},{"t":"s","v":"el"},{"t":"s","v":"process-settle-hooks"}]}},{"t":"n","v":20},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:afterSwap"},{"t":"s","v":"dict"},{"t":"s","v":"target"},{"t":"s","v":"swap"}]}},{"t":"s","v":"handle-sx-response"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,5,20,2,0,20,3,0,48,1,17,6,20,5,0,52,4,0,1,17,7,20,8,0,52,7,0,1,52,6,0,1,33,111,0,20,9,0,20,8,0,48,1,17,8,20,10,0,1,11,0,2,48,2,17,9,20,12,0,20,13,0,20,14,0,48,2,5,20,15,0,20,13,0,51,16,0,48,2,5,20,17,0,20,18,0,1,19,0,48,2,17,10,20,20,0,33,14,0,20,21,0,20,13,0,20,20,0,48,2,32,8,0,20,22,0,20,13,0,48,1,17,11,20,23,0,20,24,0,48,1,5,20,25,0,20,26,0,51,27,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"strip-component-scripts"},{"t":"s","v":"text"},{"t":"s","v":"extract-response-css"},{"t":"s","v":"cleaned"},{"t":"s","v":"trim"},{"t":"s","v":"final"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"trimmed"},{"t":"s","v":"sx-render"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"},{"t":"s","v":"rendered"},{"t":"s","v":"process-oob-swaps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,2,0,20,1,0,20,3,0,20,4,0,48,3,5,20,5,0,20,1,0,48,1,5,20,6,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"t"},{"t":"s","v":"swap-dom-nodes"},{"t":"s","v":"oob"},{"t":"s","v":"s"},{"t":"s","v":"sx-hydrate"},{"t":"s","v":"process-elements"}]}},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-select"},{"t":"s","v":"select-sel"},{"t":"s","v":"select-from-container"},{"t":"s","v":"children-to-fragment"},{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"target"},{"t":"s","v":"with-transition"},{"t":"s","v":"use-transition"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,0,20,4,0,20,3,0,1,6,0,52,5,0,2,33,19,0,20,7,0,20,8,0,6,34,4,0,5,20,1,0,48,1,32,11,0,20,8,0,6,34,4,0,5,20,1,0,49,1,50],"constants":[{"t":"s","v":"swap-dom-nodes"},{"t":"s","v":"target"},{"t":"s","v":"content"},{"t":"s","v":"swap-style"},{"t":"s","v":"post-swap"},{"t":"s","v":"="},{"t":"s","v":"outerHTML"},{"t":"s","v":"dom-parent"},{"t":"s","v":"swap-result"}]}}]}},{"t":"s","v":"handle-html-response"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,5,20,2,0,33,118,0,20,3,0,20,4,0,1,5,0,48,2,17,6,20,6,0,20,7,0,48,1,5,20,8,0,33,27,0,20,9,0,20,2,0,20,8,0,48,2,17,7,20,10,0,20,11,0,51,12,0,49,2,32,60,0,20,13,0,1,14,0,2,48,2,17,7,20,15,0,20,16,0,20,17,0,20,2,0,48,1,48,2,5,20,18,0,20,16,0,51,19,0,48,2,5,20,20,0,20,16,0,48,1,5,20,10,0,20,11,0,51,21,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-parse-html-document"},{"t":"s","v":"text"},{"t":"s","v":"doc"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-select"},{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"target"},{"t":"s","v":"select-sel"},{"t":"s","v":"select-html-from-doc"},{"t":"s","v":"with-transition"},{"t":"s","v":"use-transition"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,17,0,20,4,0,1,6,0,20,7,0,33,11,0,20,8,0,20,7,0,48,1,32,3,0,1,9,0,1,10,0,20,8,0,20,1,0,48,1,52,5,0,4,48,1,5,20,11,0,20,7,0,6,34,4,0,5,20,1,0,49,1,50],"constants":[{"t":"s","v":"swap-html-string"},{"t":"s","v":"target"},{"t":"s","v":"html"},{"t":"s","v":"swap-style"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"swap-root: "},{"t":"s","v":"swap-root"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":"nil"},{"t":"s","v":" target: "},{"t":"s","v":"post-swap"}]}},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-set-inner-html"},{"t":"s","v":"container"},{"t":"s","v":"dom-body-inner-html"},{"t":"s","v":"process-oob-swaps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,2,0,20,1,0,20,3,0,20,4,0,48,3,5,20,5,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"t"},{"t":"s","v":"swap-dom-nodes"},{"t":"s","v":"oob"},{"t":"s","v":"s"},{"t":"s","v":"post-swap"}]}},{"t":"s","v":"hoist-head-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,1,20,4,0,48,3,5,20,5,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"swap-dom-nodes"},{"t":"s","v":"target"},{"t":"s","v":"children-to-fragment"},{"t":"s","v":"container"},{"t":"s","v":"swap-style"},{"t":"s","v":"post-swap"}]}}]}},{"t":"s","v":"handle-retry"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,5,20,3,0,20,4,0,48,1,17,6,20,5,0,33,95,0,20,0,0,20,1,0,1,6,0,48,2,6,34,11,0,5,20,5,0,1,8,0,52,7,0,2,17,7,20,10,0,20,5,0,1,8,0,52,7,0,2,52,9,0,2,17,8,20,11,0,20,1,0,1,6,0,20,13,0,20,14,0,20,5,0,1,15,0,52,7,0,2,48,2,52,12,0,1,48,3,5,20,16,0,51,17,0,20,14,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-retry"},{"t":"s","v":"parse-retry-spec"},{"t":"s","v":"retry-attr"},{"t":"s","v":"spec"},{"t":"s","v":"data-sx-retry-ms"},{"t":"s","v":"get"},{"t":"s","v":"start-ms"},{"t":"s","v":"parse-int"},{"t":"s","v":"current-ms"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"str"},{"t":"s","v":"next-retry-ms"},{"t":"s","v":"ms"},{"t":"s","v":"cap-ms"},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,49,5,50],"constants":[{"t":"s","v":"do-fetch"},{"t":"s","v":"el"},{"t":"s","v":"verb"},{"t":"s","v":"method"},{"t":"s","v":"url"},{"t":"s","v":"extraParams"}]}}]}},{"t":"s","v":"bind-triggers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,1,3,0,48,2,48,1,6,34,14,0,5,20,4,0,20,5,0,20,2,0,48,1,48,1,17,2,51,7,0,20,8,0,52,6,0,2,50],"constants":[{"t":"s","v":"parse-trigger-spec"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-trigger"},{"t":"s","v":"default-trigger"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,1,0,1,3,0,52,2,0,2,17,2,20,5,0,1,6,0,52,4,0,2,33,21,0,20,7,0,51,8,0,20,9,0,1,10,0,52,2,0,2,49,2,32,159,0,20,5,0,1,11,0,52,4,0,2,33,25,0,20,12,0,20,13,0,51,8,0,4,20,9,0,1,14,0,52,2,0,2,49,4,32,121,0,20,5,0,1,15,0,52,4,0,2,33,29,0,20,16,0,51,8,0,20,9,0,1,14,0,52,2,0,2,6,34,4,0,5,1,17,0,49,2,32,79,0,20,5,0,1,18,0,52,4,0,2,33,25,0,20,12,0,20,13,0,51,8,0,3,20,9,0,1,14,0,52,2,0,2,49,4,32,41,0,20,5,0,1,19,0,52,4,0,2,33,27,0,20,20,0,20,13,0,20,1,0,1,19,0,52,2,0,2,20,9,0,20,21,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"classify-trigger"},{"t":"s","v":"trigger"},{"t":"s","v":"get"},{"t":"s","v":"modifiers"},{"t":"s","v":"="},{"t":"s","v":"kind"},{"t":"s","v":"poll"},{"t":"s","v":"set-interval"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,2,49,3,50],"constants":[{"t":"s","v":"execute-request"},{"t":"s","v":"el"}]}},{"t":"s","v":"mods"},{"t":"s","v":"interval"},{"t":"s","v":"intersect"},{"t":"s","v":"observe-intersection"},{"t":"s","v":"el"},{"t":"s","v":"delay"},{"t":"s","v":"load"},{"t":"s","v":"set-timeout"},{"t":"n","v":0},{"t":"s","v":"revealed"},{"t":"s","v":"event"},{"t":"s","v":"bind-event"},{"t":"s","v":"verbInfo"}]}},{"t":"s","v":"triggers"}]}},{"t":"s","v":"bind-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[2,17,4,2,17,5,20,1,0,1,2,0,52,0,0,2,33,18,0,20,3,0,20,1,0,1,2,0,52,0,0,2,48,1,32,3,0,20,4,0,17,6,20,5,0,33,42,0,20,6,0,20,5,0,20,7,0,51,8,0,20,1,0,1,9,0,52,0,0,2,33,11,0,1,9,0,3,52,10,0,2,32,1,0,2,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"mods"},{"t":"s","v":"from"},{"t":"s","v":"dom-query"},{"t":"s","v":"el"},{"t":"s","v":"listen-target"},{"t":"s","v":"dom-add-listener"},{"t":"s","v":"event-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[3,17,1,20,1,0,1,2,0,52,0,0,2,33,39,0,20,3,0,20,4,0,48,1,17,2,20,6,0,20,7,0,52,5,0,2,33,7,0,4,21,8,0,32,6,0,20,6,0,21,7,0,32,1,0,2,5,20,8,0,6,33,28,0,5,20,10,0,1,11,0,52,5,0,2,6,33,9,0,5,20,12,0,20,13,0,48,1,52,9,0,1,33,56,1,20,10,0,1,14,0,52,5,0,2,6,34,27,0,5,20,10,0,1,11,0,52,5,0,2,6,33,12,0,5,20,15,0,20,4,0,1,16,0,48,2,33,11,0,20,17,0,20,13,0,48,1,32,1,0,2,5,20,18,0,20,4,0,48,1,17,2,20,10,0,1,11,0,52,5,0,2,6,33,53,0,5,20,19,0,1,20,0,52,0,0,2,1,21,0,52,5,0,2,6,33,31,0,5,20,15,0,20,4,0,1,16,0,48,2,6,33,15,0,5,20,1,0,1,22,0,52,0,0,2,52,9,0,1,17,3,4,17,4,20,23,0,33,37,0,20,24,0,20,25,0,20,19,0,1,26,0,52,0,0,2,48,1,20,27,0,20,4,0,1,28,0,48,2,48,2,21,29,0,32,1,0,2,5,20,29,0,33,30,0,20,30,0,20,19,0,1,26,0,52,0,0,2,48,1,5,20,31,0,1,32,0,1,32,0,49,2,32,89,0,20,23,0,33,25,0,20,33,0,1,35,0,20,19,0,1,26,0,52,0,0,2,52,34,0,2,48,1,32,1,0,2,5,20,1,0,1,22,0,52,0,0,2,33,33,0,20,36,0,20,37,0,48,1,5,20,38,0,51,39,0,20,1,0,1,22,0,52,0,0,2,48,2,21,37,0,32,10,0,20,40,0,20,4,0,2,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"mods"},{"t":"s","v":"changed"},{"t":"s","v":"dom-value"},{"t":"s","v":"el"},{"t":"s","v":"="},{"t":"s","v":"val"},{"t":"s","v":"last-val"},{"t":"s","v":"should-fire"},{"t":"s","v":"not"},{"t":"s","v":"event-name"},{"t":"s","v":"click"},{"t":"s","v":"event-modifier-key?"},{"t":"s","v":"e"},{"t":"s","v":"submit"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"href"},{"t":"s","v":"prevent-default"},{"t":"s","v":"get-verb-info"},{"t":"s","v":"live-info"},{"t":"s","v":"method"},{"t":"s","v":"GET"},{"t":"s","v":"delay"},{"t":"s","v":"is-get-link"},{"t":"s","v":"try-client-route"},{"t":"s","v":"url-pathname"},{"t":"s","v":"url"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-target"},{"t":"s","v":"client-routed"},{"t":"s","v":"browser-push-state"},{"t":"s","v":"browser-scroll-to"},{"t":"n","v":0},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:route server fetch "},{"t":"s","v":"clear-timeout"},{"t":"s","v":"timer"},{"t":"s","v":"set-timeout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,2,49,3,50],"constants":[{"t":"s","v":"execute-request"},{"t":"s","v":"el"}]}},{"t":"s","v":"execute-request"}]}},{"t":"s","v":"once"},{"t":"s","v":"dict"}]}},{"t":"s","v":"post-swap"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,20,3,0,33,11,0,20,4,0,20,3,0,48,1,32,3,0,1,5,0,52,1,0,2,48,1,5,20,6,0,20,3,0,48,1,5,20,7,0,20,3,0,48,1,5,20,8,0,20,3,0,48,1,5,20,9,0,20,3,0,48,1,5,20,10,0,48,0,5,20,11,0,20,3,0,49,1,50],"constants":[{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"post-swap: root="},{"t":"s","v":"root"},{"t":"s","v":"dom-tag-name"},{"t":"s","v":"nil"},{"t":"s","v":"activate-scripts"},{"t":"s","v":"sx-process-scripts"},{"t":"s","v":"sx-hydrate"},{"t":"s","v":"sx-hydrate-islands"},{"t":"s","v":"run-post-render-hooks"},{"t":"s","v":"process-elements"}]}},{"t":"s","v":"process-settle-hooks"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,6,33,12,0,5,20,3,0,52,5,0,1,52,4,0,1,33,23,0,20,6,0,20,3,0,48,1,17,2,51,8,0,20,9,0,52,7,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-on-settle"},{"t":"s","v":"settle-expr"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"sx-parse"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,52,3,0,0,48,1,49,2,50],"constants":[{"t":"s","v":"eval-expr"},{"t":"s","v":"expr"},{"t":"s","v":"env-extend"},{"t":"s","v":"dict"}]}},{"t":"s","v":"exprs"}]}},{"t":"s","v":"activate-scripts"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,26,0,20,1,0,20,0,0,1,2,0,48,2,17,1,51,4,0,20,5,0,52,3,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"root"},{"t":"s","v":"dom-query-all"},{"t":"s","v":"script"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,6,33,16,0,5,20,1,0,20,2,0,1,4,0,48,2,52,0,0,1,33,47,0,20,5,0,20,2,0,48,1,17,1,20,6,0,20,7,0,1,4,0,1,8,0,48,3,5,20,9,0,20,10,0,20,2,0,48,1,20,7,0,20,2,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"dead"},{"t":"s","v":"data-components"},{"t":"s","v":"data-sx-activated"},{"t":"s","v":"create-script-clone"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"live"},{"t":"s","v":"true"},{"t":"s","v":"dom-replace-child"},{"t":"s","v":"dom-parent"}]}},{"t":"s","v":"scripts"}]}},{"t":"s","v":"process-oob-swaps"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,51,3,0,20,4,0,52,2,0,2,50],"constants":[{"t":"s","v":"find-oob-swaps"},{"t":"s","v":"container"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,3,0,20,2,0,48,1,17,2,20,1,0,1,4,0,52,0,0,2,17,3,20,1,0,1,5,0,52,0,0,2,17,4,20,6,0,20,7,0,48,1,33,19,0,20,8,0,20,6,0,20,7,0,48,1,20,7,0,48,2,32,1,0,2,5,20,9,0,33,17,0,20,10,0,20,9,0,20,7,0,20,5,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"oob"},{"t":"s","v":"target-id"},{"t":"s","v":"dom-query-by-id"},{"t":"s","v":"element"},{"t":"s","v":"swap-type"},{"t":"s","v":"dom-parent"},{"t":"s","v":"oob-el"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"target"},{"t":"s","v":"swap-fn"}]}},{"t":"s","v":"oobs"}]}},{"t":"s","v":"hoist-head-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,1,4,0,48,2,52,0,0,2,5,51,5,0,20,2,0,20,3,0,1,6,0,48,2,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,19,0,20,2,0,20,0,0,20,1,0,48,1,20,1,0,48,2,32,1,0,2,5,20,3,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-parent"},{"t":"s","v":"style"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"dom-append-to-head"}]}},{"t":"s","v":"dom-query-all"},{"t":"s","v":"container"},{"t":"s","v":"style[data-sx-css]"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,19,0,20,2,0,20,0,0,20,1,0,48,1,20,1,0,48,2,32,1,0,2,5,20,3,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-parent"},{"t":"s","v":"link"},{"t":"s","v":"dom-remove-child"},{"t":"s","v":"dom-append-to-head"}]}},{"t":"s","v":"link[rel=\"stylesheet\"]"}]}},{"t":"s","v":"process-boosted"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,6,34,6,0,5,20,4,0,48,0,1,5,0,48,2,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"boost-descendants"},{"t":"s","v":"container"}]}},{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[sx-boost]"}]}},{"t":"s","v":"boost-descendants"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,51,4,0,20,5,0,20,1,0,1,6,0,48,2,52,3,0,2,5,51,7,0,20,5,0,20,1,0,1,8,0,48,2,52,3,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"container"},{"t":"s","v":"sx-boost"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,6,33,9,0,5,20,4,0,20,2,0,48,1,33,172,0,20,5,0,20,2,0,1,3,0,48,2,5,20,6,0,20,2,0,1,7,0,48,2,52,0,0,1,6,33,23,0,5,20,8,0,6,33,15,0,5,20,8,0,1,10,0,52,9,0,2,52,0,0,1,33,17,0,20,11,0,20,2,0,1,7,0,20,8,0,48,3,32,1,0,2,5,20,6,0,20,2,0,1,12,0,48,2,52,0,0,1,33,17,0,20,11,0,20,2,0,1,12,0,1,13,0,48,3,32,1,0,2,5,20,6,0,20,2,0,1,14,0,48,2,52,0,0,1,33,17,0,20,11,0,20,2,0,1,14,0,1,10,0,48,3,32,1,0,2,5,20,15,0,20,2,0,20,16,0,20,2,0,1,17,0,48,2,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"link"},{"t":"s","v":"boost"},{"t":"s","v":"should-boost-link?"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"sx-target"},{"t":"s","v":"boost-target"},{"t":"s","v":"="},{"t":"s","v":"true"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"sx-swap"},{"t":"s","v":"innerHTML"},{"t":"s","v":"sx-push-url"},{"t":"s","v":"bind-client-route-link"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"href"}]}},{"t":"s","v":"dom-query-all"},{"t":"s","v":"a[href]"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,6,33,9,0,5,20,4,0,20,2,0,48,1,33,178,0,20,5,0,20,2,0,1,3,0,48,2,5,20,7,0,20,2,0,1,8,0,48,2,6,34,4,0,5,1,9,0,52,6,0,1,17,1,20,7,0,20,2,0,1,10,0,48,2,6,34,6,0,5,20,11,0,48,0,17,2,20,12,0,20,2,0,1,13,0,48,2,52,0,0,1,6,33,23,0,5,20,14,0,6,33,15,0,5,20,14,0,1,16,0,52,15,0,2,52,0,0,1,33,17,0,20,17,0,20,2,0,1,13,0,20,14,0,48,3,32,1,0,2,5,20,12,0,20,2,0,1,18,0,48,2,52,0,0,1,33,17,0,20,17,0,20,2,0,1,18,0,1,19,0,48,3,32,1,0,2,5,20,20,0,20,2,0,20,8,0,20,10,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"form"},{"t":"s","v":"boost"},{"t":"s","v":"should-boost-form?"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"upper"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"method"},{"t":"s","v":"GET"},{"t":"s","v":"action"},{"t":"s","v":"browser-location-href"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"sx-target"},{"t":"s","v":"boost-target"},{"t":"s","v":"="},{"t":"s","v":"true"},{"t":"s","v":"dom-set-attr"},{"t":"s","v":"sx-swap"},{"t":"s","v":"innerHTML"},{"t":"s","v":"bind-boost-form"}]}},{"t":"s","v":"form"}]}},{"t":"s","v":"_page-data-cache"},{"t":"s","v":"_page-data-cache-ttl"},{"t":"n","v":30000},{"t":"s","v":"page-data-cache-key"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,17,2,20,2,0,52,1,0,1,6,34,12,0,5,20,2,0,52,4,0,1,52,3,0,1,33,6,0,20,5,0,32,41,0,52,6,0,0,17,3,51,8,0,20,2,0,52,4,0,1,52,7,0,2,5,20,5,0,1,10,0,1,12,0,20,13,0,52,11,0,2,52,9,0,3,50],"constants":[{"t":"s","v":"page-name"},{"t":"s","v":"nil?"},{"t":"s","v":"params"},{"t":"s","v":"empty?"},{"t":"s","v":"keys"},{"t":"s","v":"base"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,20,6,0,20,3,0,52,5,0,2,52,2,0,3,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"parts"},{"t":"s","v":"str"},{"t":"s","v":"k"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"params"}]}},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"join"},{"t":"s","v":"&"},{"t":"s","v":"parts"}]}},{"t":"s","v":"page-data-cache-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,4,0,52,3,0,1,33,4,0,2,32,55,0,20,7,0,48,0,20,4,0,1,8,0,52,0,0,2,52,6,0,2,20,9,0,52,5,0,2,33,16,0,20,1,0,20,2,0,2,52,10,0,3,5,2,32,10,0,20,4,0,1,11,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"_page-data-cache"},{"t":"s","v":"cache-key"},{"t":"s","v":"nil?"},{"t":"s","v":"entry"},{"t":"s","v":">"},{"t":"s","v":"-"},{"t":"s","v":"now-ms"},{"t":"s","v":"ts"},{"t":"s","v":"_page-data-cache-ttl"},{"t":"s","v":"dict-set!"},{"t":"s","v":"data"}]}},{"t":"s","v":"page-data-cache-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,20,3,0,1,4,0,20,5,0,48,0,65,2,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"_page-data-cache"},{"t":"s","v":"cache-key"},{"t":"s","v":"data"},{"t":"s","v":"ts"},{"t":"s","v":"now-ms"}]}},{"t":"s","v":"invalidate-page-cache"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,5,20,4,0,1,5,0,1,6,0,1,7,0,20,8,0,65,2,0,48,1,5,20,9,0,1,11,0,20,8,0,52,10,0,2,49,1,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,6,34,18,0,5,20,1,0,20,2,0,1,5,0,52,4,0,2,52,3,0,2,33,14,0,20,7,0,20,1,0,2,52,6,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"k"},{"t":"s","v":"page-name"},{"t":"s","v":"starts-with?"},{"t":"s","v":"str"},{"t":"s","v":":"},{"t":"s","v":"dict-set!"},{"t":"s","v":"_page-data-cache"}]}},{"t":"s","v":"keys"},{"t":"s","v":"_page-data-cache"},{"t":"s","v":"sw-post-message"},{"t":"s","v":"type"},{"t":"s","v":"invalidate"},{"t":"s","v":"page"},{"t":"s","v":"page-name"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:cache invalidate "}]}},{"t":"s","v":"invalidate-all-page-cache"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,21,1,0,5,20,2,0,1,3,0,1,4,0,1,5,0,1,6,0,65,2,0,48,1,5,20,7,0,1,8,0,49,1,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"_page-data-cache"},{"t":"s","v":"sw-post-message"},{"t":"s","v":"type"},{"t":"s","v":"invalidate"},{"t":"s","v":"page"},{"t":"s","v":"*"},{"t":"s","v":"log-info"},{"t":"s","v":"sx:cache invalidate *"}]}},{"t":"s","v":"update-page-cache"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,52,2,0,0,48,2,17,2,20,3,0,20,4,0,20,5,0,48,2,5,20,6,0,1,8,0,20,1,0,52,7,0,2,49,1,50],"constants":[{"t":"s","v":"page-data-cache-key"},{"t":"s","v":"page-name"},{"t":"s","v":"dict"},{"t":"s","v":"page-data-cache-set"},{"t":"s","v":"cache-key"},{"t":"s","v":"data"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:cache update "}]}},{"t":"s","v":"process-cache-directives"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,3,20,3,0,33,32,0,20,3,0,1,5,0,52,4,0,2,33,8,0,20,6,0,48,0,32,8,0,20,7,0,20,3,0,48,1,32,1,0,2,5,20,9,0,1,10,0,52,8,0,2,17,3,20,11,0,33,32,0,20,11,0,1,5,0,52,4,0,2,33,8,0,20,6,0,48,0,32,8,0,20,7,0,20,11,0,48,1,32,1,0,2,5,20,9,0,1,12,0,52,8,0,2,17,3,20,13,0,33,34,0,20,14,0,20,15,0,48,1,17,4,20,16,0,33,14,0,20,17,0,20,13,0,20,16,0,49,2,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-cache-invalidate"},{"t":"s","v":"el-invalidate"},{"t":"s","v":"="},{"t":"s","v":"*"},{"t":"s","v":"invalidate-all-page-cache"},{"t":"s","v":"invalidate-page-cache"},{"t":"s","v":"get"},{"t":"s","v":"resp-headers"},{"t":"s","v":"cache-invalidate"},{"t":"s","v":"hdr-invalidate"},{"t":"s","v":"cache-update"},{"t":"s","v":"hdr-update"},{"t":"s","v":"parse-sx-data"},{"t":"s","v":"response-text"},{"t":"s","v":"data"},{"t":"s","v":"update-page-cache"}]}},{"t":"s","v":"_optimistic-snapshots"},{"t":"s","v":"optimistic-cache-update"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,33,42,0,20,3,0,20,2,0,48,1,17,3,20,5,0,20,1,0,20,2,0,52,4,0,3,5,20,6,0,20,1,0,20,7,0,48,2,5,20,7,0,32,1,0,2,50],"constants":[{"t":"s","v":"page-data-cache-get"},{"t":"s","v":"cache-key"},{"t":"s","v":"cached"},{"t":"s","v":"mutator"},{"t":"s","v":"dict-set!"},{"t":"s","v":"_optimistic-snapshots"},{"t":"s","v":"page-data-cache-set"},{"t":"s","v":"predicted"}]}},{"t":"s","v":"optimistic-cache-revert"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,3,0,33,29,0,20,4,0,20,2,0,20,3,0,48,2,5,20,1,0,20,2,0,52,5,0,2,5,20,3,0,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"_optimistic-snapshots"},{"t":"s","v":"cache-key"},{"t":"s","v":"snapshot"},{"t":"s","v":"page-data-cache-set"},{"t":"s","v":"dict-delete!"}]}},{"t":"s","v":"optimistic-cache-confirm"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"dict-delete!"},{"t":"s","v":"_optimistic-snapshots"},{"t":"s","v":"cache-key"}]}},{"t":"s","v":"submit-mutation"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,6,20,3,0,20,4,0,20,5,0,48,2,17,7,20,6,0,33,17,0,20,7,0,20,1,0,20,2,0,20,6,0,48,3,32,1,0,2,5,20,8,0,20,9,0,20,10,0,51,11,0,51,12,0,49,4,50],"constants":[{"t":"s","v":"page-data-cache-key"},{"t":"s","v":"page-name"},{"t":"s","v":"params"},{"t":"s","v":"optimistic-cache-update"},{"t":"s","v":"cache-key"},{"t":"s","v":"mutator-fn"},{"t":"s","v":"predicted"},{"t":"s","v":"try-rerender-page"},{"t":"s","v":"execute-action"},{"t":"s","v":"action-name"},{"t":"s","v":"payload"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,14,0,20,1,0,20,2,0,20,0,0,48,2,32,1,0,2,5,20,3,0,20,2,0,48,1,5,20,0,0,33,17,0,20,4,0,20,5,0,20,6,0,20,0,0,48,3,32,1,0,2,5,20,7,0,1,9,0,20,5,0,52,8,0,2,48,1,5,20,10,0,33,11,0,20,10,0,1,11,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"result"},{"t":"s","v":"page-data-cache-set"},{"t":"s","v":"cache-key"},{"t":"s","v":"optimistic-cache-confirm"},{"t":"s","v":"try-rerender-page"},{"t":"s","v":"page-name"},{"t":"s","v":"params"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:optimistic confirmed "},{"t":"s","v":"on-complete"},{"t":"s","v":"confirmed"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,33,17,0,20,3,0,20,4,0,20,5,0,20,2,0,48,3,32,1,0,2,5,20,6,0,1,8,0,20,4,0,1,9,0,20,10,0,52,7,0,4,48,1,5,20,11,0,33,11,0,20,11,0,1,2,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"optimistic-cache-revert"},{"t":"s","v":"cache-key"},{"t":"s","v":"reverted"},{"t":"s","v":"try-rerender-page"},{"t":"s","v":"page-name"},{"t":"s","v":"params"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:optimistic reverted "},{"t":"s","v":": "},{"t":"s","v":"error"},{"t":"s","v":"on-complete"}]}}]}},{"t":"s","v":"_is-online"},{"t":"s","v":"_offline-queue"},{"t":"s","v":"list"},{"t":"s","v":"offline-is-online?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,50],"constants":[{"t":"s","v":"_is-online"}]}},{"t":"s","v":"offline-set-online!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,21,1,0,50],"constants":[{"t":"s","v":"val"},{"t":"s","v":"_is-online"}]}},{"t":"s","v":"offline-queue-mutation"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,5,1,4,0,20,5,0,1,6,0,20,6,0,1,7,0,20,1,0,1,2,0,20,2,0,1,8,0,20,9,0,48,0,1,10,0,1,11,0,52,3,0,12,17,6,20,12,0,20,13,0,20,14,0,48,2,5,20,15,0,20,16,0,20,17,0,48,2,17,7,20,18,0,33,17,0,20,19,0,20,1,0,20,2,0,20,18,0,48,3,32,1,0,2,5,20,20,0,1,22,0,20,5,0,1,23,0,20,13,0,52,24,0,1,1,25,0,52,21,0,5,48,1,5,20,14,0,50],"constants":[{"t":"s","v":"page-data-cache-key"},{"t":"s","v":"page-name"},{"t":"s","v":"params"},{"t":"s","v":"dict"},{"t":"s","v":"action"},{"t":"s","v":"action-name"},{"t":"s","v":"payload"},{"t":"s","v":"page"},{"t":"s","v":"timestamp"},{"t":"s","v":"now-ms"},{"t":"s","v":"status"},{"t":"s","v":"pending"},{"t":"s","v":"append!"},{"t":"s","v":"_offline-queue"},{"t":"s","v":"entry"},{"t":"s","v":"optimistic-cache-update"},{"t":"s","v":"cache-key"},{"t":"s","v":"mutator-fn"},{"t":"s","v":"predicted"},{"t":"s","v":"try-rerender-page"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:offline queued "},{"t":"s","v":" ("},{"t":"s","v":"len"},{"t":"s","v":" pending)"}]}},{"t":"s","v":"offline-sync"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,17,0,20,5,0,52,4,0,1,52,3,0,1,33,36,0,20,6,0,1,8,0,20,5,0,52,9,0,1,1,10,0,52,7,0,3,48,1,5,51,12,0,20,5,0,52,11,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,1,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"e"},{"t":"s","v":"status"},{"t":"s","v":"pending"}]}},{"t":"s","v":"_offline-queue"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"pending"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:offline syncing "},{"t":"s","v":"len"},{"t":"s","v":" mutations"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,20,2,0,1,4,0,52,1,0,2,51,5,0,51,6,0,49,4,50],"constants":[{"t":"s","v":"execute-action"},{"t":"s","v":"get"},{"t":"s","v":"entry"},{"t":"s","v":"action"},{"t":"s","v":"payload"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,1,3,0,52,0,0,3,5,20,4,0,1,6,0,20,1,0,1,8,0,52,7,0,2,52,5,0,2,49,1,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"entry"},{"t":"s","v":"status"},{"t":"s","v":"synced"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:offline synced "},{"t":"s","v":"get"},{"t":"s","v":"action"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,1,3,0,52,0,0,3,5,20,4,0,1,6,0,20,1,0,1,8,0,52,7,0,2,1,9,0,20,10,0,52,5,0,4,49,1,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"entry"},{"t":"s","v":"status"},{"t":"s","v":"failed"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:offline sync failed "},{"t":"s","v":"get"},{"t":"s","v":"action"},{"t":"s","v":": "},{"t":"s","v":"error"}]}}]}}]}},{"t":"s","v":"offline-pending-count"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,2,0,20,3,0,52,1,0,2,52,0,0,1,50],"constants":[{"t":"s","v":"len"},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,1,4,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"e"},{"t":"s","v":"status"},{"t":"s","v":"pending"}]}},{"t":"s","v":"_offline-queue"}]}},{"t":"s","v":"offline-aware-mutation"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,26,0,20,1,0,20,2,0,20,3,0,20,4,0,20,5,0,20,6,0,20,7,0,49,6,32,39,0,20,8,0,20,4,0,20,5,0,20,2,0,20,3,0,20,6,0,48,5,5,20,7,0,33,11,0,20,7,0,1,9,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"_is-online"},{"t":"s","v":"submit-mutation"},{"t":"s","v":"page-name"},{"t":"s","v":"params"},{"t":"s","v":"action-name"},{"t":"s","v":"payload"},{"t":"s","v":"mutator-fn"},{"t":"s","v":"on-complete"},{"t":"s","v":"offline-queue-mutation"},{"t":"s","v":"queued"}]}},{"t":"s","v":"current-page-layout"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,0,48,1,17,0,20,2,0,20,3,0,20,4,0,48,2,17,1,20,6,0,52,5,0,1,33,6,0,1,7,0,32,18,0,20,6,0,1,9,0,52,8,0,2,6,34,4,0,5,1,7,0,50],"constants":[{"t":"s","v":"url-pathname"},{"t":"s","v":"browser-location-href"},{"t":"s","v":"find-matching-route"},{"t":"s","v":"pathname"},{"t":"s","v":"_page-routes"},{"t":"s","v":"nil?"},{"t":"s","v":"match"},{"t":"s","v":""},{"t":"s","v":"get"},{"t":"s","v":"layout"}]}},{"t":"s","v":"swap-rendered-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,5,20,2,0,20,1,0,1,3,0,48,2,5,20,4,0,20,1,0,20,5,0,48,2,5,20,6,0,20,1,0,48,1,5,20,7,0,20,1,0,48,1,5,20,8,0,20,1,0,48,1,5,20,9,0,20,1,0,48,1,5,20,10,0,48,0,5,20,11,0,20,1,0,1,12,0,1,14,0,20,14,0,52,13,0,2,48,3,5,20,15,0,1,17,0,20,14,0,52,16,0,2,49,1,50],"constants":[{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"target"},{"t":"s","v":"dom-set-text-content"},{"t":"s","v":""},{"t":"s","v":"dom-append"},{"t":"s","v":"rendered"},{"t":"s","v":"hoist-head-elements-full"},{"t":"s","v":"process-elements"},{"t":"s","v":"sx-hydrate-elements"},{"t":"s","v":"sx-hydrate-islands"},{"t":"s","v":"run-post-render-hooks"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"sx:clientRoute"},{"t":"s","v":"dict"},{"t":"s","v":"pathname"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:route client "}]}},{"t":"s","v":"resolve-route-target"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,33,15,0,5,20,0,0,1,3,0,52,2,0,2,52,1,0,1,33,11,0,20,4,0,20,0,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"target-sel"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"true"},{"t":"s","v":"dom-query"}]}},{"t":"s","v":"deps-satisfied?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,3,0,48,0,17,2,20,2,0,52,4,0,1,6,34,8,0,5,20,2,0,52,5,0,1,33,4,0,3,32,10,0,51,7,0,20,2,0,52,6,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"match"},{"t":"s","v":"deps"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"nil?"},{"t":"s","v":"empty?"},{"t":"s","v":"every?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"contains?"},{"t":"s","v":"loaded"},{"t":"s","v":"dep"}]}}]}},{"t":"s","v":"try-client-route"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,2,20,4,0,52,3,0,1,33,30,0,20,5,0,1,7,0,20,2,0,52,8,0,1,1,9,0,20,1,0,52,6,0,4,48,1,5,4,32,27,3,20,4,0,1,11,0,52,10,0,2,6,34,4,0,5,1,12,0,17,3,20,13,0,48,0,17,4,20,16,0,20,17,0,52,15,0,2,52,14,0,1,33,32,0,20,5,0,1,18,0,20,17,0,1,19,0,20,16,0,1,20,0,20,1,0,52,6,0,6,48,1,5,4,32,207,2,20,4,0,1,21,0,52,10,0,2,17,5,20,4,0,1,22,0,52,10,0,2,6,34,4,0,5,65,0,0,17,6,20,4,0,1,23,0,52,10,0,2,17,7,20,4,0,1,24,0,52,10,0,2,17,8,20,25,0,52,3,0,1,6,34,8,0,5,20,25,0,52,26,0,1,33,20,0,20,27,0,1,28,0,20,1,0,52,6,0,2,48,1,5,4,32,109,2,20,29,0,20,30,0,48,1,17,9,20,31,0,52,3,0,1,33,20,0,20,27,0,1,32,0,20,30,0,52,6,0,2,48,1,5,4,32,69,2,20,33,0,20,4,0,48,1,52,14,0,1,33,20,0,20,5,0,1,34,0,20,35,0,52,6,0,2,48,1,5,4,32,34,2,20,4,0,1,36,0,52,10,0,2,17,10,20,36,0,6,33,12,0,5,20,36,0,52,26,0,1,52,14,0,1,17,11,20,4,0,1,37,0,52,10,0,2,17,12,20,37,0,33,83,0,20,37,0,1,38,0,52,10,0,2,6,34,5,0,5,52,39,0,0,17,13,20,37,0,1,40,0,52,10,0,2,6,34,5,0,5,52,39,0,0,17,14,20,5,0,1,41,0,20,35,0,1,42,0,20,43,0,52,8,0,1,1,44,0,20,45,0,52,8,0,1,1,46,0,52,6,0,7,48,1,32,1,0,2,5,20,47,0,33,11,0,20,48,0,20,36,0,48,1,32,1,0,2,5,20,4,0,1,49,0,52,10,0,2,33,48,0,20,5,0,1,50,0,20,1,0,52,6,0,2,48,1,5,20,51,0,20,31,0,20,1,0,20,52,0,20,31,0,20,53,0,48,0,20,54,0,48,3,48,3,5,3,32,74,1,20,4,0,1,55,0,52,10,0,2,33,198,0,20,56,0,20,35,0,20,23,0,48,2,17,13,20,57,0,20,58,0,48,1,17,14,20,59,0,33,134,0,20,22,0,20,23,0,20,59,0,52,60,0,3,17,15,20,47,0,33,35,0,20,5,0,1,61,0,20,1,0,52,6,0,2,48,1,5,20,62,0,20,25,0,20,63,0,51,64,0,48,3,5,3,32,75,0,20,65,0,20,25,0,20,63,0,48,2,17,16,20,66,0,52,3,0,1,33,20,0,20,27,0,1,67,0,20,1,0,52,6,0,2,48,1,5,4,32,32,0,20,5,0,1,68,0,20,1,0,52,6,0,2,48,1,5,20,69,0,20,31,0,20,66,0,20,1,0,48,3,5,3,32,32,0,20,5,0,1,70,0,20,1,0,52,6,0,2,48,1,5,20,71,0,20,35,0,20,23,0,51,72,0,48,3,5,3,32,119,0,20,47,0,33,42,0,20,5,0,1,73,0,20,1,0,52,6,0,2,48,1,5,20,62,0,20,25,0,20,22,0,20,23,0,52,60,0,2,51,74,0,48,3,5,3,32,71,0,20,22,0,20,23,0,52,60,0,2,17,13,20,65,0,20,25,0,20,63,0,48,2,17,14,20,66,0,52,3,0,1,33,20,0,20,5,0,1,75,0,20,1,0,52,6,0,2,48,1,5,4,32,16,0,20,69,0,20,31,0,20,66,0,20,1,0,48,3,5,3,50],"constants":[{"t":"s","v":"find-matching-route"},{"t":"s","v":"pathname"},{"t":"s","v":"_page-routes"},{"t":"s","v":"nil?"},{"t":"s","v":"match"},{"t":"s","v":"log-info"},{"t":"s","v":"str"},{"t":"s","v":"sx:route no match ("},{"t":"s","v":"len"},{"t":"s","v":" routes) "},{"t":"s","v":"get"},{"t":"s","v":"layout"},{"t":"s","v":""},{"t":"s","v":"current-page-layout"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"target-layout"},{"t":"s","v":"cur-layout"},{"t":"s","v":"sx:route server (layout: "},{"t":"s","v":" -> "},{"t":"s","v":") "},{"t":"s","v":"content"},{"t":"s","v":"closure"},{"t":"s","v":"params"},{"t":"s","v":"name"},{"t":"s","v":"content-src"},{"t":"s","v":"empty?"},{"t":"s","v":"log-warn"},{"t":"s","v":"sx:route no content for "},{"t":"s","v":"resolve-route-target"},{"t":"s","v":"target-sel"},{"t":"s","v":"target"},{"t":"s","v":"sx:route target not found: "},{"t":"s","v":"deps-satisfied?"},{"t":"s","v":"sx:route deps miss for "},{"t":"s","v":"page-name"},{"t":"s","v":"io-deps"},{"t":"s","v":"render-plan"},{"t":"s","v":"server"},{"t":"s","v":"list"},{"t":"s","v":"client"},{"t":"s","v":"sx:route plan "},{"t":"s","v":" — "},{"t":"s","v":"srv"},{"t":"s","v":" server, "},{"t":"s","v":"cli"},{"t":"s","v":" client"},{"t":"s","v":"has-io"},{"t":"s","v":"register-io-deps"},{"t":"s","v":"stream"},{"t":"s","v":"sx:route streaming "},{"t":"s","v":"fetch-streaming"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"s","v":"has-data"},{"t":"s","v":"page-data-cache-key"},{"t":"s","v":"page-data-cache-get"},{"t":"s","v":"cache-key"},{"t":"s","v":"cached"},{"t":"s","v":"merge"},{"t":"s","v":"sx:route client+cache+async "},{"t":"s","v":"try-async-eval-content"},{"t":"s","v":"env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,52,0,20,2,0,1,4,0,20,5,0,1,6,0,52,3,0,3,48,1,5,20,7,0,20,8,0,20,5,0,20,9,0,20,8,0,20,10,0,48,0,20,11,0,48,3,1,12,0,49,4,32,14,0,20,13,0,20,8,0,20,1,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"rendered"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:route cache+async eval failed for "},{"t":"s","v":"pathname"},{"t":"s","v":" — server fallback"},{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"target"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"n","v":0},{"t":"s","v":"swap-rendered-content"}]}},{"t":"s","v":"try-eval-content"},{"t":"s","v":"rendered"},{"t":"s","v":"sx:route cached eval failed for "},{"t":"s","v":"sx:route client+cache "},{"t":"s","v":"swap-rendered-content"},{"t":"s","v":"sx:route client+data "},{"t":"s","v":"resolve-page-data"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,5,20,4,0,20,5,0,20,2,0,52,3,0,3,17,1,20,6,0,33,17,0,20,7,0,20,8,0,20,9,0,51,10,0,49,3,32,89,0,20,11,0,20,8,0,20,9,0,48,2,17,2,20,13,0,52,12,0,1,33,52,0,20,14,0,1,16,0,20,17,0,1,18,0,52,15,0,3,48,1,5,20,19,0,20,20,0,20,17,0,20,21,0,20,20,0,20,22,0,48,0,20,23,0,48,3,1,24,0,49,4,32,14,0,20,25,0,20,20,0,20,13,0,20,17,0,49,3,50],"constants":[{"t":"s","v":"page-data-cache-set"},{"t":"s","v":"cache-key"},{"t":"s","v":"data"},{"t":"s","v":"merge"},{"t":"s","v":"closure"},{"t":"s","v":"params"},{"t":"s","v":"has-io"},{"t":"s","v":"try-async-eval-content"},{"t":"s","v":"content-src"},{"t":"s","v":"env"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,52,0,20,2,0,1,4,0,20,5,0,1,6,0,52,3,0,3,48,1,5,20,7,0,20,8,0,20,5,0,20,9,0,20,8,0,20,10,0,48,0,20,11,0,48,3,1,12,0,49,4,32,14,0,20,13,0,20,8,0,20,1,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"rendered"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:route data+async eval failed for "},{"t":"s","v":"pathname"},{"t":"s","v":" — server fallback"},{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"target"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"n","v":0},{"t":"s","v":"swap-rendered-content"}]}},{"t":"s","v":"try-eval-content"},{"t":"s","v":"nil?"},{"t":"s","v":"rendered"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:route data eval failed for "},{"t":"s","v":"pathname"},{"t":"s","v":" — server fallback"},{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"target"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"n","v":0},{"t":"s","v":"swap-rendered-content"}]}},{"t":"s","v":"sx:route client+async "},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,52,0,20,2,0,1,4,0,20,5,0,1,6,0,52,3,0,3,48,1,5,20,7,0,20,8,0,20,5,0,20,9,0,20,8,0,20,10,0,48,0,20,11,0,48,3,1,12,0,49,4,32,14,0,20,13,0,20,8,0,20,1,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"rendered"},{"t":"s","v":"log-warn"},{"t":"s","v":"str"},{"t":"s","v":"sx:route async eval failed for "},{"t":"s","v":"pathname"},{"t":"s","v":" — server fallback"},{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"target"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"n","v":0},{"t":"s","v":"swap-rendered-content"}]}},{"t":"s","v":"sx:route server (eval failed) "}]}},{"t":"s","v":"bind-client-route-link"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,51,3,0,49,3,50],"constants":[{"t":"s","v":"bind-client-route-click"},{"t":"s","v":"link"},{"t":"s","v":"href"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"bind-boost-link"},{"t":"s","v":"link"},{"t":"s","v":"href"}]}}]}},{"t":"s","v":"process-sse"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,6,34,6,0,5,20,4,0,48,0,1,5,0,48,2,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,23,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"sse"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"bind-sse"}]}},{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[sx-sse]"}]}},{"t":"s","v":"bind-sse"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,40,0,20,4,0,20,3,0,20,1,0,48,2,17,2,20,5,0,20,1,0,48,1,17,3,20,6,0,20,7,0,20,8,0,51,9,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-sse"},{"t":"s","v":"url"},{"t":"s","v":"event-source-connect"},{"t":"s","v":"parse-sse-swap"},{"t":"s","v":"event-source-listen"},{"t":"s","v":"source"},{"t":"s","v":"event-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"bind-sse-swap"},{"t":"s","v":"el"},{"t":"s","v":"data"}]}}]}},{"t":"s","v":"bind-sse-swap"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,3,0,20,1,0,1,4,0,48,2,20,5,0,20,6,0,48,0,1,7,0,48,2,48,2,17,3,20,9,0,1,10,0,52,8,0,2,17,4,20,9,0,1,11,0,52,8,0,2,17,5,20,13,0,52,12,0,1,17,6,20,16,0,52,15,0,1,52,14,0,1,33,83,0,20,17,0,20,18,0,48,1,5,20,16,0,1,20,0,52,19,0,2,33,47,0,20,21,0,20,16,0,48,1,17,7,20,22,0,1,23,0,2,48,2,17,8,20,24,0,20,25,0,20,26,0,48,2,5,20,27,0,20,28,0,51,29,0,49,2,32,11,0,20,27,0,20,28,0,51,30,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"resolve-target"},{"t":"s","v":"el"},{"t":"s","v":"parse-swap-spec"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-swap"},{"t":"s","v":"dom-has-class?"},{"t":"s","v":"dom-body"},{"t":"s","v":"sx-transitions"},{"t":"s","v":"get"},{"t":"s","v":"swap-spec"},{"t":"s","v":"style"},{"t":"s","v":"transition"},{"t":"s","v":"trim"},{"t":"s","v":"data"},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"trimmed"},{"t":"s","v":"dispose-islands-in"},{"t":"s","v":"target"},{"t":"s","v":"starts-with?"},{"t":"s","v":"("},{"t":"s","v":"sx-render"},{"t":"s","v":"dom-create-element"},{"t":"s","v":"div"},{"t":"s","v":"dom-append"},{"t":"s","v":"container"},{"t":"s","v":"rendered"},{"t":"s","v":"with-transition"},{"t":"s","v":"use-transition"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,1,20,4,0,48,3,5,20,5,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"swap-dom-nodes"},{"t":"s","v":"target"},{"t":"s","v":"children-to-fragment"},{"t":"s","v":"container"},{"t":"s","v":"swap-style"},{"t":"s","v":"post-swap"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,48,3,5,20,4,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"swap-html-string"},{"t":"s","v":"target"},{"t":"s","v":"trimmed"},{"t":"s","v":"swap-style"},{"t":"s","v":"post-swap"}]}}]}},{"t":"s","v":"bind-inline-handlers"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,6,34,6,0,5,20,4,0,48,0,1,5,0,48,2,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,1,0,1,3,0,52,2,0,2,17,2,20,5,0,1,6,0,52,4,0,2,33,87,0,20,5,0,1,8,0,52,7,0,2,17,3,20,10,0,20,11,0,1,13,0,20,14,0,52,12,0,2,48,2,52,9,0,1,33,46,0,20,15,0,20,11,0,1,13,0,20,14,0,52,12,0,2,48,2,5,20,16,0,20,17,0,48,1,17,4,20,18,0,20,11,0,20,14,0,51,19,0,49,3,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"first"},{"t":"s","v":"attr"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"sx-on:"},{"t":"s","v":"slice"},{"t":"n","v":6},{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"str"},{"t":"s","v":"on:"},{"t":"s","v":"event-name"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"sx-parse"},{"t":"s","v":"body"},{"t":"s","v":"dom-on"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,52,1,0,0,48,1,17,1,20,2,0,20,3,0,1,4,0,20,5,0,48,3,5,20,2,0,20,3,0,1,6,0,20,7,0,48,3,5,20,2,0,20,3,0,1,8,0,20,9,0,20,5,0,48,1,48,3,5,51,11,0,20,12,0,52,10,0,2,50],"constants":[{"t":"s","v":"env-extend"},{"t":"s","v":"dict"},{"t":"s","v":"env-bind!"},{"t":"s","v":"handler-env"},{"t":"s","v":"event"},{"t":"s","v":"e"},{"t":"s","v":"this"},{"t":"s","v":"el"},{"t":"s","v":"detail"},{"t":"s","v":"event-detail"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"eval-expr"},{"t":"s","v":"expr"},{"t":"s","v":"handler-env"}]}},{"t":"s","v":"exprs"}]}}]}},{"t":"s","v":"dom-attr-list"},{"t":"s","v":"el"}]}},{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[sx-on\\:]"}]}},{"t":"s","v":"bind-preload-for"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,79,0,20,3,0,1,5,0,52,4,0,2,33,13,0,1,5,0,1,7,0,52,6,0,2,32,7,0,1,8,0,52,6,0,1,17,2,20,3,0,1,5,0,52,4,0,2,33,6,0,1,9,0,32,3,0,1,10,0,17,3,20,11,0,20,1,0,20,12,0,20,13,0,51,14,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"sx-preload"},{"t":"s","v":"preload-attr"},{"t":"s","v":"="},{"t":"s","v":"mousedown"},{"t":"s","v":"list"},{"t":"s","v":"touchstart"},{"t":"s","v":"mouseover"},{"t":"n","v":0},{"t":"n","v":100},{"t":"s","v":"bind-preload"},{"t":"s","v":"events"},{"t":"s","v":"debounce-ms"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,0,20,2,0,33,34,0,20,3,0,20,2,0,1,5,0,52,4,0,2,20,6,0,20,1,0,20,7,0,48,0,20,8,0,48,3,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"get-verb-info"},{"t":"s","v":"el"},{"t":"s","v":"info"},{"t":"s","v":"do-preload"},{"t":"s","v":"get"},{"t":"s","v":"url"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"}]}}]}},{"t":"s","v":"do-preload"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,20,3,0,48,2,52,0,0,1,33,17,0,20,4,0,20,3,0,20,5,0,20,2,0,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"preload-cache-get"},{"t":"s","v":"_preload-cache"},{"t":"s","v":"url"},{"t":"s","v":"fetch-preload"},{"t":"s","v":"headers"}]}},{"t":"s","v":"VERB_SELECTOR"},{"t":"s","v":"str"},{"t":"s","v":"[sx-get],[sx-post],[sx-put],[sx-delete],[sx-patch]"},{"t":"s","v":"process-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,20,3,0,48,2,17,1,51,5,0,20,6,0,52,4,0,2,5,20,7,0,20,1,0,48,1,5,20,8,0,20,1,0,48,1,5,20,9,0,20,1,0,48,1,5,20,10,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"VERB_SELECTOR"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,23,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"verb"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"process-one"}]}},{"t":"s","v":"els"},{"t":"s","v":"process-boosted"},{"t":"s","v":"process-sse"},{"t":"s","v":"bind-inline-handlers"},{"t":"s","v":"process-emit-elements"}]}},{"t":"s","v":"process-one"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,33,45,0,20,4,0,20,1,0,1,5,0,48,2,52,3,0,1,33,23,0,20,6,0,20,1,0,20,2,0,48,2,5,20,7,0,20,1,0,49,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"get-verb-info"},{"t":"s","v":"el"},{"t":"s","v":"verb-info"},{"t":"s","v":"not"},{"t":"s","v":"dom-has-attr?"},{"t":"s","v":"sx-disable"},{"t":"s","v":"bind-triggers"},{"t":"s","v":"bind-preload-for"}]}},{"t":"s","v":"process-emit-elements"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,6,34,6,0,5,20,2,0,48,0,1,3,0,48,2,17,1,51,5,0,20,6,0,52,4,0,2,50],"constants":[{"t":"s","v":"dom-query-all"},{"t":"s","v":"root"},{"t":"s","v":"dom-body"},{"t":"s","v":"[data-sx-emit]"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,1,3,0,48,2,52,0,0,1,33,52,0,20,4,0,20,2,0,1,3,0,48,2,5,20,5,0,20,2,0,1,6,0,48,2,17,1,20,7,0,33,17,0,20,8,0,20,2,0,1,9,0,51,10,0,49,3,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"is-processed?"},{"t":"s","v":"el"},{"t":"s","v":"emit"},{"t":"s","v":"mark-processed!"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"data-sx-emit"},{"t":"s","v":"event-name"},{"t":"s","v":"dom-on"},{"t":"s","v":"click"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,11,0,20,4,0,20,3,0,48,1,32,4,0,52,5,0,0,17,2,20,6,0,20,1,0,20,7,0,20,8,0,49,3,50],"constants":[{"t":"s","v":"dom-get-attr"},{"t":"s","v":"el"},{"t":"s","v":"data-sx-emit-detail"},{"t":"s","v":"detail-json"},{"t":"s","v":"json-parse"},{"t":"s","v":"dict"},{"t":"s","v":"dom-dispatch"},{"t":"s","v":"event-name"},{"t":"s","v":"detail"}]}}]}},{"t":"s","v":"els"}]}},{"t":"s","v":"handle-popstate"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,17,1,20,1,0,1,2,0,48,1,17,2,20,3,0,33,48,0,20,4,0,20,3,0,1,5,0,48,2,17,4,20,6,0,6,33,15,0,5,20,6,0,1,9,0,52,8,0,2,52,7,0,1,33,6,0,20,6,0,32,1,0,2,32,1,0,2,17,3,20,10,0,6,34,4,0,5,1,11,0,17,4,20,1,0,20,10,0,48,1,17,5,20,12,0,20,13,0,48,1,17,6,20,14,0,33,66,0,20,15,0,20,16,0,20,10,0,48,2,33,14,0,20,17,0,1,18,0,20,19,0,49,2,32,35,0,20,20,0,20,14,0,20,21,0,48,0,20,22,0,48,3,17,7,20,23,0,20,14,0,20,13,0,20,24,0,20,19,0,49,4,32,1,0,2,50],"constants":[{"t":"s","v":"browser-location-href"},{"t":"s","v":"dom-query"},{"t":"s","v":"[sx-boost]"},{"t":"s","v":"boost-el"},{"t":"s","v":"dom-get-attr"},{"t":"s","v":"sx-boost"},{"t":"s","v":"attr"},{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"true"},{"t":"s","v":"target-sel"},{"t":"s","v":"#main-panel"},{"t":"s","v":"url-pathname"},{"t":"s","v":"url"},{"t":"s","v":"target"},{"t":"s","v":"try-client-route"},{"t":"s","v":"pathname"},{"t":"s","v":"browser-scroll-to"},{"t":"n","v":0},{"t":"s","v":"scrollY"},{"t":"s","v":"build-request-headers"},{"t":"s","v":"loaded-component-names"},{"t":"s","v":"_css-hash"},{"t":"s","v":"fetch-and-restore"},{"t":"s","v":"headers"}]}},{"t":"s","v":"engine-init"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,48,0,5,20,1,0,2,48,1,5,20,2,0,2,48,1,5,20,3,0,2,49,1,50],"constants":[{"t":"s","v":"init-css-tracking"},{"t":"s","v":"sx-process-scripts"},{"t":"s","v":"sx-hydrate"},{"t":"s","v":"process-elements"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/page-helpers.sxbc.json b/shared/static/wasm/sx/page-helpers.sxbc.json new file mode 100644 index 00000000..beb0b6f9 --- /dev/null +++ b/shared/static/wasm/sx/page-helpers.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"3e5990419731f45c","module":{"arity":0,"bytecode":[1,1,0,1,2,0,1,3,0,1,4,0,1,5,0,1,6,0,1,7,0,1,8,0,1,9,0,1,4,0,1,10,0,1,11,0,1,12,0,1,13,0,1,14,0,1,8,0,1,15,0,1,4,0,1,16,0,1,17,0,1,18,0,1,4,0,1,19,0,1,13,0,1,20,0,1,6,0,1,21,0,1,22,0,1,23,0,1,8,0,1,24,0,1,8,0,1,25,0,1,11,0,1,26,0,1,13,0,1,27,0,1,22,0,1,28,0,1,4,0,1,29,0,1,4,0,1,30,0,1,8,0,1,31,0,1,13,0,1,32,0,1,33,0,1,34,0,1,4,0,1,35,0,1,6,0,1,36,0,1,2,0,1,37,0,1,6,0,1,38,0,1,2,0,1,39,0,1,6,0,1,40,0,1,13,0,1,41,0,1,2,0,1,42,0,1,33,0,1,43,0,1,13,0,1,44,0,1,22,0,65,35,0,128,0,0,5,51,46,0,128,45,0,5,51,48,0,128,47,0,5,51,50,0,128,49,0,5,51,52,0,128,51,0,5,51,54,0,128,53,0,5,51,56,0,128,55,0,5,51,58,0,128,57,0,5,51,60,0,128,59,0,5,51,62,0,128,61,0,5,51,64,0,128,63,0,5,51,66,0,128,65,0,50],"constants":[{"t":"s","v":"special-form-category-map"},{"t":"s","v":"defmacro"},{"t":"s","v":"Functions & Components"},{"t":"s","v":"for-each"},{"t":"s","v":"Higher-Order Forms"},{"t":"s","v":"defpage"},{"t":"s","v":"Domain Definitions"},{"t":"s","v":"let"},{"t":"s","v":"Binding"},{"t":"s","v":"filter"},{"t":"s","v":"shift"},{"t":"s","v":"Continuations"},{"t":"s","v":"and"},{"t":"s","v":"Control Flow"},{"t":"s","v":"set!"},{"t":"s","v":"map-indexed"},{"t":"s","v":"dynamic-wind"},{"t":"s","v":"Guards"},{"t":"s","v":"reduce"},{"t":"s","v":"cond"},{"t":"s","v":"defquery"},{"t":"s","v":"->"},{"t":"s","v":"Sequencing & Threading"},{"t":"s","v":"let*"},{"t":"s","v":"define"},{"t":"s","v":"reset"},{"t":"s","v":"case"},{"t":"s","v":"do"},{"t":"s","v":"map"},{"t":"s","v":"some"},{"t":"s","v":"letrec"},{"t":"s","v":"if"},{"t":"s","v":"quote"},{"t":"s","v":"Quoting"},{"t":"s","v":"every?"},{"t":"s","v":"defhandler"},{"t":"s","v":"fn"},{"t":"s","v":"defstyle"},{"t":"s","v":"lambda"},{"t":"s","v":"defaction"},{"t":"s","v":"or"},{"t":"s","v":"defcomp"},{"t":"s","v":"quasiquote"},{"t":"s","v":"when"},{"t":"s","v":"begin"},{"t":"s","v":"extract-define-kwargs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[65,0,0,17,1,20,1,0,1,2,0,52,0,0,2,17,2,20,4,0,52,3,0,1,17,3,51,6,0,1,8,0,20,9,0,52,7,0,2,52,5,0,2,5,20,10,0,50],"constants":[{"t":"s","v":"slice"},{"t":"s","v":"expr"},{"t":"n","v":2},{"t":"s","v":"len"},{"t":"s","v":"items"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,4,0,52,0,0,2,6,33,22,0,5,20,8,0,20,2,0,52,7,0,2,52,6,0,1,1,9,0,52,5,0,2,33,103,0,20,10,0,20,8,0,20,2,0,52,7,0,2,48,1,17,1,20,8,0,20,2,0,1,3,0,52,1,0,2,52,7,0,2,17,2,20,12,0,20,13,0,20,14,0,52,6,0,1,1,15,0,52,5,0,2,33,30,0,1,17,0,1,19,0,20,21,0,20,14,0,52,20,0,2,52,18,0,2,1,22,0,52,16,0,3,32,7,0,20,14,0,52,16,0,1,52,11,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"+"},{"t":"s","v":"idx"},{"t":"n","v":1},{"t":"s","v":"n"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"nth"},{"t":"s","v":"items"},{"t":"s","v":"keyword"},{"t":"s","v":"keyword-name"},{"t":"s","v":"dict-set!"},{"t":"s","v":"result"},{"t":"s","v":"key"},{"t":"s","v":"val"},{"t":"s","v":"list"},{"t":"s","v":"str"},{"t":"s","v":"("},{"t":"s","v":"join"},{"t":"s","v":" "},{"t":"s","v":"map"},{"t":"s","v":"serialize"},{"t":"s","v":")"}]}},{"t":"s","v":"range"},{"t":"n","v":0},{"t":"s","v":"n"},{"t":"s","v":"result"}]}},{"t":"s","v":"categorize-special-forms"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[65,0,0,17,1,51,1,0,20,2,0,52,0,0,2,5,20,3,0,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,62,0,5,20,2,0,52,5,0,1,1,6,0,52,4,0,2,6,33,43,0,5,20,2,0,52,7,0,1,52,1,0,1,1,8,0,52,0,0,2,6,33,20,0,5,20,9,0,20,2,0,52,7,0,1,48,1,1,10,0,52,0,0,2,33,189,0,20,2,0,1,12,0,52,11,0,2,17,1,20,13,0,20,2,0,48,1,17,2,20,15,0,20,16,0,52,14,0,2,6,34,4,0,5,1,17,0,17,3,20,20,0,20,21,0,52,19,0,2,52,18,0,1,33,17,0,20,20,0,20,21,0,52,3,0,0,52,22,0,3,32,1,0,2,5,20,23,0,20,20,0,20,21,0,52,14,0,2,1,24,0,20,25,0,1,24,0,52,14,0,2,6,34,4,0,5,1,26,0,1,27,0,20,25,0,1,27,0,52,14,0,2,6,34,4,0,5,1,26,0,1,28,0,20,25,0,1,28,0,52,14,0,2,6,34,4,0,5,1,26,0,1,29,0,20,25,0,1,29,0,52,14,0,2,6,34,4,0,5,1,26,0,1,16,0,20,16,0,65,5,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"list"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"define-special-form"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"extract-define-kwargs"},{"t":"s","v":"get"},{"t":"s","v":"special-form-category-map"},{"t":"s","v":"name"},{"t":"s","v":"Other"},{"t":"s","v":"not"},{"t":"s","v":"has-key?"},{"t":"s","v":"categories"},{"t":"s","v":"category"},{"t":"s","v":"dict-set!"},{"t":"s","v":"append!"},{"t":"s","v":"doc"},{"t":"s","v":"kwargs"},{"t":"s","v":""},{"t":"s","v":"example"},{"t":"s","v":"tail-position"},{"t":"s","v":"syntax"}]}},{"t":"s","v":"parsed-exprs"},{"t":"s","v":"categories"}]}},{"t":"s","v":"build-ref-items-with-href"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,98,0,20,4,0,1,5,0,52,3,0,2,17,1,20,4,0,1,6,0,52,3,0,2,17,2,20,4,0,1,7,0,52,3,0,2,17,3,1,8,0,20,9,0,6,33,11,0,5,51,11,0,20,12,0,52,10,0,2,33,13,0,20,14,0,20,15,0,52,13,0,2,32,1,0,2,1,16,0,20,9,0,1,17,0,20,18,0,1,15,0,20,15,0,65,4,0,32,69,0,20,4,0,1,5,0,52,3,0,2,17,1,20,4,0,1,6,0,52,3,0,2,17,2,1,8,0,51,11,0,20,12,0,52,10,0,2,33,13,0,20,14,0,20,15,0,52,13,0,2,32,1,0,2,1,17,0,20,17,0,1,15,0,20,15,0,65,3,0,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"n-fields"},{"t":"n","v":3},{"t":"s","v":"nth"},{"t":"s","v":"item"},{"t":"n","v":0},{"t":"n","v":1},{"t":"n","v":2},{"t":"s","v":"href"},{"t":"s","v":"field3"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"k"},{"t":"s","v":"name"}]}},{"t":"s","v":"detail-keys"},{"t":"s","v":"str"},{"t":"s","v":"base-path"},{"t":"s","v":"name"},{"t":"s","v":"exists"},{"t":"s","v":"desc"},{"t":"s","v":"field2"}]}},{"t":"s","v":"items"}]}},{"t":"s","v":"build-reference-data"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,1,1,0,52,2,0,2,33,88,0,5,1,3,0,20,4,0,20,6,0,1,3,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,1,10,0,20,4,0,20,6,0,1,10,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,1,11,0,20,4,0,20,6,0,1,11,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,65,3,0,32,240,0,6,1,12,0,52,2,0,2,33,61,0,5,1,13,0,20,4,0,20,6,0,1,13,0,52,5,0,2,1,14,0,20,8,0,1,9,0,48,4,1,15,0,20,4,0,20,6,0,1,15,0,52,5,0,2,1,14,0,20,8,0,1,9,0,48,4,65,2,0,32,168,0,6,1,16,0,52,2,0,2,33,34,0,5,1,17,0,20,4,0,20,6,0,1,17,0,52,5,0,2,1,18,0,20,8,0,1,19,0,48,4,65,1,0,32,123,0,6,1,20,0,52,2,0,2,33,27,0,5,1,21,0,51,23,0,20,6,0,1,21,0,52,5,0,2,52,22,0,2,65,1,0,32,85,0,5,1,3,0,20,4,0,20,6,0,1,3,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,1,10,0,20,4,0,20,6,0,1,10,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,1,11,0,20,4,0,20,6,0,1,11,0,52,5,0,2,1,7,0,20,8,0,1,9,0,48,4,65,3,0,50],"constants":[{"t":"s","v":"slug"},{"t":"s","v":"attributes"},{"t":"s","v":"="},{"t":"s","v":"req-attrs"},{"t":"s","v":"build-ref-items-with-href"},{"t":"s","v":"get"},{"t":"s","v":"raw-data"},{"t":"s","v":"/geography/hypermedia/reference/attributes/"},{"t":"s","v":"detail-keys"},{"t":"n","v":3},{"t":"s","v":"beh-attrs"},{"t":"s","v":"uniq-attrs"},{"t":"s","v":"headers"},{"t":"s","v":"req-headers"},{"t":"s","v":"/geography/hypermedia/reference/headers/"},{"t":"s","v":"resp-headers"},{"t":"s","v":"events"},{"t":"s","v":"events-list"},{"t":"s","v":"/geography/hypermedia/reference/events/"},{"t":"n","v":2},{"t":"s","v":"js-api"},{"t":"s","v":"js-api-list"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,2,0,1,3,0,52,1,0,2,1,4,0,20,2,0,1,5,0,52,1,0,2,65,2,0,50],"constants":[{"t":"s","v":"desc"},{"t":"s","v":"nth"},{"t":"s","v":"item"},{"t":"n","v":1},{"t":"s","v":"name"},{"t":"n","v":0}]}}]}},{"t":"s","v":"build-attr-detail"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,10,0,1,2,0,3,65,1,0,32,115,0,1,3,0,20,1,0,1,5,0,52,4,0,2,1,6,0,20,7,0,1,8,0,20,1,0,1,9,0,52,4,0,2,1,2,0,2,1,10,0,20,1,0,1,11,0,52,4,0,2,1,12,0,20,1,0,1,13,0,52,4,0,2,1,14,0,20,1,0,1,5,0,52,15,0,2,33,33,0,1,17,0,20,7,0,1,19,0,1,20,0,52,18,0,3,1,21,0,1,22,0,52,18,0,3,52,16,0,2,32,1,0,2,65,7,0,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"detail"},{"t":"s","v":"attr-not-found"},{"t":"s","v":"attr-handler"},{"t":"s","v":"get"},{"t":"s","v":"handler"},{"t":"s","v":"attr-title"},{"t":"s","v":"slug"},{"t":"s","v":"attr-example"},{"t":"s","v":"example"},{"t":"s","v":"attr-description"},{"t":"s","v":"description"},{"t":"s","v":"attr-demo"},{"t":"s","v":"demo"},{"t":"s","v":"attr-wire-id"},{"t":"s","v":"has-key?"},{"t":"s","v":"str"},{"t":"s","v":"ref-wire-"},{"t":"s","v":"replace"},{"t":"s","v":":"},{"t":"s","v":"-"},{"t":"s","v":"*"},{"t":"s","v":"star"}]}},{"t":"s","v":"build-header-detail"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,10,0,1,2,0,3,65,1,0,32,65,0,1,3,0,20,1,0,1,5,0,52,4,0,2,1,6,0,20,1,0,1,7,0,52,4,0,2,1,2,0,2,1,8,0,20,9,0,1,10,0,20,1,0,1,11,0,52,4,0,2,1,12,0,20,1,0,1,13,0,52,4,0,2,65,6,0,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"detail"},{"t":"s","v":"header-not-found"},{"t":"s","v":"header-description"},{"t":"s","v":"get"},{"t":"s","v":"description"},{"t":"s","v":"header-demo"},{"t":"s","v":"demo"},{"t":"s","v":"header-title"},{"t":"s","v":"slug"},{"t":"s","v":"header-example"},{"t":"s","v":"example"},{"t":"s","v":"header-direction"},{"t":"s","v":"direction"}]}},{"t":"s","v":"build-event-detail"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,10,0,1,2,0,3,65,1,0,32,52,0,1,3,0,20,1,0,1,5,0,52,4,0,2,1,6,0,20,1,0,1,7,0,52,4,0,2,1,8,0,20,1,0,1,9,0,52,4,0,2,1,2,0,2,1,10,0,20,11,0,65,5,0,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"detail"},{"t":"s","v":"event-not-found"},{"t":"s","v":"event-example"},{"t":"s","v":"get"},{"t":"s","v":"example"},{"t":"s","v":"event-demo"},{"t":"s","v":"demo"},{"t":"s","v":"event-description"},{"t":"s","v":"description"},{"t":"s","v":"event-title"},{"t":"s","v":"slug"}]}},{"t":"s","v":"build-component-source"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,1,0,1,3,0,52,0,0,2,17,2,20,1,0,1,4,0,52,0,0,2,17,3,20,1,0,1,5,0,52,0,0,2,17,4,20,1,0,1,6,0,52,0,0,2,17,5,20,1,0,1,7,0,52,0,0,2,17,6,20,9,0,1,10,0,52,8,0,2,33,16,0,1,12,0,20,3,0,1,13,0,52,11,0,3,32,227,0,20,4,0,52,14,0,1,33,26,0,20,5,0,33,13,0,1,16,0,1,17,0,52,15,0,2,32,4,0,52,15,0,0,32,43,0,20,5,0,33,27,0,1,20,0,20,4,0,52,19,0,2,1,16,0,1,17,0,52,15,0,2,52,18,0,2,32,10,0,1,20,0,20,4,0,52,19,0,2,17,7,1,21,0,1,23,0,20,24,0,52,22,0,2,1,25,0,52,11,0,3,17,8,20,9,0,1,26,0,52,8,0,2,33,6,0,1,27,0,32,3,0,1,28,0,17,9,20,9,0,1,29,0,52,8,0,2,6,33,31,0,5,20,7,0,52,31,0,1,52,30,0,1,6,33,15,0,5,20,7,0,1,32,0,52,8,0,2,52,30,0,1,33,13,0,1,33,0,20,7,0,52,11,0,2,32,3,0,1,34,0,17,10,1,21,0,20,35,0,1,23,0,20,3,0,1,23,0,20,36,0,20,37,0,1,38,0,20,6,0,1,25,0,52,11,0,10,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"comp-data"},{"t":"s","v":"type"},{"t":"s","v":"name"},{"t":"s","v":"params"},{"t":"s","v":"has-children"},{"t":"s","v":"body-sx"},{"t":"s","v":"affinity"},{"t":"s","v":"="},{"t":"s","v":"comp-type"},{"t":"s","v":"not-found"},{"t":"s","v":"str"},{"t":"s","v":";; component "},{"t":"s","v":" not found"},{"t":"s","v":"empty?"},{"t":"s","v":"list"},{"t":"s","v":"&rest"},{"t":"s","v":"children"},{"t":"s","v":"append"},{"t":"s","v":"cons"},{"t":"s","v":"&key"},{"t":"s","v":"("},{"t":"s","v":"join"},{"t":"s","v":" "},{"t":"s","v":"param-strs"},{"t":"s","v":")"},{"t":"s","v":"island"},{"t":"s","v":"defisland"},{"t":"s","v":"defcomp"},{"t":"s","v":"component"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"auto"},{"t":"s","v":" :affinity "},{"t":"s","v":""},{"t":"s","v":"form-name"},{"t":"s","v":"params-sx"},{"t":"s","v":"affinity-str"},{"t":"s","v":"\n "}]}},{"t":"s","v":"build-bundle-analysis"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,6,51,2,0,20,3,0,52,1,0,2,5,1,4,0,20,4,0,1,5,0,20,6,0,1,7,0,20,7,0,1,8,0,20,8,0,1,9,0,20,9,0,65,5,0,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,2,0,52,3,0,1,17,2,20,5,0,1,6,0,52,4,0,2,33,24,0,20,10,0,20,5,0,52,9,0,2,1,11,0,52,8,0,2,52,7,0,1,32,3,0,1,6,0,17,3,1,11,0,20,13,0,52,12,0,2,17,4,1,6,0,17,5,1,6,0,17,6,52,14,0,0,17,7,52,14,0,0,17,8,51,16,0,20,2,0,52,15,0,2,5,20,17,0,20,18,0,1,19,0,20,19,0,1,20,0,20,21,0,52,3,0,1,1,22,0,20,1,0,1,22,0,52,0,0,2,1,23,0,20,10,0,1,24,0,20,24,0,1,25,0,20,26,0,1,27,0,20,27,0,1,13,0,20,13,0,1,28,0,20,1,0,1,28,0,52,0,0,2,1,29,0,20,1,0,1,29,0,52,0,0,2,65,10,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"page"},{"t":"s","v":"needed-names"},{"t":"s","v":"len"},{"t":"s","v":">"},{"t":"s","v":"total-components"},{"t":"n","v":0},{"t":"s","v":"round"},{"t":"s","v":"*"},{"t":"s","v":"/"},{"t":"s","v":"n"},{"t":"n","v":100},{"t":"s","v":"-"},{"t":"s","v":"pct"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,5,0,52,4,0,1,52,3,0,1,33,186,0,20,5,0,1,6,0,52,0,0,2,33,16,0,20,8,0,1,9,0,52,7,0,2,21,8,0,32,40,0,20,10,0,1,9,0,52,7,0,2,21,10,0,5,51,12,0,20,5,0,1,13,0,52,0,0,2,6,34,5,0,5,52,14,0,0,52,11,0,2,5,20,15,0,20,16,0,1,13,0,20,5,0,1,13,0,52,0,0,2,6,34,5,0,5,52,14,0,0,1,17,0,20,5,0,1,17,0,52,0,0,2,1,18,0,20,5,0,1,18,0,52,0,0,2,6,34,5,0,5,52,14,0,0,1,19,0,20,5,0,1,19,0,52,0,0,2,1,20,0,20,2,0,1,6,0,20,5,0,1,6,0,52,0,0,2,1,21,0,20,5,0,1,21,0,52,0,0,2,65,7,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"components-raw"},{"t":"s","v":"comp-name"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"info"},{"t":"s","v":"is-pure"},{"t":"s","v":"+"},{"t":"s","v":"pure-in-page"},{"t":"n","v":1},{"t":"s","v":"io-in-page"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,2,0,20,3,0,52,1,0,2,52,0,0,1,33,14,0,20,4,0,20,3,0,20,5,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"r"},{"t":"s","v":"ref"}]}},{"t":"s","v":"page-io-refs"},{"t":"s","v":"append!"},{"t":"s","v":"ref"}]}},{"t":"s","v":"io-refs"},{"t":"s","v":"list"},{"t":"s","v":"append!"},{"t":"s","v":"comp-details"},{"t":"s","v":"render-target"},{"t":"s","v":"deps"},{"t":"s","v":"source"},{"t":"s","v":"name"},{"t":"s","v":"affinity"}]}},{"t":"s","v":"append!"},{"t":"s","v":"pages-data"},{"t":"s","v":"pure-in-page"},{"t":"s","v":"io-refs"},{"t":"s","v":"page-io-refs"},{"t":"s","v":"direct"},{"t":"s","v":"needed"},{"t":"s","v":"io-in-page"},{"t":"s","v":"components"},{"t":"s","v":"comp-details"},{"t":"s","v":"savings"},{"t":"s","v":"path"},{"t":"s","v":"name"}]}},{"t":"s","v":"pages-raw"},{"t":"s","v":"total-macros"},{"t":"s","v":"pages"},{"t":"s","v":"pages-data"},{"t":"s","v":"io-count"},{"t":"s","v":"pure-count"},{"t":"s","v":"total-components"}]}},{"t":"s","v":"build-routing-analysis"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,1,1,1,0,17,2,1,1,0,17,3,51,3,0,20,4,0,52,2,0,2,5,1,5,0,20,6,0,1,7,0,20,9,0,20,10,0,52,8,0,2,1,10,0,20,10,0,1,9,0,20,9,0,65,4,0,50],"constants":[{"t":"s","v":"list"},{"t":"n","v":0},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,1,0,1,3,0,52,0,0,2,6,34,4,0,5,1,4,0,17,2,2,17,3,1,4,0,17,4,20,2,0,33,30,0,1,5,0,21,6,0,5,1,7,0,21,8,0,5,20,10,0,1,11,0,52,9,0,2,21,10,0,32,60,0,20,3,0,52,12,0,1,33,30,0,1,5,0,21,6,0,5,1,13,0,21,8,0,5,20,10,0,1,11,0,52,9,0,2,21,10,0,32,20,0,1,14,0,21,6,0,5,20,15,0,1,11,0,52,9,0,2,21,15,0,5,20,16,0,20,17,0,1,8,0,20,8,0,1,6,0,20,6,0,1,18,0,20,3,0,52,20,0,1,1,21,0,52,19,0,2,33,23,0,20,3,0,1,24,0,1,21,0,52,23,0,3,1,25,0,52,22,0,2,32,3,0,20,3,0,1,2,0,20,2,0,1,26,0,20,1,0,1,26,0,52,0,0,2,1,27,0,20,1,0,1,27,0,52,0,0,2,65,6,0,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"page"},{"t":"s","v":"has-data"},{"t":"s","v":"content-src"},{"t":"s","v":""},{"t":"s","v":"server"},{"t":"s","v":"mode"},{"t":"s","v":"Has :data expression — needs server IO"},{"t":"s","v":"reason"},{"t":"s","v":"+"},{"t":"s","v":"server-count"},{"t":"n","v":1},{"t":"s","v":"empty?"},{"t":"s","v":"No content expression"},{"t":"s","v":"client"},{"t":"s","v":"client-count"},{"t":"s","v":"append!"},{"t":"s","v":"pages-data"},{"t":"s","v":"content-expr"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":80},{"t":"s","v":"str"},{"t":"s","v":"slice"},{"t":"n","v":0},{"t":"s","v":"..."},{"t":"s","v":"path"},{"t":"s","v":"name"}]}},{"t":"s","v":"pages-raw"},{"t":"s","v":"pages"},{"t":"s","v":"pages-data"},{"t":"s","v":"total-pages"},{"t":"s","v":"+"},{"t":"s","v":"client-count"},{"t":"s","v":"server-count"}]}},{"t":"s","v":"build-affinity-analysis"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,1,0,1,2,0,20,2,0,65,2,0,50],"constants":[{"t":"s","v":"components"},{"t":"s","v":"demo-components"},{"t":"s","v":"page-plans"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/render.sxbc.json b/shared/static/wasm/sx/render.sxbc.json new file mode 100644 index 00000000..63feacc2 --- /dev/null +++ b/shared/static/wasm/sx/render.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"0b4fa8c19a99ca17","module":{"arity":0,"bytecode":[1,2,0,1,3,0,1,4,0,1,5,0,1,6,0,1,7,0,1,8,0,1,9,0,1,10,0,1,11,0,1,12,0,1,13,0,1,14,0,1,15,0,1,16,0,1,17,0,1,18,0,1,19,0,1,20,0,1,21,0,1,22,0,1,23,0,1,24,0,1,25,0,1,26,0,1,27,0,1,28,0,1,29,0,1,30,0,1,31,0,1,32,0,1,33,0,1,34,0,1,35,0,1,36,0,1,37,0,1,38,0,1,39,0,1,40,0,1,41,0,1,42,0,1,43,0,1,44,0,1,45,0,1,46,0,1,47,0,1,48,0,1,49,0,1,50,0,1,51,0,1,52,0,1,53,0,1,54,0,1,55,0,1,56,0,1,57,0,1,58,0,1,59,0,1,60,0,1,61,0,1,62,0,1,63,0,1,64,0,1,65,0,1,66,0,1,67,0,1,68,0,1,69,0,1,70,0,1,71,0,1,72,0,1,73,0,1,74,0,1,75,0,1,76,0,1,77,0,1,78,0,1,79,0,1,80,0,1,81,0,1,82,0,1,83,0,1,84,0,1,85,0,1,86,0,1,87,0,1,88,0,1,89,0,1,90,0,1,91,0,1,92,0,1,93,0,1,94,0,1,95,0,1,96,0,1,97,0,1,98,0,1,99,0,1,100,0,1,101,0,1,102,0,1,103,0,1,104,0,1,105,0,1,106,0,1,107,0,1,108,0,1,109,0,1,110,0,1,111,0,1,112,0,1,113,0,1,114,0,1,115,0,1,116,0,1,117,0,1,118,0,1,119,0,1,120,0,1,121,0,1,122,0,1,123,0,1,124,0,1,125,0,1,126,0,1,127,0,1,128,0,1,129,0,1,130,0,1,131,0,1,132,0,1,133,0,1,134,0,1,135,0,1,136,0,1,137,0,1,138,0,1,139,0,1,140,0,52,1,0,139,128,0,0,5,1,142,0,1,143,0,1,53,0,1,71,0,1,144,0,1,55,0,1,84,0,1,73,0,1,7,0,1,6,0,1,145,0,1,87,0,1,146,0,1,54,0,52,1,0,14,128,141,0,5,1,148,0,1,149,0,1,150,0,1,151,0,1,152,0,1,153,0,1,154,0,1,155,0,1,156,0,1,157,0,1,158,0,1,159,0,1,160,0,1,161,0,1,162,0,1,163,0,1,164,0,1,165,0,1,166,0,1,167,0,1,168,0,1,169,0,1,170,0,52,1,0,23,128,147,0,5,52,1,0,0,128,171,0,5,51,173,0,128,172,0,5,51,175,0,128,174,0,5,51,177,0,128,176,0,5,51,179,0,128,178,0,5,51,181,0,128,180,0,5,51,183,0,128,182,0,5,51,185,0,128,184,0,5,51,187,0,128,186,0,5,51,189,0,128,188,0,5,51,191,0,128,190,0,5,51,193,0,128,192,0,50],"constants":[{"t":"s","v":"HTML_TAGS"},{"t":"s","v":"list"},{"t":"s","v":"html"},{"t":"s","v":"head"},{"t":"s","v":"body"},{"t":"s","v":"title"},{"t":"s","v":"meta"},{"t":"s","v":"link"},{"t":"s","v":"script"},{"t":"s","v":"style"},{"t":"s","v":"noscript"},{"t":"s","v":"header"},{"t":"s","v":"nav"},{"t":"s","v":"main"},{"t":"s","v":"section"},{"t":"s","v":"article"},{"t":"s","v":"aside"},{"t":"s","v":"footer"},{"t":"s","v":"h1"},{"t":"s","v":"h2"},{"t":"s","v":"h3"},{"t":"s","v":"h4"},{"t":"s","v":"h5"},{"t":"s","v":"h6"},{"t":"s","v":"hgroup"},{"t":"s","v":"div"},{"t":"s","v":"p"},{"t":"s","v":"blockquote"},{"t":"s","v":"pre"},{"t":"s","v":"figure"},{"t":"s","v":"figcaption"},{"t":"s","v":"address"},{"t":"s","v":"details"},{"t":"s","v":"summary"},{"t":"s","v":"a"},{"t":"s","v":"span"},{"t":"s","v":"em"},{"t":"s","v":"strong"},{"t":"s","v":"small"},{"t":"s","v":"b"},{"t":"s","v":"i"},{"t":"s","v":"u"},{"t":"s","v":"s"},{"t":"s","v":"mark"},{"t":"s","v":"sub"},{"t":"s","v":"sup"},{"t":"s","v":"abbr"},{"t":"s","v":"cite"},{"t":"s","v":"code"},{"t":"s","v":"kbd"},{"t":"s","v":"samp"},{"t":"s","v":"var"},{"t":"s","v":"time"},{"t":"s","v":"br"},{"t":"s","v":"wbr"},{"t":"s","v":"hr"},{"t":"s","v":"ul"},{"t":"s","v":"ol"},{"t":"s","v":"li"},{"t":"s","v":"dl"},{"t":"s","v":"dt"},{"t":"s","v":"dd"},{"t":"s","v":"table"},{"t":"s","v":"thead"},{"t":"s","v":"tbody"},{"t":"s","v":"tfoot"},{"t":"s","v":"tr"},{"t":"s","v":"th"},{"t":"s","v":"td"},{"t":"s","v":"caption"},{"t":"s","v":"colgroup"},{"t":"s","v":"col"},{"t":"s","v":"form"},{"t":"s","v":"input"},{"t":"s","v":"textarea"},{"t":"s","v":"select"},{"t":"s","v":"option"},{"t":"s","v":"optgroup"},{"t":"s","v":"button"},{"t":"s","v":"label"},{"t":"s","v":"fieldset"},{"t":"s","v":"legend"},{"t":"s","v":"output"},{"t":"s","v":"datalist"},{"t":"s","v":"img"},{"t":"s","v":"video"},{"t":"s","v":"audio"},{"t":"s","v":"source"},{"t":"s","v":"picture"},{"t":"s","v":"canvas"},{"t":"s","v":"iframe"},{"t":"s","v":"svg"},{"t":"s","v":"math"},{"t":"s","v":"path"},{"t":"s","v":"circle"},{"t":"s","v":"ellipse"},{"t":"s","v":"rect"},{"t":"s","v":"line"},{"t":"s","v":"polyline"},{"t":"s","v":"polygon"},{"t":"s","v":"text"},{"t":"s","v":"tspan"},{"t":"s","v":"g"},{"t":"s","v":"defs"},{"t":"s","v":"use"},{"t":"s","v":"clipPath"},{"t":"s","v":"mask"},{"t":"s","v":"pattern"},{"t":"s","v":"linearGradient"},{"t":"s","v":"radialGradient"},{"t":"s","v":"stop"},{"t":"s","v":"filter"},{"t":"s","v":"feGaussianBlur"},{"t":"s","v":"feOffset"},{"t":"s","v":"feBlend"},{"t":"s","v":"feColorMatrix"},{"t":"s","v":"feComposite"},{"t":"s","v":"feMerge"},{"t":"s","v":"feMergeNode"},{"t":"s","v":"feTurbulence"},{"t":"s","v":"feComponentTransfer"},{"t":"s","v":"feFuncR"},{"t":"s","v":"feFuncG"},{"t":"s","v":"feFuncB"},{"t":"s","v":"feFuncA"},{"t":"s","v":"feDisplacementMap"},{"t":"s","v":"feFlood"},{"t":"s","v":"feImage"},{"t":"s","v":"feMorphology"},{"t":"s","v":"feSpecularLighting"},{"t":"s","v":"feDiffuseLighting"},{"t":"s","v":"fePointLight"},{"t":"s","v":"feSpotLight"},{"t":"s","v":"feDistantLight"},{"t":"s","v":"animate"},{"t":"s","v":"animateTransform"},{"t":"s","v":"foreignObject"},{"t":"s","v":"template"},{"t":"s","v":"slot"},{"t":"s","v":"dialog"},{"t":"s","v":"menu"},{"t":"s","v":"VOID_ELEMENTS"},{"t":"s","v":"area"},{"t":"s","v":"base"},{"t":"s","v":"embed"},{"t":"s","v":"param"},{"t":"s","v":"track"},{"t":"s","v":"BOOLEAN_ATTRS"},{"t":"s","v":"async"},{"t":"s","v":"autofocus"},{"t":"s","v":"autoplay"},{"t":"s","v":"checked"},{"t":"s","v":"controls"},{"t":"s","v":"default"},{"t":"s","v":"defer"},{"t":"s","v":"disabled"},{"t":"s","v":"formnovalidate"},{"t":"s","v":"hidden"},{"t":"s","v":"inert"},{"t":"s","v":"ismap"},{"t":"s","v":"loop"},{"t":"s","v":"multiple"},{"t":"s","v":"muted"},{"t":"s","v":"nomodule"},{"t":"s","v":"novalidate"},{"t":"s","v":"open"},{"t":"s","v":"playsinline"},{"t":"s","v":"readonly"},{"t":"s","v":"required"},{"t":"s","v":"reversed"},{"t":"s","v":"selected"},{"t":"s","v":"*definition-form-extensions*"},{"t":"s","v":"definition-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,34,101,0,5,20,1,0,1,3,0,52,0,0,2,6,34,86,0,5,20,1,0,1,4,0,52,0,0,2,6,34,71,0,5,20,1,0,1,5,0,52,0,0,2,6,34,56,0,5,20,1,0,1,6,0,52,0,0,2,6,34,41,0,5,20,1,0,1,7,0,52,0,0,2,6,34,26,0,5,20,1,0,1,8,0,52,0,0,2,6,34,11,0,5,20,10,0,20,1,0,52,9,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"name"},{"t":"s","v":"define"},{"t":"s","v":"defcomp"},{"t":"s","v":"defisland"},{"t":"s","v":"defmacro"},{"t":"s","v":"defstyle"},{"t":"s","v":"deftype"},{"t":"s","v":"defeffect"},{"t":"s","v":"contains?"},{"t":"s","v":"*definition-form-extensions*"}]}},{"t":"s","v":"parse-element-args"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,52,1,0,0,17,3,51,3,0,1,4,0,1,5,0,1,6,0,4,52,0,0,4,20,7,0,52,2,0,3,5,20,8,0,20,9,0,52,1,0,2,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"list"},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,2,0,33,31,0,20,1,0,1,2,0,4,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,169,0,20,8,0,52,7,0,1,1,9,0,52,6,0,2,6,33,26,0,5,20,1,0,1,4,0,52,0,0,2,52,5,0,1,20,12,0,52,11,0,1,52,10,0,2,33,86,0,20,13,0,20,14,0,20,12,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,15,0,2,20,16,0,48,2,48,1,17,3,20,18,0,20,19,0,20,8,0,48,1,20,20,0,52,17,0,3,5,20,1,0,1,2,0,3,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,5,32,36,0,20,21,0,20,22,0,20,8,0,48,2,5,20,1,0,1,4,0,20,1,0,1,4,0,52,0,0,2,52,5,0,1,52,3,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"state"},{"t":"s","v":"skip"},{"t":"s","v":"assoc"},{"t":"s","v":"i"},{"t":"s","v":"inc"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"arg"},{"t":"s","v":"keyword"},{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"args"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"s","v":"env"},{"t":"s","v":"dict-set!"},{"t":"s","v":"attrs"},{"t":"s","v":"keyword-name"},{"t":"s","v":"val"},{"t":"s","v":"append!"},{"t":"s","v":"children"}]}},{"t":"s","v":"i"},{"t":"n","v":0},{"t":"s","v":"skip"},{"t":"s","v":"args"},{"t":"s","v":"attrs"},{"t":"s","v":"children"}]}},{"t":"s","v":"render-attrs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,51,3,0,20,5,0,52,4,0,1,52,2,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"join"},{"t":"s","v":""},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,4,0,20,2,0,52,3,0,2,6,33,4,0,5,20,5,0,33,13,0,1,7,0,20,2,0,52,6,0,2,32,75,0,20,4,0,20,2,0,52,3,0,2,6,33,8,0,5,20,5,0,52,8,0,1,33,6,0,1,9,0,32,44,0,20,5,0,52,10,0,1,33,6,0,1,9,0,32,28,0,1,7,0,20,2,0,1,11,0,20,12,0,20,5,0,52,6,0,1,48,1,1,13,0,52,6,0,5,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"attrs"},{"t":"s","v":"key"},{"t":"s","v":"contains?"},{"t":"s","v":"BOOLEAN_ATTRS"},{"t":"s","v":"val"},{"t":"s","v":"str"},{"t":"s","v":" "},{"t":"s","v":"not"},{"t":"s","v":""},{"t":"s","v":"nil?"},{"t":"s","v":"=\""},{"t":"s","v":"escape-attr"},{"t":"s","v":"\""}]}},{"t":"s","v":"keys"},{"t":"s","v":"attrs"}]}},{"t":"s","v":"eval-cond"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,14,0,20,2,0,20,1,0,20,3,0,49,2,32,11,0,20,4,0,20,1,0,20,3,0,49,2,50],"constants":[{"t":"s","v":"cond-scheme?"},{"t":"s","v":"clauses"},{"t":"s","v":"eval-cond-scheme"},{"t":"s","v":"env"},{"t":"s","v":"eval-cond-clojure"}]}},{"t":"s","v":"eval-cond-scheme"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,86,0,20,1,0,52,2,0,1,17,2,20,3,0,52,2,0,1,17,3,20,3,0,1,5,0,52,4,0,2,17,4,20,7,0,52,6,0,1,33,6,0,20,8,0,32,40,0,20,9,0,20,10,0,20,7,0,20,11,0,48,2,48,1,33,6,0,20,8,0,32,15,0,20,12,0,20,1,0,52,13,0,1,20,11,0,49,2,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"clauses"},{"t":"s","v":"first"},{"t":"s","v":"clause"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"is-else-clause?"},{"t":"s","v":"test"},{"t":"s","v":"body"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"env"},{"t":"s","v":"eval-cond-scheme"},{"t":"s","v":"rest"}]}},{"t":"s","v":"eval-cond-clojure"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,33,4,0,2,32,80,0,20,2,0,52,4,0,1,17,2,20,2,0,1,6,0,52,5,0,2,17,3,20,8,0,52,7,0,1,33,6,0,20,9,0,32,43,0,20,10,0,20,11,0,20,8,0,20,12,0,48,2,48,1,33,6,0,20,9,0,32,18,0,20,13,0,20,2,0,1,3,0,52,14,0,2,20,12,0,49,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"len"},{"t":"s","v":"clauses"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"is-else-clause?"},{"t":"s","v":"test"},{"t":"s","v":"body"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"env"},{"t":"s","v":"eval-cond-clojure"},{"t":"s","v":"slice"}]}},{"t":"s","v":"process-bindings"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,51,3,0,20,4,0,52,2,0,2,5,20,5,0,50],"constants":[{"t":"s","v":"env-extend"},{"t":"s","v":"env"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,1,3,0,52,0,0,2,6,33,15,0,5,20,2,0,52,5,0,1,1,6,0,52,4,0,2,33,86,0,20,2,0,52,7,0,1,52,1,0,1,1,8,0,52,0,0,2,33,15,0,20,9,0,20,2,0,52,7,0,1,48,1,32,11,0,20,2,0,52,7,0,1,52,10,0,1,17,1,20,11,0,20,12,0,20,13,0,20,14,0,20,15,0,20,2,0,1,17,0,52,16,0,2,20,12,0,48,2,48,1,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"pair"},{"t":"s","v":"list"},{"t":"s","v":">="},{"t":"s","v":"len"},{"t":"n","v":2},{"t":"s","v":"first"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"str"},{"t":"s","v":"env-bind!"},{"t":"s","v":"local"},{"t":"s","v":"name"},{"t":"s","v":"trampoline"},{"t":"s","v":"eval-expr"},{"t":"s","v":"nth"},{"t":"n","v":1}]}},{"t":"s","v":"bindings"},{"t":"s","v":"local"}]}},{"t":"s","v":"is-render-expr?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,1,4,0,52,1,0,2,52,0,0,1,6,34,8,0,5,20,3,0,52,5,0,1,33,4,0,4,32,181,0,20,3,0,52,6,0,1,17,1,20,7,0,52,2,0,1,1,8,0,52,1,0,2,52,0,0,1,33,4,0,4,32,147,0,20,9,0,20,7,0,48,1,17,2,20,10,0,1,11,0,52,1,0,2,6,34,123,0,5,20,10,0,1,12,0,52,1,0,2,6,34,108,0,5,20,10,0,1,14,0,52,13,0,2,6,34,93,0,5,20,10,0,1,15,0,52,13,0,2,6,34,78,0,5,20,17,0,20,10,0,52,16,0,2,6,34,63,0,5,20,10,0,1,20,0,52,19,0,2,1,21,0,52,18,0,2,6,33,41,0,5,20,3,0,52,22,0,1,1,23,0,52,18,0,2,6,33,22,0,5,20,3,0,1,23,0,52,24,0,2,52,2,0,1,1,25,0,52,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"expr"},{"t":"s","v":"list"},{"t":"s","v":"empty?"},{"t":"s","v":"first"},{"t":"s","v":"h"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"n"},{"t":"s","v":"<>"},{"t":"s","v":"raw!"},{"t":"s","v":"starts-with?"},{"t":"s","v":"~"},{"t":"s","v":"html:"},{"t":"s","v":"contains?"},{"t":"s","v":"HTML_TAGS"},{"t":"s","v":">"},{"t":"s","v":"index-of"},{"t":"s","v":"-"},{"t":"n","v":0},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"nth"},{"t":"s","v":"keyword"}]}},{"t":"s","v":"merge-spread-attrs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,3,0,52,2,0,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,1,20,2,0,1,4,0,52,3,0,2,33,69,0,20,5,0,1,4,0,52,0,0,2,17,2,20,5,0,1,4,0,20,7,0,6,33,15,0,5,20,7,0,1,9,0,52,3,0,2,52,8,0,1,33,16,0,20,7,0,1,11,0,20,12,0,52,10,0,3,32,3,0,20,12,0,52,6,0,3,32,95,0,20,2,0,1,13,0,52,3,0,2,33,69,0,20,5,0,1,13,0,52,0,0,2,17,2,20,5,0,1,13,0,20,7,0,6,33,15,0,5,20,7,0,1,9,0,52,3,0,2,52,8,0,1,33,16,0,20,7,0,1,14,0,20,12,0,52,10,0,3,32,3,0,20,12,0,52,6,0,3,32,13,0,20,5,0,20,2,0,20,12,0,52,6,0,3,50],"constants":[{"t":"s","v":"dict-get"},{"t":"s","v":"spread-dict"},{"t":"s","v":"key"},{"t":"s","v":"="},{"t":"s","v":"class"},{"t":"s","v":"target"},{"t":"s","v":"dict-set!"},{"t":"s","v":"existing"},{"t":"s","v":"not"},{"t":"s","v":""},{"t":"s","v":"str"},{"t":"s","v":" "},{"t":"s","v":"val"},{"t":"s","v":"style"},{"t":"s","v":";"}]}},{"t":"s","v":"keys"},{"t":"s","v":"spread-dict"}]}},{"t":"s","v":"escape-html"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,17,1,20,3,0,1,4,0,1,5,0,52,2,0,3,21,3,0,5,20,3,0,1,6,0,1,7,0,52,2,0,3,21,3,0,5,20,3,0,1,8,0,1,9,0,52,2,0,3,21,3,0,5,20,3,0,1,10,0,1,11,0,52,2,0,3,21,3,0,5,20,3,0,50],"constants":[{"t":"s","v":"str"},{"t":"s","v":"s"},{"t":"s","v":"replace"},{"t":"s","v":"r"},{"t":"s","v":"&"},{"t":"s","v":"&"},{"t":"s","v":"<"},{"t":"s","v":"<"},{"t":"s","v":">"},{"t":"s","v":">"},{"t":"s","v":"\""},{"t":"s","v":"""}]}},{"t":"s","v":"escape-attr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,49,1,50],"constants":[{"t":"s","v":"escape-html"},{"t":"s","v":"s"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/router.sxbc.json b/shared/static/wasm/sx/router.sxbc.json new file mode 100644 index 00000000..dc36a968 --- /dev/null +++ b/shared/static/wasm/sx/router.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"217d92f468e78b1a","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,5,51,65,0,128,64,0,5,51,67,0,128,66,0,5,51,69,0,128,68,0,5,51,71,0,128,70,0,50],"constants":[{"t":"s","v":"split-path-segments"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,13,0,20,1,0,1,4,0,52,3,0,2,32,3,0,20,1,0,17,1,20,7,0,52,6,0,1,52,5,0,1,6,33,11,0,5,20,7,0,1,2,0,52,8,0,2,33,27,0,20,7,0,1,9,0,20,7,0,52,11,0,1,1,4,0,52,10,0,2,52,3,0,3,32,3,0,20,7,0,17,2,20,12,0,52,6,0,1,33,7,0,52,13,0,0,32,10,0,20,12,0,1,2,0,52,14,0,2,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"path"},{"t":"s","v":"/"},{"t":"s","v":"slice"},{"t":"n","v":1},{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"trimmed"},{"t":"s","v":"ends-with?"},{"t":"n","v":0},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"s","v":"trimmed2"},{"t":"s","v":"list"},{"t":"s","v":"split"}]}},{"t":"s","v":"make-route-segment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,33,11,0,5,20,1,0,1,4,0,52,3,0,2,33,65,0,20,1,0,1,6,0,20,1,0,52,8,0,1,1,6,0,52,7,0,2,52,5,0,3,17,1,65,0,0,17,2,20,10,0,1,11,0,1,12,0,52,9,0,3,5,20,10,0,1,13,0,20,14,0,52,9,0,3,5,20,10,0,32,36,0,65,0,0,17,1,20,10,0,1,11,0,1,15,0,52,9,0,3,5,20,10,0,1,13,0,20,1,0,52,9,0,3,5,20,10,0,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"seg"},{"t":"s","v":"<"},{"t":"s","v":"ends-with?"},{"t":"s","v":">"},{"t":"s","v":"slice"},{"t":"n","v":1},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"s","v":"dict-set!"},{"t":"s","v":"d"},{"t":"s","v":"type"},{"t":"s","v":"param"},{"t":"s","v":"value"},{"t":"s","v":"param-name"},{"t":"s","v":"literal"}]}},{"t":"s","v":"parse-route-pattern"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,3,0,20,4,0,52,2,0,2,50],"constants":[{"t":"s","v":"split-path-segments"},{"t":"s","v":"pattern"},{"t":"s","v":"map"},{"t":"s","v":"make-route-segment"},{"t":"s","v":"segments"}]}},{"t":"s","v":"match-route-segments"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,52,2,0,1,20,4,0,52,2,0,1,52,1,0,2,52,0,0,1,33,4,0,2,32,32,0,65,0,0,17,2,3,17,3,51,6,0,20,4,0,52,5,0,2,5,20,7,0,33,6,0,20,8,0,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"="},{"t":"s","v":"len"},{"t":"s","v":"path-segs"},{"t":"s","v":"parsed-segs"},{"t":"s","v":"for-each-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,33,115,0,20,2,0,20,3,0,52,1,0,2,17,2,20,5,0,1,6,0,52,4,0,2,17,3,20,8,0,1,9,0,52,7,0,2,33,35,0,20,11,0,20,5,0,1,12,0,52,4,0,2,52,7,0,2,52,10,0,1,33,7,0,4,21,0,0,32,1,0,2,32,40,0,20,8,0,1,13,0,52,7,0,2,33,23,0,20,15,0,20,5,0,1,12,0,52,4,0,2,20,11,0,52,14,0,3,32,4,0,4,21,0,0,32,1,0,2,50],"constants":[{"t":"s","v":"matched"},{"t":"s","v":"nth"},{"t":"s","v":"path-segs"},{"t":"s","v":"i"},{"t":"s","v":"get"},{"t":"s","v":"parsed-seg"},{"t":"s","v":"type"},{"t":"s","v":"="},{"t":"s","v":"seg-type"},{"t":"s","v":"literal"},{"t":"s","v":"not"},{"t":"s","v":"path-seg"},{"t":"s","v":"value"},{"t":"s","v":"param"},{"t":"s","v":"dict-set!"},{"t":"s","v":"params"}]}},{"t":"s","v":"matched"},{"t":"s","v":"params"}]}},{"t":"s","v":"match-route"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,2,0,20,3,0,48,1,17,3,20,4,0,20,5,0,20,6,0,49,2,50],"constants":[{"t":"s","v":"split-path-segments"},{"t":"s","v":"path"},{"t":"s","v":"parse-route-pattern"},{"t":"s","v":"pattern"},{"t":"s","v":"match-route-segments"},{"t":"s","v":"path-segs"},{"t":"s","v":"parsed-segs"}]}},{"t":"s","v":"find-matching-route"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,19,0,20,3,0,20,1,0,48,1,6,34,4,0,5,20,1,0,32,3,0,20,1,0,17,2,20,4,0,20,5,0,48,1,17,3,2,17,4,51,7,0,20,8,0,52,6,0,2,5,20,9,0,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"path"},{"t":"s","v":"/("},{"t":"s","v":"sx-url-to-path"},{"t":"s","v":"split-path-segments"},{"t":"s","v":"match-path"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,73,0,20,2,0,20,3,0,20,5,0,1,6,0,52,4,0,2,48,2,17,1,20,8,0,52,0,0,1,52,7,0,1,33,35,0,20,5,0,65,0,0,52,9,0,2,17,2,20,11,0,1,8,0,20,8,0,52,10,0,3,5,20,11,0,21,1,0,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"result"},{"t":"s","v":"match-route-segments"},{"t":"s","v":"path-segs"},{"t":"s","v":"get"},{"t":"s","v":"route"},{"t":"s","v":"parsed"},{"t":"s","v":"not"},{"t":"s","v":"params"},{"t":"s","v":"merge"},{"t":"s","v":"dict-set!"},{"t":"s","v":"matched"}]}},{"t":"s","v":"routes"},{"t":"s","v":"result"}]}},{"t":"s","v":"_fn-to-segment"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,6,1,1,0,52,2,0,2,33,7,0,5,1,3,0,32,148,0,6,1,4,0,52,2,0,2,33,7,0,5,1,5,0,32,130,0,6,1,6,0,52,2,0,2,33,7,0,5,1,7,0,32,112,0,6,1,8,0,52,2,0,2,33,7,0,5,1,9,0,32,94,0,6,1,10,0,52,2,0,2,33,7,0,5,1,11,0,32,76,0,6,1,12,0,52,2,0,2,33,7,0,5,1,13,0,32,58,0,6,1,14,0,52,2,0,2,33,7,0,5,1,15,0,32,40,0,6,1,16,0,52,2,0,2,33,7,0,5,1,17,0,32,22,0,6,1,18,0,52,2,0,2,33,7,0,5,1,19,0,32,4,0,5,20,0,0,50],"constants":[{"t":"s","v":"name"},{"t":"s","v":"doc"},{"t":"s","v":"="},{"t":"s","v":"docs"},{"t":"s","v":"spec"},{"t":"s","v":"specs"},{"t":"s","v":"bootstrapper"},{"t":"s","v":"bootstrappers"},{"t":"s","v":"test"},{"t":"s","v":"testing"},{"t":"s","v":"example"},{"t":"s","v":"examples"},{"t":"s","v":"protocol"},{"t":"s","v":"protocols"},{"t":"s","v":"essay"},{"t":"s","v":"essays"},{"t":"s","v":"plan"},{"t":"s","v":"plans"},{"t":"s","v":"reference-detail"},{"t":"s","v":"reference"}]}},{"t":"s","v":"sx-url-to-path"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,6,33,11,0,5,20,2,0,1,5,0,52,4,0,2,52,0,0,1,33,4,0,2,32,104,0,20,2,0,1,7,0,20,2,0,52,9,0,1,1,10,0,52,8,0,2,52,6,0,3,17,1,20,12,0,1,13,0,1,14,0,52,11,0,3,1,15,0,1,16,0,52,11,0,3,1,5,0,1,16,0,52,11,0,3,17,2,51,18,0,20,20,0,1,14,0,52,19,0,2,52,17,0,2,17,3,1,14,0,1,14,0,20,24,0,20,25,0,52,23,0,2,52,22,0,2,52,21,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"starts-with?"},{"t":"s","v":"url"},{"t":"s","v":"/("},{"t":"s","v":"ends-with?"},{"t":"s","v":")"},{"t":"s","v":"slice"},{"t":"n","v":2},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"replace"},{"t":"s","v":"inner"},{"t":"s","v":"."},{"t":"s","v":"/"},{"t":"s","v":"("},{"t":"s","v":""},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"s"}]}},{"t":"s","v":"split"},{"t":"s","v":"s"},{"t":"s","v":"str"},{"t":"s","v":"join"},{"t":"s","v":"map"},{"t":"s","v":"_fn-to-segment"},{"t":"s","v":"segs"}]}},{"t":"s","v":"_count-leading-dots"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,1,2,0,32,41,0,20,1,0,1,4,0,52,3,0,2,33,25,0,1,6,0,20,7,0,20,1,0,1,6,0,52,8,0,2,48,1,52,5,0,2,32,3,0,1,2,0,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"s"},{"t":"n","v":0},{"t":"s","v":"starts-with?"},{"t":"s","v":"."},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"_count-leading-dots"},{"t":"s","v":"slice"}]}},{"t":"s","v":"_strip-trailing-close"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,32,0,20,3,0,20,1,0,1,5,0,20,1,0,52,7,0,1,1,8,0,52,6,0,2,52,4,0,3,49,1,32,3,0,20,1,0,50],"constants":[{"t":"s","v":"ends-with?"},{"t":"s","v":"s"},{"t":"s","v":")"},{"t":"s","v":"_strip-trailing-close"},{"t":"s","v":"slice"},{"t":"n","v":0},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"n","v":1}]}},{"t":"s","v":"_index-of-safe"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,17,2,20,4,0,52,3,0,1,6,34,11,0,5,20,4,0,1,6,0,52,5,0,2,33,4,0,2,32,3,0,20,4,0,50],"constants":[{"t":"s","v":"index-of"},{"t":"s","v":"s"},{"t":"s","v":"needle"},{"t":"s","v":"nil?"},{"t":"s","v":"idx"},{"t":"s","v":"<"},{"t":"n","v":0}]}},{"t":"s","v":"_last-index-of"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,2,20,4,0,52,3,0,1,33,4,0,2,32,60,0,20,5,0,20,1,0,20,4,0,1,8,0,52,7,0,2,52,6,0,2,20,2,0,48,2,17,3,20,9,0,52,3,0,1,33,6,0,20,4,0,32,17,0,20,4,0,1,8,0,52,7,0,2,20,9,0,52,7,0,2,50],"constants":[{"t":"s","v":"_index-of-safe"},{"t":"s","v":"s"},{"t":"s","v":"needle"},{"t":"s","v":"nil?"},{"t":"s","v":"idx"},{"t":"s","v":"_last-index-of"},{"t":"s","v":"slice"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"rest-idx"}]}},{"t":"s","v":"_pop-sx-url-level"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,1,0,52,3,0,1,20,0,0,20,1,0,48,1,52,3,0,1,52,2,0,2,17,2,20,5,0,1,6,0,52,4,0,2,33,6,0,1,7,0,32,74,0,20,8,0,20,9,0,1,10,0,48,2,17,3,20,12,0,52,11,0,1,33,6,0,1,7,0,32,45,0,20,9,0,1,15,0,20,12,0,52,14,0,3,20,1,0,20,1,0,52,3,0,1,20,5,0,1,6,0,52,2,0,2,52,2,0,2,52,14,0,2,52,13,0,2,50],"constants":[{"t":"s","v":"_strip-trailing-close"},{"t":"s","v":"url"},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"s","v":"<="},{"t":"s","v":"close-count"},{"t":"n","v":1},{"t":"s","v":"/"},{"t":"s","v":"_last-index-of"},{"t":"s","v":"stripped"},{"t":"s","v":".("},{"t":"s","v":"nil?"},{"t":"s","v":"last-dp"},{"t":"s","v":"str"},{"t":"s","v":"slice"},{"t":"n","v":0}]}},{"t":"s","v":"_pop-sx-url-levels"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,3,0,32,23,0,20,4,0,20,5,0,20,3,0,48,1,20,1,0,1,7,0,52,6,0,2,49,2,50],"constants":[{"t":"s","v":"<="},{"t":"s","v":"n"},{"t":"n","v":0},{"t":"s","v":"url"},{"t":"s","v":"_pop-sx-url-levels"},{"t":"s","v":"_pop-sx-url-level"},{"t":"s","v":"-"},{"t":"n","v":1}]}},{"t":"s","v":"_split-pos-kw"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,33,25,0,1,4,0,1,6,0,20,7,0,52,5,0,2,1,8,0,20,9,0,65,2,0,32,154,0,20,3,0,20,1,0,52,10,0,2,17,4,20,12,0,1,13,0,52,11,0,2,33,94,0,20,1,0,1,16,0,52,15,0,2,20,3,0,52,2,0,1,52,14,0,2,33,20,0,20,3,0,20,1,0,1,16,0,52,15,0,2,52,10,0,2,32,3,0,1,17,0,17,5,20,18,0,20,3,0,20,1,0,1,19,0,52,15,0,2,20,7,0,20,9,0,20,12,0,20,22,0,52,21,0,2,52,21,0,1,52,20,0,2,49,4,32,35,0,20,18,0,20,3,0,20,1,0,1,16,0,52,15,0,2,20,7,0,20,12,0,52,21,0,1,52,20,0,2,20,9,0,49,4,50],"constants":[{"t":"s","v":">="},{"t":"s","v":"i"},{"t":"s","v":"len"},{"t":"s","v":"tokens"},{"t":"s","v":"positional"},{"t":"s","v":"join"},{"t":"s","v":"."},{"t":"s","v":"pos"},{"t":"s","v":"keywords"},{"t":"s","v":"kw"},{"t":"s","v":"nth"},{"t":"s","v":"starts-with?"},{"t":"s","v":"tok"},{"t":"s","v":":"},{"t":"s","v":"<"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":""},{"t":"s","v":"_split-pos-kw"},{"t":"n","v":2},{"t":"s","v":"append"},{"t":"s","v":"list"},{"t":"s","v":"val"}]}},{"t":"s","v":"_parse-relative-body"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,19,0,1,2,0,1,3,0,1,4,0,52,5,0,0,65,2,0,32,26,0,20,6,0,20,1,0,1,8,0,52,7,0,2,1,9,0,52,5,0,0,52,5,0,0,49,4,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"body"},{"t":"s","v":"positional"},{"t":"s","v":""},{"t":"s","v":"keywords"},{"t":"s","v":"list"},{"t":"s","v":"_split-pos-kw"},{"t":"s","v":"split"},{"t":"s","v":"."},{"t":"n","v":0}]}},{"t":"s","v":"_extract-innermost"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,1,0,20,0,0,20,1,0,48,1,52,3,0,1,52,2,0,2,17,2,20,4,0,20,5,0,1,6,0,48,2,17,3,20,8,0,52,7,0,1,33,31,0,1,9,0,1,10,0,1,11,0,20,5,0,1,12,0,52,2,0,2,1,13,0,20,13,0,65,3,0,32,52,0,1,9,0,20,5,0,1,14,0,20,8,0,1,12,0,52,15,0,2,52,2,0,3,1,11,0,20,5,0,20,8,0,1,12,0,52,15,0,2,52,2,0,2,1,13,0,20,13,0,65,3,0,50],"constants":[{"t":"s","v":"_strip-trailing-close"},{"t":"s","v":"url"},{"t":"s","v":"slice"},{"t":"s","v":"len"},{"t":"s","v":"_last-index-of"},{"t":"s","v":"stripped"},{"t":"s","v":".("},{"t":"s","v":"nil?"},{"t":"s","v":"last-dp"},{"t":"s","v":"before"},{"t":"s","v":"/("},{"t":"s","v":"content"},{"t":"n","v":2},{"t":"s","v":"suffix"},{"t":"n","v":0},{"t":"s","v":"+"}]}},{"t":"s","v":"_find-kw-in-tokens"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,33,4,0,2,32,87,0,20,3,0,20,1,0,52,5,0,2,20,6,0,52,4,0,2,6,33,22,0,5,20,1,0,1,9,0,52,8,0,2,20,3,0,52,2,0,1,52,7,0,2,33,20,0,20,3,0,20,1,0,1,9,0,52,8,0,2,52,5,0,2,32,21,0,20,10,0,20,3,0,20,1,0,1,9,0,52,8,0,2,20,6,0,49,3,50],"constants":[{"t":"s","v":">="},{"t":"s","v":"i"},{"t":"s","v":"len"},{"t":"s","v":"tokens"},{"t":"s","v":"="},{"t":"s","v":"nth"},{"t":"s","v":"kw"},{"t":"s","v":"<"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"_find-kw-in-tokens"}]}},{"t":"s","v":"_find-keyword-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,2,0,1,3,0,52,1,0,2,1,4,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"_find-kw-in-tokens"},{"t":"s","v":"split"},{"t":"s","v":"content"},{"t":"s","v":"."},{"t":"n","v":0},{"t":"s","v":"kw"}]}},{"t":"s","v":"_replace-kw-in-tokens"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,3,0,52,2,0,1,52,0,0,2,33,7,0,52,4,0,0,32,125,0,20,3,0,20,1,0,52,6,0,2,20,7,0,52,5,0,2,6,33,22,0,5,20,1,0,1,10,0,52,9,0,2,20,3,0,52,2,0,1,52,8,0,2,33,41,0,20,7,0,20,12,0,52,4,0,2,20,13,0,20,3,0,20,1,0,1,14,0,52,9,0,2,20,7,0,20,12,0,48,4,52,11,0,2,32,38,0,20,3,0,20,1,0,52,6,0,2,20,13,0,20,3,0,20,1,0,1,10,0,52,9,0,2,20,7,0,20,12,0,48,4,52,15,0,2,50],"constants":[{"t":"s","v":">="},{"t":"s","v":"i"},{"t":"s","v":"len"},{"t":"s","v":"tokens"},{"t":"s","v":"list"},{"t":"s","v":"="},{"t":"s","v":"nth"},{"t":"s","v":"kw"},{"t":"s","v":"<"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"append"},{"t":"s","v":"value"},{"t":"s","v":"_replace-kw-in-tokens"},{"t":"n","v":2},{"t":"s","v":"cons"}]}},{"t":"s","v":"_set-keyword-in-content"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,48,2,17,3,20,4,0,52,3,0,1,33,22,0,20,1,0,1,6,0,20,2,0,1,6,0,20,7,0,52,5,0,5,32,31,0,1,6,0,20,9,0,20,1,0,1,6,0,52,10,0,2,1,11,0,20,2,0,20,7,0,48,4,52,8,0,2,50],"constants":[{"t":"s","v":"_find-keyword-value"},{"t":"s","v":"content"},{"t":"s","v":"kw"},{"t":"s","v":"nil?"},{"t":"s","v":"current"},{"t":"s","v":"str"},{"t":"s","v":"."},{"t":"s","v":"value"},{"t":"s","v":"join"},{"t":"s","v":"_replace-kw-in-tokens"},{"t":"s","v":"split"},{"t":"n","v":0}]}},{"t":"s","v":"_is-delta-value?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,6,33,45,0,5,20,2,0,52,4,0,1,1,5,0,52,3,0,2,6,33,26,0,5,20,2,0,1,7,0,52,6,0,2,6,34,11,0,5,20,2,0,1,8,0,52,6,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"s"},{"t":"s","v":">"},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"starts-with?"},{"t":"s","v":"+"},{"t":"s","v":"-"}]}},{"t":"s","v":"_apply-delta"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,2,52,0,0,2,17,2,20,2,0,2,52,0,0,2,17,3,20,4,0,52,3,0,1,6,34,8,0,5,20,5,0,52,3,0,1,33,6,0,20,2,0,32,14,0,20,4,0,20,5,0,52,7,0,2,52,6,0,1,50],"constants":[{"t":"s","v":"parse-int"},{"t":"s","v":"current-str"},{"t":"s","v":"delta-str"},{"t":"s","v":"nil?"},{"t":"s","v":"cur"},{"t":"s","v":"delta"},{"t":"s","v":"str"},{"t":"s","v":"+"}]}},{"t":"s","v":"_apply-kw-pairs"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,2,0,32,115,0,20,1,0,52,3,0,1,17,2,20,4,0,52,3,0,1,17,3,20,4,0,1,6,0,52,5,0,2,17,4,20,7,0,20,8,0,48,1,33,43,0,20,9,0,20,2,0,20,10,0,48,2,17,6,20,12,0,52,11,0,1,33,6,0,20,8,0,32,11,0,20,13,0,20,12,0,20,8,0,48,2,32,3,0,20,8,0,17,5,20,14,0,20,15,0,20,2,0,20,10,0,20,16,0,48,3,20,1,0,52,17,0,1,49,2,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"kw-pairs"},{"t":"s","v":"content"},{"t":"s","v":"first"},{"t":"s","v":"pair"},{"t":"s","v":"nth"},{"t":"n","v":1},{"t":"s","v":"_is-delta-value?"},{"t":"s","v":"raw-val"},{"t":"s","v":"_find-keyword-value"},{"t":"s","v":"kw"},{"t":"s","v":"nil?"},{"t":"s","v":"current"},{"t":"s","v":"_apply-delta"},{"t":"s","v":"_apply-kw-pairs"},{"t":"s","v":"_set-keyword-in-content"},{"t":"s","v":"actual-val"},{"t":"s","v":"rest"}]}},{"t":"s","v":"_apply-keywords-to-url"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,6,0,20,2,0,32,57,0,20,3,0,20,2,0,48,1,17,2,20,4,0,20,6,0,1,7,0,52,5,0,2,20,1,0,48,2,17,3,20,6,0,1,9,0,52,5,0,2,20,10,0,20,6,0,1,11,0,52,5,0,2,52,8,0,3,50],"constants":[{"t":"s","v":"empty?"},{"t":"s","v":"kw-pairs"},{"t":"s","v":"url"},{"t":"s","v":"_extract-innermost"},{"t":"s","v":"_apply-kw-pairs"},{"t":"s","v":"get"},{"t":"s","v":"parts"},{"t":"s","v":"content"},{"t":"s","v":"str"},{"t":"s","v":"before"},{"t":"s","v":"new-content"},{"t":"s","v":"suffix"}]}},{"t":"s","v":"_normalize-relative"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,20,1,0,32,13,0,1,2,0,20,1,0,1,4,0,52,3,0,3,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"url"},{"t":"s","v":"("},{"t":"s","v":"str"},{"t":"s","v":")"}]}},{"t":"s","v":"resolve-relative-url"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,3,0,1,4,0,20,3,0,52,6,0,1,1,4,0,52,5,0,2,52,2,0,3,17,3,20,7,0,20,8,0,48,1,17,4,20,8,0,20,7,0,20,8,0,48,1,52,2,0,2,17,5,20,10,0,1,11,0,52,9,0,2,33,6,0,20,12,0,32,241,0,20,13,0,20,14,0,48,1,17,6,20,16,0,1,17,0,52,15,0,2,17,7,20,16,0,1,18,0,52,15,0,2,17,8,20,10,0,1,4,0,52,9,0,2,33,66,0,20,20,0,52,19,0,1,33,6,0,20,12,0,32,47,0,20,21,0,20,12,0,48,1,17,10,20,12,0,20,21,0,20,12,0,48,1,52,6,0,1,52,2,0,2,17,11,20,23,0,1,24,0,20,20,0,20,25,0,52,22,0,4,32,115,0,20,26,0,20,12,0,20,10,0,1,4,0,52,5,0,2,48,2,17,10,20,20,0,52,19,0,1,33,6,0,20,27,0,32,79,0,20,27,0,1,28,0,52,9,0,2,33,16,0,1,29,0,20,20,0,1,30,0,52,22,0,3,32,50,0,20,21,0,20,27,0,48,1,17,11,20,27,0,20,21,0,20,27,0,48,1,52,6,0,1,52,2,0,2,17,12,20,23,0,1,31,0,20,20,0,1,30,0,20,25,0,52,22,0,5,17,9,20,32,0,20,33,0,20,34,0,49,2,50],"constants":[{"t":"s","v":"_normalize-relative"},{"t":"s","v":"relative"},{"t":"s","v":"slice"},{"t":"s","v":"canonical"},{"t":"n","v":1},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"s","v":"_count-leading-dots"},{"t":"s","v":"rel-inner"},{"t":"s","v":"="},{"t":"s","v":"dots"},{"t":"n","v":0},{"t":"s","v":"current"},{"t":"s","v":"_parse-relative-body"},{"t":"s","v":"body"},{"t":"s","v":"get"},{"t":"s","v":"parsed"},{"t":"s","v":"positional"},{"t":"s","v":"keywords"},{"t":"s","v":"empty?"},{"t":"s","v":"pos-body"},{"t":"s","v":"_strip-trailing-close"},{"t":"s","v":"str"},{"t":"s","v":"stripped"},{"t":"s","v":"."},{"t":"s","v":"suffix"},{"t":"s","v":"_pop-sx-url-levels"},{"t":"s","v":"base"},{"t":"s","v":"/"},{"t":"s","v":"/("},{"t":"s","v":")"},{"t":"s","v":".("},{"t":"s","v":"_apply-keywords-to-url"},{"t":"s","v":"after-nav"},{"t":"s","v":"kw-pairs"}]}},{"t":"s","v":"relative-sx-url?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,33,15,0,5,20,1,0,1,4,0,52,0,0,2,52,3,0,1,6,34,11,0,5,20,1,0,1,5,0,52,0,0,2,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"url"},{"t":"s","v":"("},{"t":"s","v":"not"},{"t":"s","v":"/("},{"t":"s","v":"."}]}},{"t":"s","v":"_url-special-forms"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,1,0,1,2,0,1,3,0,1,4,0,1,5,0,1,6,0,52,0,0,6,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"!source"},{"t":"s","v":"!inspect"},{"t":"s","v":"!diff"},{"t":"s","v":"!search"},{"t":"s","v":"!raw"},{"t":"s","v":"!json"}]}},{"t":"s","v":"url-special-form?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,33,13,0,5,20,4,0,48,0,20,1,0,52,3,0,2,50],"constants":[{"t":"s","v":"starts-with?"},{"t":"s","v":"name"},{"t":"s","v":"!"},{"t":"s","v":"contains?"},{"t":"s","v":"_url-special-forms"}]}},{"t":"s","v":"parse-sx-url"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,18,0,1,3,0,20,1,0,1,4,0,1,5,0,65,2,0,32,156,1,20,6,0,20,1,0,48,1,33,18,0,1,3,0,20,1,0,1,4,0,1,7,0,65,2,0,32,127,1,20,1,0,1,9,0,52,8,0,2,6,33,11,0,5,20,1,0,1,11,0,52,10,0,2,33,216,0,20,1,0,1,13,0,20,1,0,52,15,0,1,1,16,0,52,14,0,2,52,12,0,3,17,1,20,17,0,20,18,0,1,19,0,48,2,17,2,20,17,0,20,18,0,1,20,0,48,2,17,3,20,22,0,52,21,0,1,6,33,8,0,5,20,23,0,52,21,0,1,33,10,0,20,18,0,52,15,0,1,32,42,0,20,22,0,52,21,0,1,33,6,0,20,23,0,32,26,0,20,23,0,52,21,0,1,33,6,0,20,22,0,32,10,0,20,22,0,20,23,0,52,24,0,2,17,4,20,18,0,1,25,0,20,26,0,52,12,0,3,17,5,20,18,0,20,26,0,52,12,0,2,17,6,20,27,0,1,19,0,52,8,0,2,33,13,0,20,27,0,1,16,0,52,12,0,2,32,3,0,20,27,0,17,7,1,3,0,20,1,0,1,4,0,1,28,0,1,18,0,20,29,0,1,30,0,20,31,0,65,4,0,32,139,0,20,1,0,1,32,0,52,8,0,2,6,33,11,0,5,20,1,0,1,11,0,52,10,0,2,33,50,0,20,1,0,1,13,0,20,1,0,52,15,0,1,1,16,0,52,14,0,2,52,12,0,3,17,1,1,3,0,20,1,0,1,4,0,1,33,0,1,34,0,20,34,0,65,3,0,32,61,0,20,1,0,1,35,0,52,8,0,2,6,33,11,0,5,20,1,0,1,11,0,52,10,0,2,33,18,0,1,3,0,20,1,0,1,4,0,1,36,0,65,2,0,32,15,0,1,3,0,20,1,0,1,4,0,1,37,0,65,2,0,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"url"},{"t":"s","v":"/"},{"t":"s","v":"raw"},{"t":"s","v":"type"},{"t":"s","v":"home"},{"t":"s","v":"relative-sx-url?"},{"t":"s","v":"relative"},{"t":"s","v":"starts-with?"},{"t":"s","v":"/(!"},{"t":"s","v":"ends-with?"},{"t":"s","v":")"},{"t":"s","v":"slice"},{"t":"n","v":2},{"t":"s","v":"-"},{"t":"s","v":"len"},{"t":"n","v":1},{"t":"s","v":"_index-of-safe"},{"t":"s","v":"inner"},{"t":"s","v":"."},{"t":"s","v":"("},{"t":"s","v":"nil?"},{"t":"s","v":"dot-pos"},{"t":"s","v":"paren-pos"},{"t":"s","v":"min"},{"t":"n","v":0},{"t":"s","v":"end-pos"},{"t":"s","v":"rest-part"},{"t":"s","v":"special-form"},{"t":"s","v":"inner-expr"},{"t":"s","v":"form"},{"t":"s","v":"form-name"},{"t":"s","v":"/(~"},{"t":"s","v":"direct-component"},{"t":"s","v":"name"},{"t":"s","v":"/("},{"t":"s","v":"absolute"},{"t":"s","v":"path"}]}},{"t":"s","v":"url-special-form-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,4,0,1,5,0,52,3,0,2,1,6,0,52,2,0,2,33,13,0,20,4,0,1,7,0,52,3,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"parse-sx-url"},{"t":"s","v":"url"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"parsed"},{"t":"s","v":"type"},{"t":"s","v":"special-form"},{"t":"s","v":"form"}]}},{"t":"s","v":"url-special-form-inner"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,4,0,1,5,0,52,3,0,2,1,6,0,52,2,0,2,33,13,0,20,4,0,1,7,0,52,3,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"parse-sx-url"},{"t":"s","v":"url"},{"t":"s","v":"="},{"t":"s","v":"get"},{"t":"s","v":"parsed"},{"t":"s","v":"type"},{"t":"s","v":"special-form"},{"t":"s","v":"inner"}]}},{"t":"s","v":"url-to-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,6,34,8,0,5,20,1,0,52,3,0,1,33,7,0,52,4,0,0,32,80,0,20,1,0,1,2,0,52,5,0,2,33,13,0,20,1,0,1,7,0,52,6,0,2,32,3,0,20,1,0,17,1,20,9,0,1,10,0,1,11,0,52,8,0,3,17,2,20,12,0,20,13,0,48,1,17,3,20,14,0,52,3,0,1,33,7,0,52,4,0,0,32,7,0,20,14,0,52,15,0,1,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"url-path"},{"t":"s","v":"/"},{"t":"s","v":"empty?"},{"t":"s","v":"list"},{"t":"s","v":"starts-with?"},{"t":"s","v":"slice"},{"t":"n","v":1},{"t":"s","v":"replace"},{"t":"s","v":"trimmed"},{"t":"s","v":"."},{"t":"s","v":" "},{"t":"s","v":"sx-parse"},{"t":"s","v":"sx-source"},{"t":"s","v":"exprs"},{"t":"s","v":"first"}]}},{"t":"s","v":"auto-quote-unknowns"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,52,1,0,1,52,0,0,1,33,6,0,20,2,0,32,41,0,20,2,0,52,3,0,1,33,6,0,20,2,0,32,25,0,20,2,0,52,5,0,1,51,7,0,20,2,0,52,8,0,1,52,6,0,2,52,4,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"list?"},{"t":"s","v":"expr"},{"t":"s","v":"empty?"},{"t":"s","v":"cons"},{"t":"s","v":"first"},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,14,0,20,2,0,20,1,0,20,3,0,49,2,32,101,0,20,1,0,52,5,0,1,1,6,0,52,4,0,2,33,81,0,20,7,0,20,1,0,48,1,17,1,20,8,0,20,3,0,20,9,0,48,2,6,34,41,0,5,20,9,0,1,11,0,52,10,0,2,6,34,26,0,5,20,9,0,1,12,0,52,10,0,2,6,34,11,0,5,20,9,0,1,13,0,52,10,0,2,33,6,0,20,1,0,32,3,0,20,9,0,32,3,0,20,1,0,50],"constants":[{"t":"s","v":"list?"},{"t":"s","v":"child"},{"t":"s","v":"auto-quote-unknowns"},{"t":"s","v":"env"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"symbol"},{"t":"s","v":"symbol-name"},{"t":"s","v":"env-has?"},{"t":"s","v":"name"},{"t":"s","v":"starts-with?"},{"t":"s","v":":"},{"t":"s","v":"~"},{"t":"s","v":"!"}]}},{"t":"s","v":"rest"}]}},{"t":"s","v":"prepare-url-expr"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,2,20,3,0,52,2,0,1,33,6,0,20,3,0,32,11,0,20,4,0,20,3,0,20,5,0,49,2,50],"constants":[{"t":"s","v":"url-to-expr"},{"t":"s","v":"url-path"},{"t":"s","v":"empty?"},{"t":"s","v":"expr"},{"t":"s","v":"auto-quote-unknowns"},{"t":"s","v":"env"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/signals.sxbc.json b/shared/static/wasm/sx/signals.sxbc.json new file mode 100644 index 00000000..4fdc445b --- /dev/null +++ b/shared/static/wasm/sx/signals.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"5c28976e14b0d85b","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,50],"constants":[{"t":"s","v":"with-marsh-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[52,0,0,0,17,2,20,1,0,51,2,0,20,3,0,48,2,5,20,4,0,20,5,0,1,6,0,20,7,0,49,3,50],"constants":[{"t":"s","v":"list"},{"t":"s","v":"with-island-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"append!"},{"t":"s","v":"disposers"},{"t":"s","v":"d"}]}},{"t":"s","v":"body-fn"},{"t":"s","v":"dom-set-data"},{"t":"s","v":"marsh-el"},{"t":"s","v":"sx-marsh-disposers"},{"t":"s","v":"disposers"}]}},{"t":"s","v":"dispose-marsh-scope"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,2,0,48,2,17,1,20,3,0,33,26,0,51,5,0,20,3,0,52,4,0,2,5,20,6,0,20,1,0,1,2,0,2,49,3,32,1,0,2,50],"constants":[{"t":"s","v":"dom-get-data"},{"t":"s","v":"marsh-el"},{"t":"s","v":"sx-marsh-disposers"},{"t":"s","v":"disposers"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,2,49,2,50],"constants":[{"t":"s","v":"cek-call"},{"t":"s","v":"d"}]}},{"t":"s","v":"dom-set-data"}]}},{"t":"s","v":"emit-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"dom-dispatch"},{"t":"s","v":"el"},{"t":"s","v":"event-name"},{"t":"s","v":"detail"}]}},{"t":"s","v":"on-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,3,0,49,3,50],"constants":[{"t":"s","v":"dom-on"},{"t":"s","v":"el"},{"t":"s","v":"event-name"},{"t":"s","v":"handler"}]}},{"t":"s","v":"bridge-event"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,51,1,0,49,1,50],"constants":[{"t":"s","v":"effect"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,51,3,0,48,3,17,0,20,4,0,50],"constants":[{"t":"s","v":"dom-on"},{"t":"s","v":"el"},{"t":"s","v":"event-name"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,2,0,33,18,0,20,3,0,20,2,0,20,5,0,52,4,0,1,48,2,32,3,0,20,5,0,17,2,20,6,0,20,7,0,20,8,0,49,2,50],"constants":[{"t":"s","v":"event-detail"},{"t":"s","v":"e"},{"t":"s","v":"transform-fn"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"},{"t":"s","v":"detail"},{"t":"s","v":"reset!"},{"t":"s","v":"target-signal"},{"t":"s","v":"new-val"}]}},{"t":"s","v":"remove"}]}}]}},{"t":"s","v":"resource"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,1,2,0,3,1,3,0,2,1,4,0,2,52,1,0,6,48,1,17,1,20,5,0,20,6,0,20,7,0,2,48,2,51,8,0,51,9,0,48,3,5,20,10,0,50],"constants":[{"t":"s","v":"signal"},{"t":"s","v":"dict"},{"t":"s","v":"loading"},{"t":"s","v":"data"},{"t":"s","v":"error"},{"t":"s","v":"promise-then"},{"t":"s","v":"cek-call"},{"t":"s","v":"fetch-fn"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,4,1,4,0,20,4,0,1,5,0,2,52,2,0,6,49,2,50],"constants":[{"t":"s","v":"reset!"},{"t":"s","v":"state"},{"t":"s","v":"dict"},{"t":"s","v":"loading"},{"t":"s","v":"data"},{"t":"s","v":"error"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,1,3,0,4,1,4,0,2,1,5,0,20,6,0,52,2,0,6,49,2,50],"constants":[{"t":"s","v":"reset!"},{"t":"s","v":"state"},{"t":"s","v":"dict"},{"t":"s","v":"loading"},{"t":"s","v":"data"},{"t":"s","v":"error"},{"t":"s","v":"err"}]}},{"t":"s","v":"state"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx/vm.sxbc.json b/shared/static/wasm/sx/vm.sxbc.json new file mode 100644 index 00000000..269499e6 --- /dev/null +++ b/shared/static/wasm/sx/vm.sxbc.json @@ -0,0 +1 @@ +{"magic":"SXBC","version":1,"hash":"d3bc304c4e6d7b00","module":{"arity":0,"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,51,31,0,128,30,0,5,51,33,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,5,51,47,0,128,46,0,5,51,49,0,128,48,0,5,51,51,0,128,50,0,5,51,53,0,128,52,0,5,51,55,0,128,54,0,5,51,57,0,128,56,0,5,51,59,0,128,58,0,5,51,61,0,128,60,0,5,51,63,0,128,62,0,50],"constants":[{"t":"s","v":"make-upvalue-cell"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,1,0,65,1,0,50],"constants":[{"t":"s","v":"uv-value"},{"t":"s","v":"value"}]}},{"t":"s","v":"uv-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"cell"},{"t":"s","v":"uv-value"}]}},{"t":"s","v":"uv-set!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,20,3,0,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"cell"},{"t":"s","v":"uv-value"},{"t":"s","v":"value"}]}},{"t":"s","v":"make-vm-code"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,1,0,1,2,0,20,3,0,1,4,0,20,5,0,1,6,0,20,7,0,65,4,0,50],"constants":[{"t":"s","v":"vc-bytecode"},{"t":"s","v":"bytecode"},{"t":"s","v":"vc-locals"},{"t":"s","v":"locals"},{"t":"s","v":"vc-arity"},{"t":"s","v":"arity"},{"t":"s","v":"vc-constants"},{"t":"s","v":"constants"}]}},{"t":"s","v":"make-vm-closure"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,20,1,0,1,2,0,20,3,0,1,4,0,20,5,0,1,6,0,20,7,0,1,8,0,20,9,0,65,5,0,50],"constants":[{"t":"s","v":"vm-globals"},{"t":"s","v":"globals"},{"t":"s","v":"vm-upvalues"},{"t":"s","v":"upvalues"},{"t":"s","v":"vm-name"},{"t":"s","v":"name"},{"t":"s","v":"vm-code"},{"t":"s","v":"code"},{"t":"s","v":"vm-closure-env"},{"t":"s","v":"closure-env"}]}},{"t":"s","v":"make-vm-frame"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,1,1,0,1,2,0,20,2,0,1,3,0,20,3,0,1,4,0,65,0,0,65,4,0,50],"constants":[{"t":"s","v":"ip"},{"t":"n","v":0},{"t":"s","v":"closure"},{"t":"s","v":"base"},{"t":"s","v":"local-cells"}]}},{"t":"s","v":"make-vm"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,1,1,0,1,2,0,52,3,0,0,1,4,0,1,6,0,52,5,0,1,1,7,0,20,7,0,65,4,0,50],"constants":[{"t":"s","v":"sp"},{"t":"n","v":0},{"t":"s","v":"frames"},{"t":"s","v":"list"},{"t":"s","v":"stack"},{"t":"s","v":"make-vm-stack"},{"t":"n","v":4096},{"t":"s","v":"globals"}]}},{"t":"s","v":"vm-push"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,2,20,1,0,1,3,0,52,0,0,2,17,3,20,2,0,20,3,0,52,5,0,1,52,4,0,2,33,53,0,20,2,0,1,8,0,52,7,0,2,52,6,0,1,17,4,20,3,0,20,10,0,20,2,0,52,9,0,3,5,20,1,0,1,3,0,20,10,0,52,11,0,3,5,20,10,0,21,3,0,32,1,0,2,5,20,3,0,20,2,0,20,13,0,52,12,0,3,5,20,1,0,1,2,0,20,2,0,1,15,0,52,14,0,2,52,11,0,3,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"sp"},{"t":"s","v":"stack"},{"t":"s","v":">="},{"t":"s","v":"vm-stack-length"},{"t":"s","v":"make-vm-stack"},{"t":"s","v":"*"},{"t":"n","v":2},{"t":"s","v":"vm-stack-copy!"},{"t":"s","v":"new-stack"},{"t":"s","v":"dict-set!"},{"t":"s","v":"vm-stack-set!"},{"t":"s","v":"value"},{"t":"s","v":"+"},{"t":"n","v":1}]}},{"t":"s","v":"vm-pop"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,1,4,0,52,0,0,2,17,1,20,2,0,1,3,0,20,3,0,52,5,0,3,5,20,2,0,1,7,0,52,1,0,2,20,3,0,52,6,0,2,50],"constants":[{"t":"s","v":"-"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"sp"},{"t":"n","v":1},{"t":"s","v":"dict-set!"},{"t":"s","v":"vm-stack-get"},{"t":"s","v":"stack"}]}},{"t":"s","v":"vm-peek"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,2,0,1,3,0,52,1,0,2,20,2,0,1,5,0,52,1,0,2,1,6,0,52,4,0,2,52,0,0,2,50],"constants":[{"t":"s","v":"vm-stack-get"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"stack"},{"t":"s","v":"-"},{"t":"s","v":"sp"},{"t":"n","v":1}]}},{"t":"s","v":"frame-read-u8"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,17,1,20,1,0,1,3,0,52,0,0,2,1,4,0,52,0,0,2,1,5,0,52,0,0,2,17,2,20,7,0,20,2,0,52,6,0,2,17,3,20,1,0,1,2,0,20,2,0,1,10,0,52,9,0,2,52,8,0,3,5,20,11,0,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"ip"},{"t":"s","v":"closure"},{"t":"s","v":"vm-code"},{"t":"s","v":"vc-bytecode"},{"t":"s","v":"nth"},{"t":"s","v":"bc"},{"t":"s","v":"dict-set!"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"v"}]}},{"t":"s","v":"frame-read-u16"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,0,0,20,1,0,48,1,17,2,20,3,0,20,5,0,1,6,0,52,4,0,2,52,2,0,2,50],"constants":[{"t":"s","v":"frame-read-u8"},{"t":"s","v":"frame"},{"t":"s","v":"+"},{"t":"s","v":"lo"},{"t":"s","v":"*"},{"t":"s","v":"hi"},{"t":"n","v":256}]}},{"t":"s","v":"frame-read-i16"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,1,20,3,0,1,4,0,52,2,0,2,33,13,0,20,3,0,1,6,0,52,5,0,2,32,3,0,20,3,0,50],"constants":[{"t":"s","v":"frame-read-u16"},{"t":"s","v":"frame"},{"t":"s","v":">="},{"t":"s","v":"v"},{"t":"n","v":32768},{"t":"s","v":"-"},{"t":"n","v":65536}]}},{"t":"s","v":"vm-push-frame"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,3,0,1,4,0,52,2,0,2,48,2,17,3,51,6,0,20,7,0,52,5,0,2,5,20,7,0,52,8,0,1,17,4,20,1,0,1,9,0,52,2,0,2,1,10,0,52,2,0,2,17,5,20,12,0,20,13,0,52,11,0,2,17,6,20,15,0,1,16,0,52,14,0,2,33,19,0,1,16,0,17,7,51,17,0,17,9,5,20,18,0,48,0,32,1,0,2,5,20,3,0,1,20,0,20,22,0,20,3,0,1,20,0,52,2,0,2,52,21,0,2,52,19,0,3,50],"constants":[{"t":"s","v":"make-vm-frame"},{"t":"s","v":"closure"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"sp"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"vm-push"},{"t":"s","v":"vm"},{"t":"s","v":"a"}]}},{"t":"s","v":"args"},{"t":"s","v":"len"},{"t":"s","v":"vm-code"},{"t":"s","v":"vc-locals"},{"t":"s","v":"-"},{"t":"s","v":"total-locals"},{"t":"s","v":"arity"},{"t":"s","v":">"},{"t":"s","v":"pad-count"},{"t":"n","v":0},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,32,0,20,3,0,20,4,0,2,48,2,5,20,1,0,1,6,0,52,5,0,2,21,1,0,5,20,7,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"pad-count"},{"t":"s","v":"vm-push"},{"t":"s","v":"vm"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"pad-loop"}]}},{"t":"s","v":"pad-loop"},{"t":"s","v":"dict-set!"},{"t":"s","v":"frames"},{"t":"s","v":"cons"},{"t":"s","v":"frame"}]}},{"t":"s","v":"code-from-value"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,3,0,52,2,0,1,52,1,0,1,33,22,0,20,4,0,1,5,0,1,6,0,52,7,0,0,52,7,0,0,49,4,32,125,0,20,3,0,1,9,0,52,8,0,2,17,1,20,11,0,52,10,0,1,33,7,0,52,7,0,0,32,3,0,20,11,0,17,2,20,3,0,1,12,0,52,8,0,2,17,3,20,13,0,52,10,0,1,33,7,0,52,7,0,0,32,3,0,20,13,0,17,4,20,3,0,1,14,0,52,8,0,2,17,5,20,15,0,52,10,0,1,33,6,0,1,5,0,32,3,0,20,15,0,17,6,20,4,0,20,14,0,20,14,0,1,6,0,52,16,0,2,20,17,0,20,18,0,49,4,50],"constants":[{"t":"s","v":"Convert a compiler output dict to a vm-code object."},{"t":"s","v":"not"},{"t":"s","v":"dict?"},{"t":"s","v":"v"},{"t":"s","v":"make-vm-code"},{"t":"n","v":0},{"t":"n","v":16},{"t":"s","v":"list"},{"t":"s","v":"get"},{"t":"s","v":"bytecode"},{"t":"s","v":"nil?"},{"t":"s","v":"bc-raw"},{"t":"s","v":"constants"},{"t":"s","v":"consts-raw"},{"t":"s","v":"arity"},{"t":"s","v":"arity-raw"},{"t":"s","v":"+"},{"t":"s","v":"bc"},{"t":"s","v":"consts"}]}},{"t":"s","v":"vm-closure?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,6,33,11,0,5,20,1,0,1,3,0,52,2,0,2,50],"constants":[{"t":"s","v":"dict?"},{"t":"s","v":"v"},{"t":"s","v":"has-key?"},{"t":"s","v":"vm-code"}]}},{"t":"s","v":"vm-call"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,17,0,20,2,0,20,3,0,20,1,0,20,4,0,49,3,32,127,0,20,1,0,52,6,0,1,1,7,0,52,5,0,2,6,34,34,0,5,20,1,0,52,6,0,1,1,8,0,52,5,0,2,6,34,15,0,5,20,1,0,52,6,0,1,1,9,0,52,5,0,2,33,22,0,20,10,0,20,3,0,20,11,0,20,1,0,20,4,0,48,2,49,2,32,50,0,20,12,0,20,1,0,48,1,33,21,0,20,10,0,20,3,0,20,1,0,20,4,0,52,13,0,2,49,2,32,18,0,1,16,0,20,1,0,52,6,0,1,52,15,0,2,52,14,0,1,50],"constants":[{"t":"s","v":"vm-closure?"},{"t":"s","v":"f"},{"t":"s","v":"vm-push-frame"},{"t":"s","v":"vm"},{"t":"s","v":"args"},{"t":"s","v":"="},{"t":"s","v":"type-of"},{"t":"s","v":"lambda"},{"t":"s","v":"component"},{"t":"s","v":"island"},{"t":"s","v":"vm-push"},{"t":"s","v":"cek-call"},{"t":"s","v":"callable?"},{"t":"s","v":"apply"},{"t":"s","v":"error"},{"t":"s","v":"str"},{"t":"s","v":"VM: not callable: "}]}},{"t":"s","v":"frame-local-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,1,3,0,52,1,0,2,17,3,20,5,0,52,4,0,1,17,4,20,7,0,20,8,0,52,6,0,2,33,18,0,20,9,0,20,7,0,20,8,0,52,1,0,2,49,1,32,31,0,20,11,0,1,12,0,52,1,0,2,20,2,0,1,14,0,52,1,0,2,20,5,0,52,13,0,2,52,10,0,2,50],"constants":[{"t":"s","v":"Read a local variable — check shared cells first, then stack."},{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"local-cells"},{"t":"s","v":"str"},{"t":"s","v":"slot"},{"t":"s","v":"has-key?"},{"t":"s","v":"cells"},{"t":"s","v":"key"},{"t":"s","v":"uv-get"},{"t":"s","v":"vm-stack-get"},{"t":"s","v":"vm"},{"t":"s","v":"stack"},{"t":"s","v":"+"},{"t":"s","v":"base"}]}},{"t":"s","v":"frame-local-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,1,3,0,52,1,0,2,17,4,20,5,0,52,4,0,1,17,5,20,7,0,20,8,0,52,6,0,2,33,21,0,20,9,0,20,7,0,20,8,0,52,1,0,2,20,10,0,49,2,32,34,0,20,12,0,1,13,0,52,1,0,2,20,2,0,1,15,0,52,1,0,2,20,5,0,52,14,0,2,20,10,0,52,11,0,3,50],"constants":[{"t":"s","v":"Write a local variable — to shared cell if captured, else to stack."},{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"local-cells"},{"t":"s","v":"str"},{"t":"s","v":"slot"},{"t":"s","v":"has-key?"},{"t":"s","v":"cells"},{"t":"s","v":"key"},{"t":"s","v":"uv-set!"},{"t":"s","v":"value"},{"t":"s","v":"vm-stack-set!"},{"t":"s","v":"vm"},{"t":"s","v":"stack"},{"t":"s","v":"+"},{"t":"s","v":"base"}]}},{"t":"s","v":"frame-upvalue-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,3,0,1,4,0,52,2,0,2,1,5,0,52,2,0,2,20,6,0,52,1,0,2,49,1,50],"constants":[{"t":"s","v":"uv-get"},{"t":"s","v":"nth"},{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"closure"},{"t":"s","v":"vm-upvalues"},{"t":"s","v":"idx"}]}},{"t":"s","v":"frame-upvalue-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,3,0,1,4,0,52,2,0,2,1,5,0,52,2,0,2,20,6,0,52,1,0,2,20,7,0,49,2,50],"constants":[{"t":"s","v":"uv-set!"},{"t":"s","v":"nth"},{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"closure"},{"t":"s","v":"vm-upvalues"},{"t":"s","v":"idx"},{"t":"s","v":"value"}]}},{"t":"s","v":"vm-global-get"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,1,3,0,52,1,0,2,17,3,20,3,0,20,5,0,52,4,0,2,33,13,0,20,3,0,20,5,0,52,1,0,2,32,83,0,20,6,0,1,7,0,52,1,0,2,1,8,0,52,1,0,2,17,4,20,8,0,52,9,0,1,33,14,0,20,10,0,51,11,0,51,12,0,49,2,32,40,0,20,13,0,20,8,0,20,5,0,48,2,17,5,20,14,0,52,9,0,1,33,14,0,20,10,0,51,11,0,51,12,0,49,2,32,3,0,20,14,0,50],"constants":[{"t":"s","v":"Look up a global: globals table → closure env → primitives → HO wrappers"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"globals"},{"t":"s","v":"has-key?"},{"t":"s","v":"name"},{"t":"s","v":"frame"},{"t":"s","v":"closure"},{"t":"s","v":"closure-env"},{"t":"s","v":"nil?"},{"t":"s","v":"cek-try"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,50],"constants":[{"t":"s","v":"get-primitive"},{"t":"s","v":"name"}]}},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,49,2,50],"constants":[{"t":"s","v":"vm-resolve-ho-form"},{"t":"s","v":"vm"},{"t":"s","v":"name"}]}},{"t":"s","v":"env-walk"},{"t":"s","v":"found"}]}},{"t":"s","v":"vm-resolve-ho-form"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,1,2,0,52,0,0,2,33,6,0,51,3,0,32,128,0,20,1,0,1,4,0,52,0,0,2,33,6,0,51,5,0,32,109,0,20,1,0,1,6,0,52,0,0,2,33,6,0,51,7,0,32,90,0,20,1,0,1,8,0,52,0,0,2,33,6,0,51,9,0,32,71,0,20,1,0,1,10,0,52,0,0,2,33,6,0,51,11,0,32,52,0,20,1,0,1,12,0,52,0,0,2,33,6,0,51,13,0,32,33,0,20,1,0,1,14,0,52,0,0,2,33,6,0,51,15,0,32,14,0,1,18,0,20,1,0,52,17,0,2,52,16,0,1,50],"constants":[{"t":"s","v":"="},{"t":"s","v":"name"},{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"map"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"map-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"map-indexed"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"i"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"filter"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,20,3,0,52,0,0,3,50],"constants":[{"t":"s","v":"reduce"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,20,5,0,52,3,0,2,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"acc"},{"t":"s","v":"x"}]}},{"t":"s","v":"init"},{"t":"s","v":"coll"}]}},{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"some"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"every?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[51,1,0,20,2,0,52,0,0,2,50],"constants":[{"t":"s","v":"every?"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,20,2,0,20,4,0,52,3,0,1,49,3,50],"constants":[{"t":"s","v":"vm-call-external"},{"t":"s","v":"vm"},{"t":"s","v":"f"},{"t":"s","v":"list"},{"t":"s","v":"x"}]}},{"t":"s","v":"coll"}]}},{"t":"s","v":"error"},{"t":"s","v":"str"},{"t":"s","v":"VM undefined: "}]}},{"t":"s","v":"vm-call-external"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,33,24,0,20,2,0,20,1,0,20,3,0,20,5,0,1,6,0,52,4,0,2,49,3,32,11,0,20,7,0,20,1,0,20,3,0,49,2,50],"constants":[{"t":"s","v":"vm-closure?"},{"t":"s","v":"f"},{"t":"s","v":"vm-call-closure"},{"t":"s","v":"args"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"globals"},{"t":"s","v":"cek-call"}]}},{"t":"s","v":"vm-global-set"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,2,0,1,3,0,52,1,0,2,1,4,0,52,1,0,2,17,4,4,17,5,20,7,0,52,6,0,1,52,5,0,1,33,20,0,20,8,0,20,7,0,20,9,0,20,10,0,48,3,21,11,0,32,1,0,2,5,20,11,0,52,5,0,1,33,23,0,20,13,0,1,14,0,52,1,0,2,20,9,0,20,10,0,52,12,0,3,32,1,0,2,50],"constants":[{"t":"s","v":"Set a global: write to closure env if name exists there, else globals."},{"t":"s","v":"get"},{"t":"s","v":"frame"},{"t":"s","v":"closure"},{"t":"s","v":"vm-closure-env"},{"t":"s","v":"not"},{"t":"s","v":"nil?"},{"t":"s","v":"closure-env"},{"t":"s","v":"env-walk-set!"},{"t":"s","v":"name"},{"t":"s","v":"value"},{"t":"s","v":"written"},{"t":"s","v":"dict-set!"},{"t":"s","v":"vm"},{"t":"s","v":"globals"}]}},{"t":"s","v":"env-walk"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,2,32,63,0,20,2,0,20,1,0,20,3,0,48,2,33,14,0,20,4,0,20,1,0,20,3,0,49,2,32,35,0,20,5,0,20,1,0,48,1,17,2,20,6,0,52,0,0,1,33,4,0,2,32,11,0,20,7,0,20,6,0,20,3,0,49,2,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"env"},{"t":"s","v":"env-has?"},{"t":"s","v":"name"},{"t":"s","v":"env-get"},{"t":"s","v":"env-parent"},{"t":"s","v":"parent"},{"t":"s","v":"env-walk"}]}},{"t":"s","v":"env-walk-set!"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,52,0,0,1,33,4,0,4,32,71,0,20,2,0,20,1,0,20,3,0,48,2,33,19,0,20,4,0,20,1,0,20,3,0,20,5,0,48,3,5,3,32,38,0,20,6,0,20,1,0,48,1,17,3,20,7,0,52,0,0,1,33,4,0,4,32,14,0,20,8,0,20,7,0,20,3,0,20,5,0,49,3,50],"constants":[{"t":"s","v":"nil?"},{"t":"s","v":"env"},{"t":"s","v":"env-has?"},{"t":"s","v":"name"},{"t":"s","v":"env-set!"},{"t":"s","v":"value"},{"t":"s","v":"env-parent"},{"t":"s","v":"parent"},{"t":"s","v":"env-walk-set!"}]}},{"t":"s","v":"vm-create-closure"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,20,1,0,20,2,0,48,1,17,3,20,2,0,52,3,0,1,33,34,0,20,2,0,1,5,0,52,4,0,2,17,5,20,7,0,52,6,0,1,33,6,0,1,8,0,32,3,0,20,7,0,32,3,0,1,8,0,17,4,52,9,0,0,17,6,1,8,0,17,7,51,10,0,17,9,5,20,11,0,48,0,5,20,12,0,17,5,20,13,0,20,14,0,20,15,0,2,20,16,0,1,17,0,52,4,0,2,2,49,5,50],"constants":[{"t":"s","v":"Create a closure from a code constant. Reads upvalue descriptors\n from the bytecode stream and captures values from the enclosing frame."},{"t":"s","v":"code-from-value"},{"t":"s","v":"code-val"},{"t":"s","v":"dict?"},{"t":"s","v":"get"},{"t":"s","v":"upvalue-count"},{"t":"s","v":"nil?"},{"t":"s","v":"n"},{"t":"n","v":0},{"t":"s","v":"list"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,198,0,20,3,0,20,4,0,48,1,17,0,20,3,0,20,4,0,48,1,17,1,20,6,0,1,7,0,52,5,0,2,33,105,0,20,4,0,1,9,0,52,8,0,2,17,3,20,11,0,52,10,0,1,17,4,20,13,0,20,14,0,52,12,0,2,33,13,0,20,13,0,20,14,0,52,8,0,2,32,55,0,20,15,0,20,17,0,1,18,0,52,8,0,2,20,4,0,1,20,0,52,8,0,2,20,11,0,52,19,0,2,52,16,0,2,48,1,17,5,20,13,0,20,14,0,20,22,0,52,21,0,3,5,20,22,0,32,24,0,20,4,0,1,24,0,52,8,0,2,1,25,0,52,8,0,2,20,11,0,52,23,0,2,17,2,20,26,0,20,27,0,20,28,0,48,2,5,20,1,0,1,7,0,52,19,0,2,21,1,0,5,20,29,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"uv-count"},{"t":"s","v":"frame-read-u8"},{"t":"s","v":"frame"},{"t":"s","v":"="},{"t":"s","v":"is-local"},{"t":"n","v":1},{"t":"s","v":"get"},{"t":"s","v":"local-cells"},{"t":"s","v":"str"},{"t":"s","v":"index"},{"t":"s","v":"has-key?"},{"t":"s","v":"cells"},{"t":"s","v":"key"},{"t":"s","v":"make-upvalue-cell"},{"t":"s","v":"vm-stack-get"},{"t":"s","v":"vm"},{"t":"s","v":"stack"},{"t":"s","v":"+"},{"t":"s","v":"base"},{"t":"s","v":"dict-set!"},{"t":"s","v":"c"},{"t":"s","v":"nth"},{"t":"s","v":"closure"},{"t":"s","v":"vm-upvalues"},{"t":"s","v":"append!"},{"t":"s","v":"result"},{"t":"s","v":"cell"},{"t":"s","v":"capture-loop"}]}},{"t":"s","v":"capture-loop"},{"t":"s","v":"result"},{"t":"s","v":"make-vm-closure"},{"t":"s","v":"code"},{"t":"s","v":"upvalues"},{"t":"s","v":"vm"},{"t":"s","v":"globals"}]}},{"t":"s","v":"vm-run"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[1,0,0,5,51,1,0,17,3,5,20,2,0,49,0,50],"constants":[{"t":"s","v":"Execute bytecode until all frames are exhausted.\n VmClosure calls push new frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop."},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,3,0,1,4,0,52,2,0,2,52,1,0,1,52,0,0,1,33,154,0,20,3,0,1,4,0,52,2,0,2,52,5,0,1,17,0,20,3,0,1,4,0,52,2,0,2,52,6,0,1,17,1,20,7,0,1,8,0,52,2,0,2,1,9,0,52,2,0,2,1,10,0,52,2,0,2,17,2,20,7,0,1,8,0,52,2,0,2,1,9,0,52,2,0,2,1,11,0,52,2,0,2,17,3,20,7,0,1,13,0,52,2,0,2,20,15,0,52,14,0,1,52,12,0,2,33,17,0,20,3,0,1,4,0,52,17,0,0,52,16,0,3,32,26,0,20,18,0,20,3,0,20,7,0,20,19,0,20,15,0,20,20,0,48,5,5,20,21,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"empty?"},{"t":"s","v":"get"},{"t":"s","v":"vm"},{"t":"s","v":"frames"},{"t":"s","v":"first"},{"t":"s","v":"rest"},{"t":"s","v":"frame"},{"t":"s","v":"closure"},{"t":"s","v":"vm-code"},{"t":"s","v":"vc-bytecode"},{"t":"s","v":"vc-constants"},{"t":"s","v":">="},{"t":"s","v":"ip"},{"t":"s","v":"len"},{"t":"s","v":"bc"},{"t":"s","v":"dict-set!"},{"t":"s","v":"list"},{"t":"s","v":"vm-step"},{"t":"s","v":"rest-frames"},{"t":"s","v":"consts"},{"t":"s","v":"loop"}]}},{"t":"s","v":"loop"}]}},{"t":"s","v":"vm-step"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,5,20,3,0,1,4,0,52,2,0,2,33,31,0,20,5,0,20,1,0,48,1,17,6,20,6,0,20,7,0,20,9,0,20,10,0,52,8,0,2,49,2,32,3,8,20,3,0,1,11,0,52,2,0,2,33,12,0,20,6,0,20,7,0,2,49,2,32,234,7,20,3,0,1,12,0,52,2,0,2,33,12,0,20,6,0,20,7,0,3,49,2,32,209,7,20,3,0,1,13,0,52,2,0,2,33,12,0,20,6,0,20,7,0,4,49,2,32,184,7,20,3,0,1,14,0,52,2,0,2,33,11,0,20,15,0,20,7,0,49,1,32,160,7,20,3,0,1,16,0,52,2,0,2,33,19,0,20,6,0,20,7,0,20,17,0,20,7,0,48,1,49,2,32,128,7,20,3,0,1,18,0,52,2,0,2,33,35,0,20,0,0,20,1,0,48,1,17,6,20,6,0,20,7,0,20,19,0,20,7,0,20,1,0,20,20,0,48,3,49,2,32,80,7,20,3,0,1,21,0,52,2,0,2,33,35,0,20,0,0,20,1,0,48,1,17,6,20,22,0,20,7,0,20,1,0,20,20,0,20,17,0,20,7,0,48,1,49,4,32,32,7,20,3,0,1,23,0,52,2,0,2,33,32,0,20,0,0,20,1,0,48,1,17,6,20,6,0,20,7,0,20,24,0,20,1,0,20,10,0,48,2,49,2,32,243,6,20,3,0,1,25,0,52,2,0,2,33,32,0,20,0,0,20,1,0,48,1,17,6,20,26,0,20,1,0,20,10,0,20,17,0,20,7,0,48,1,49,3,32,198,6,20,3,0,1,27,0,52,2,0,2,33,47,0,20,5,0,20,1,0,48,1,17,6,20,9,0,20,10,0,52,8,0,2,17,7,20,6,0,20,7,0,20,28,0,20,7,0,20,1,0,20,29,0,48,3,49,2,32,138,6,20,3,0,1,30,0,52,2,0,2,33,47,0,20,5,0,20,1,0,48,1,17,6,20,9,0,20,10,0,52,8,0,2,17,7,20,31,0,20,7,0,20,1,0,20,29,0,20,17,0,20,7,0,48,1,49,4,32,78,6,20,3,0,1,32,0,52,2,0,2,33,40,0,20,33,0,20,1,0,48,1,17,6,20,1,0,1,35,0,20,1,0,1,35,0,52,37,0,2,20,38,0,52,36,0,2,52,34,0,3,32,25,6,20,3,0,1,39,0,52,2,0,2,33,64,0,20,33,0,20,1,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,41,0,52,40,0,1,33,30,0,20,1,0,1,35,0,20,1,0,1,35,0,52,37,0,2,20,38,0,52,36,0,2,52,34,0,3,32,1,0,2,32,204,5,20,3,0,1,42,0,52,2,0,2,33,60,0,20,33,0,20,1,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,41,0,33,30,0,20,1,0,1,35,0,20,1,0,1,35,0,52,37,0,2,20,38,0,52,36,0,2,52,34,0,3,32,1,0,2,32,131,5,20,3,0,1,43,0,52,2,0,2,33,60,0,20,0,0,20,1,0,48,1,17,6,52,44,0,0,17,7,1,45,0,17,8,51,46,0,17,10,5,20,47,0,48,0,5,20,15,0,20,7,0,48,1,17,11,20,48,0,20,7,0,20,49,0,20,50,0,49,3,32,58,5,20,3,0,1,51,0,52,2,0,2,33,95,0,20,0,0,20,1,0,48,1,17,6,52,44,0,0,17,7,1,45,0,17,8,51,46,0,17,10,5,20,47,0,48,0,5,20,15,0,20,7,0,48,1,17,11,20,7,0,1,52,0,20,53,0,52,34,0,3,5,20,7,0,1,54,0,20,1,0,1,55,0,52,37,0,2,52,34,0,3,5,20,48,0,20,7,0,20,49,0,20,50,0,49,3,32,206,4,20,3,0,1,56,0,52,2,0,2,33,59,0,20,15,0,20,7,0,48,1,17,6,20,7,0,1,52,0,20,53,0,52,34,0,3,5,20,7,0,1,54,0,20,1,0,1,55,0,52,37,0,2,52,34,0,3,5,20,6,0,20,7,0,20,57,0,49,2,32,134,4,20,3,0,1,58,0,52,2,0,2,33,52,0,20,5,0,20,1,0,48,1,17,6,20,9,0,20,10,0,52,8,0,2,17,7,20,59,0,20,7,0,20,1,0,20,60,0,48,3,17,8,20,6,0,20,7,0,20,61,0,49,2,32,69,4,20,3,0,1,62,0,52,2,0,2,33,76,0,20,5,0,20,1,0,48,1,17,6,20,0,0,20,1,0,48,1,17,7,20,9,0,20,10,0,52,8,0,2,17,8,52,44,0,0,17,9,1,45,0,17,10,51,46,0,17,12,5,20,47,0,48,0,5,20,6,0,20,7,0,20,29,0,20,50,0,52,63,0,2,49,2,32,236,3,20,3,0,1,64,0,52,2,0,2,33,47,0,20,5,0,20,1,0,48,1,17,6,52,44,0,0,17,7,1,45,0,17,8,51,65,0,17,10,5,20,66,0,48,0,5,20,6,0,20,7,0,20,67,0,49,2,32,176,3,20,3,0,1,68,0,52,2,0,2,33,46,0,20,5,0,20,1,0,48,1,17,6,65,0,0,17,7,1,45,0,17,8,51,69,0,17,10,5,20,70,0,48,0,5,20,6,0,20,7,0,20,71,0,49,2,32,117,3,20,3,0,1,72,0,52,2,0,2,33,54,0,20,0,0,20,1,0,48,1,17,6,52,44,0,0,17,7,1,45,0,17,8,51,73,0,17,10,5,20,74,0,48,0,5,20,6,0,20,7,0,20,76,0,20,77,0,52,75,0,2,49,2,32,50,3,20,3,0,1,78,0,52,2,0,2,33,50,0,20,5,0,20,1,0,48,1,17,6,20,9,0,20,10,0,52,8,0,2,17,7,20,7,0,1,79,0,52,37,0,2,20,29,0,20,17,0,20,7,0,48,1,52,34,0,3,32,243,2,20,3,0,1,80,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,36,0,2,49,2,32,189,2,20,3,0,1,83,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,84,0,2,49,2,32,135,2,20,3,0,1,85,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,86,0,2,49,2,32,81,2,20,3,0,1,87,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,88,0,2,49,2,32,27,2,20,3,0,1,89,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,2,0,2,49,2,32,229,1,20,3,0,1,90,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,91,0,2,49,2,32,175,1,20,3,0,1,92,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,81,0,20,82,0,52,93,0,2,49,2,32,121,1,20,3,0,1,94,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,40,0,1,49,2,32,85,1,20,3,0,1,95,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,96,0,1,49,2,32,49,1,20,3,0,1,97,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,98,0,1,49,2,32,13,1,20,3,0,1,99,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,100,0,1,49,2,32,233,0,20,3,0,1,101,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,102,0,20,103,0,52,8,0,2,49,2,32,179,0,20,3,0,1,104,0,52,2,0,2,33,41,0,20,15,0,20,7,0,48,1,17,6,20,15,0,20,7,0,48,1,17,7,20,6,0,20,7,0,20,106,0,20,102,0,52,105,0,2,49,2,32,125,0,20,3,0,1,107,0,52,2,0,2,33,26,0,20,6,0,20,7,0,1,45,0,20,15,0,20,7,0,48,1,52,84,0,2,49,2,32,86,0,20,3,0,1,108,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,109,0,1,49,2,32,50,0,20,3,0,1,110,0,52,2,0,2,33,23,0,20,6,0,20,7,0,20,15,0,20,7,0,48,1,52,111,0,1,49,2,32,14,0,1,113,0,20,3,0,52,76,0,2,52,112,0,1,50],"constants":[{"t":"s","v":"frame-read-u8"},{"t":"s","v":"frame"},{"t":"s","v":"="},{"t":"s","v":"op"},{"t":"n","v":1},{"t":"s","v":"frame-read-u16"},{"t":"s","v":"vm-push"},{"t":"s","v":"vm"},{"t":"s","v":"nth"},{"t":"s","v":"consts"},{"t":"s","v":"idx"},{"t":"n","v":2},{"t":"n","v":3},{"t":"n","v":4},{"t":"n","v":5},{"t":"s","v":"vm-pop"},{"t":"n","v":6},{"t":"s","v":"vm-peek"},{"t":"n","v":16},{"t":"s","v":"frame-local-get"},{"t":"s","v":"slot"},{"t":"n","v":17},{"t":"s","v":"frame-local-set"},{"t":"n","v":18},{"t":"s","v":"frame-upvalue-get"},{"t":"n","v":19},{"t":"s","v":"frame-upvalue-set"},{"t":"n","v":20},{"t":"s","v":"vm-global-get"},{"t":"s","v":"name"},{"t":"n","v":21},{"t":"s","v":"vm-global-set"},{"t":"n","v":32},{"t":"s","v":"frame-read-i16"},{"t":"s","v":"dict-set!"},{"t":"s","v":"ip"},{"t":"s","v":"+"},{"t":"s","v":"get"},{"t":"s","v":"offset"},{"t":"n","v":33},{"t":"s","v":"not"},{"t":"s","v":"v"},{"t":"n","v":34},{"t":"n","v":48},{"t":"s","v":"list"},{"t":"n","v":0},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,41,0,20,4,0,20,5,0,48,1,20,6,0,52,3,0,2,21,6,0,5,20,1,0,1,8,0,52,7,0,2,21,1,0,5,20,9,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"argc"},{"t":"s","v":"cons"},{"t":"s","v":"vm-pop"},{"t":"s","v":"vm"},{"t":"s","v":"args-rev"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"collect-args"}]}},{"t":"s","v":"collect-args"},{"t":"s","v":"vm-call"},{"t":"s","v":"f"},{"t":"s","v":"args-rev"},{"t":"n","v":49},{"t":"s","v":"frames"},{"t":"s","v":"rest-frames"},{"t":"s","v":"sp"},{"t":"s","v":"base"},{"t":"n","v":50},{"t":"s","v":"result"},{"t":"n","v":51},{"t":"s","v":"vm-create-closure"},{"t":"s","v":"code-val"},{"t":"s","v":"cl"},{"t":"n","v":52},{"t":"s","v":"call-primitive"},{"t":"n","v":64},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,41,0,20,4,0,20,5,0,48,1,20,6,0,52,3,0,2,21,6,0,5,20,1,0,1,8,0,52,7,0,2,21,1,0,5,20,9,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"count"},{"t":"s","v":"cons"},{"t":"s","v":"vm-pop"},{"t":"s","v":"vm"},{"t":"s","v":"items-rev"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"collect-items"}]}},{"t":"s","v":"collect-items"},{"t":"s","v":"items-rev"},{"t":"n","v":65},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,56,0,20,3,0,20,4,0,48,1,17,0,20,3,0,20,4,0,48,1,17,1,20,6,0,20,7,0,20,8,0,52,5,0,3,5,20,1,0,1,10,0,52,9,0,2,21,1,0,5,20,11,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"count"},{"t":"s","v":"vm-pop"},{"t":"s","v":"vm"},{"t":"s","v":"dict-set!"},{"t":"s","v":"d"},{"t":"s","v":"k"},{"t":"s","v":"v"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"collect-pairs"}]}},{"t":"s","v":"collect-pairs"},{"t":"s","v":"d"},{"t":"n","v":144},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,41,0,20,4,0,20,5,0,48,1,20,6,0,52,3,0,2,21,6,0,5,20,1,0,1,8,0,52,7,0,2,21,1,0,5,20,9,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"count"},{"t":"s","v":"cons"},{"t":"s","v":"vm-pop"},{"t":"s","v":"vm"},{"t":"s","v":"parts-rev"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"collect-parts"}]}},{"t":"s","v":"collect-parts"},{"t":"s","v":"apply"},{"t":"s","v":"str"},{"t":"s","v":"parts-rev"},{"t":"n","v":128},{"t":"s","v":"globals"},{"t":"n","v":160},{"t":"s","v":"a"},{"t":"s","v":"b"},{"t":"n","v":161},{"t":"s","v":"-"},{"t":"n","v":162},{"t":"s","v":"*"},{"t":"n","v":163},{"t":"s","v":"/"},{"t":"n","v":164},{"t":"n","v":165},{"t":"s","v":"<"},{"t":"n","v":166},{"t":"s","v":">"},{"t":"n","v":167},{"t":"n","v":168},{"t":"s","v":"len"},{"t":"n","v":169},{"t":"s","v":"first"},{"t":"n","v":170},{"t":"s","v":"rest"},{"t":"n","v":171},{"t":"s","v":"coll"},{"t":"s","v":"n"},{"t":"n","v":172},{"t":"s","v":"cons"},{"t":"s","v":"x"},{"t":"n","v":173},{"t":"n","v":174},{"t":"s","v":"inc"},{"t":"n","v":175},{"t":"s","v":"dec"},{"t":"s","v":"error"},{"t":"s","v":"VM: unknown opcode "}]}},{"t":"s","v":"vm-call-closure"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,48,1,17,3,20,2,0,20,3,0,20,4,0,20,5,0,48,3,5,20,6,0,20,3,0,48,1,5,20,7,0,20,3,0,49,1,50],"constants":[{"t":"s","v":"make-vm"},{"t":"s","v":"globals"},{"t":"s","v":"vm-push-frame"},{"t":"s","v":"vm"},{"t":"s","v":"closure"},{"t":"s","v":"args"},{"t":"s","v":"vm-run"},{"t":"s","v":"vm-pop"}]}},{"t":"s","v":"vm-execute-module"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,0,0,20,1,0,52,2,0,0,1,3,0,20,4,0,2,48,5,17,2,20,5,0,20,4,0,48,1,17,3,20,6,0,20,7,0,1,8,0,48,2,17,4,1,8,0,17,5,20,1,0,1,10,0,52,9,0,2,17,6,51,11,0,17,8,5,20,12,0,48,0,5,20,14,0,1,15,0,20,16,0,52,2,0,1,52,13,0,3,5,20,17,0,20,14,0,48,1,5,20,18,0,20,14,0,49,1,50],"constants":[{"t":"s","v":"make-vm-closure"},{"t":"s","v":"code"},{"t":"s","v":"list"},{"t":"s","v":"module"},{"t":"s","v":"globals"},{"t":"s","v":"make-vm"},{"t":"s","v":"make-vm-frame"},{"t":"s","v":"closure"},{"t":"n","v":0},{"t":"s","v":"get"},{"t":"s","v":"vc-locals"},{"t":"code","v":{"arity":0,"upvalue-count":0,"bytecode":[20,1,0,20,2,0,52,0,0,2,33,32,0,20,3,0,20,4,0,2,48,2,5,20,1,0,1,6,0,52,5,0,2,21,1,0,5,20,7,0,49,0,32,1,0,2,50],"constants":[{"t":"s","v":"<"},{"t":"s","v":"i"},{"t":"s","v":"total"},{"t":"s","v":"vm-push"},{"t":"s","v":"vm"},{"t":"s","v":"+"},{"t":"n","v":1},{"t":"s","v":"pad-loop"}]}},{"t":"s","v":"pad-loop"},{"t":"s","v":"dict-set!"},{"t":"s","v":"vm"},{"t":"s","v":"frames"},{"t":"s","v":"frame"},{"t":"s","v":"vm-run"},{"t":"s","v":"vm-pop"}]}}]}} \ No newline at end of file diff --git a/shared/static/wasm/sx_browser.bc.js b/shared/static/wasm/sx_browser.bc.js index 532cc4af..0da2763a 100644 --- a/shared/static/wasm/sx_browser.bc.js +++ b/shared/static/wasm/sx_browser.bc.js @@ -24745,8 +24745,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df var runtime = globalThis.jsoo_runtime, caml_fresh_oo_id = runtime.caml_fresh_oo_id, - caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace, - caml_ml_string_length = runtime.caml_ml_string_length; + caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace; function caml_call1(f, a0){ return (f.l >= 0 ? f.l : f.l = f.length) === 1 ? f(a0) @@ -25322,7 +25321,6 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df (null, function(param, v, acc){return [0, v, acc];}, d, 0); } var - cst_chars = " chars>", cst = ")>", cst_s_s = "<%s(%s)>", d = [0, [4, 0, 0, 0, 0], "%d"], @@ -25339,16 +25337,8 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df ""], j = [0, [12, 60, [2, 0, [12, 40, [2, 0, [11, cst, 0]]]]], cst_s_s], k = [0, [11, ""], - l = - [0, - [11, ""], - m = - [0, - [11, ""], - n = [0, [11, ""], - o = [0, [11, ""]; + l = [0, [11, ""], + m = [0, [11, ""]; function inspect(param){ if(typeof param === "number") return cst_nil; var cst = " ", cst$0 = ", "; @@ -25356,14 +25346,16 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 0: return param[1] ? cst_true : cst_false; case 1: - var n$0 = param[1]; - return Stdlib_Float[18].call(null, n$0) - ? caml_call1(Stdlib_Printf[4].call(null, d), n$0 | 0) - : caml_call1(Stdlib_Printf[4].call(null, e), n$0); + var n = param[1]; + return Stdlib_Float[18].call(null, n) + ? caml_call1(Stdlib_Printf[4].call(null, d), n | 0) + : caml_call1(Stdlib_Printf[4].call(null, e), n); case 2: var s = param[1], - buf = Stdlib_Buffer[1].call(null, caml_ml_string_length(s) + 2 | 0); + buf = + Stdlib_Buffer[1].call + (null, runtime.caml_ml_string_length(s) + 2 | 0); Stdlib_Buffer[12].call(null, buf, 34); Stdlib_String[30].call (null, @@ -25386,8 +25378,6 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df s); Stdlib_Buffer[12].call(null, buf, 34); return Stdlib_Buffer[2].call(null, buf); - case 3: - var s$0 = param[1]; return s$0; case 4: var k$0 = param[1]; return Stdlib[28].call(null, ":", k$0); case 5: @@ -25404,34 +25394,34 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df }, d$0, 0), - q = Stdlib_String[7].call(null, cst, pairs), - r = Stdlib[28].call(null, q, "}"); - return Stdlib[28].call(null, "{", r); + p = Stdlib_String[7].call(null, cst, pairs), + q = Stdlib[28].call(null, p, "}"); + return Stdlib[28].call(null, "{", q); case 7: var l$0 = param[1], match = l$0[4]; - if(match) var n$1 = match[1], tag = n$1; else var tag = cst_lambda; - var t = Stdlib_String[7].call(null, cst$0, l$0[1]); - return caml_call2(Stdlib_Printf[4].call(null, g), tag, t); + if(match) var n$0 = match[1], tag = n$0; else var tag = cst_lambda; + var r = Stdlib_String[7].call(null, cst$0, l$0[1]); + return caml_call2(Stdlib_Printf[4].call(null, g), tag, r); case 8: var c = param[1], - u = Stdlib_String[7].call(null, cst$0, c[2]), - v = c[1]; - return caml_call2(Stdlib_Printf[4].call(null, h), v, u); + t = Stdlib_String[7].call(null, cst$0, c[2]), + u = c[1]; + return caml_call2(Stdlib_Printf[4].call(null, h), u, t); case 9: var i$0 = param[1], - w = Stdlib_String[7].call(null, cst$0, i$0[2]), - x = i$0[1]; - return caml_call2(Stdlib_Printf[4].call(null, i), x, w); + v = Stdlib_String[7].call(null, cst$0, i$0[2]), + w = i$0[1]; + return caml_call2(Stdlib_Printf[4].call(null, i), w, v); case 10: var m$0 = param[1], match$0 = m$0[5]; if(match$0) - var n$2 = match$0[1], tag$0 = n$2; + var n$1 = match$0[1], tag$0 = n$1; else var tag$0 = cst_macro; - var y = Stdlib_String[7].call(null, cst$0, m$0[1]); - return caml_call2(Stdlib_Printf[4].call(null, j), tag$0, y); + var x = Stdlib_String[7].call(null, cst$0, m$0[1]); + return caml_call2(Stdlib_Printf[4].call(null, j), tag$0, x); case 11: return ""; case 12: @@ -25441,16 +25431,8 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df return caml_call1(Stdlib_Printf[4].call(null, k), name); case 14: return ""; - case 15: - var s$1 = param[1]; - return caml_call1 - (Stdlib_Printf[4].call(null, l), caml_ml_string_length(s$1)); case 16: return ""; - case 17: - var s$2 = param[1]; - return caml_call1 - (Stdlib_Printf[4].call(null, m), caml_ml_string_length(s$2)); case 18: return ""; case 19: @@ -25458,21 +25440,22 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 20: return ""; case 21: - var f$0 = param[1], z = f$0[1]; - return caml_call1(Stdlib_Printf[4].call(null, n), z); - default: + var f$0 = param[1], y = f$0[1]; + return caml_call1(Stdlib_Printf[4].call(null, l), y); + case 22: var cl = param[1], match$1 = cl[3]; - if(match$1) var n$3 = match$1[1], n$4 = n$3; else var n$4 = "anon"; - return caml_call1(Stdlib_Printf[4].call(null, o), n$4); + if(match$1) var n$2 = match$1[1], n$3 = n$2; else var n$3 = "anon"; + return caml_call1(Stdlib_Printf[4].call(null, m), n$3); + default: var s$0 = param[1]; return s$0; } var a = Stdlib_List[20].call(null, inspect, items), b = Stdlib_String[7].call(null, cst, a), - p = Stdlib[28].call(null, b, ")"); - return Stdlib[28].call(null, "(", p); + o = Stdlib[28].call(null, b, ")"); + return Stdlib[28].call(null, "(", o); } runtime.caml_register_global - (104, + (102, [0, sym_to_id, id_to_sym, @@ -25551,7 +25534,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 820 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 803 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_parser:[F(1)*,F(1),F(1),F(1)*,F(1),F(1)*,F(1)*,F(1)*,F(1),F(1),F(1),F(1),F(2),F(1),F(1),F(1)] (function (globalThis){ @@ -25953,7 +25936,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 1223 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 1206 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_primitives:[N,N,N,N,F(2),F(1),F(1),N,F(1),F(1),F(1),F(1)*,F(1)] (function (globalThis){ @@ -26108,6 +26091,8 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 2: case 3: case 4: + case 15: + case 17: var s = t[1]; return s; default: return Sx_types[72].call(null, t); } @@ -26300,6 +26285,32 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df register ("parse-int", function(args){ + function parse_leading_int(s){ + var + len = caml_ml_string_length(s), + a = 0 < len, + neg = a ? 45 === caml_string_get(s, 0) : a; + if(neg) + var start = 1; + else + var + b = 0 < len, + d = b ? 43 === caml_string_get(s, 0) : b, + start = d ? 1 : 0; + var j = start; + for(;;){ + if + (j < len + && 48 <= caml_string_get(s, j) && 57 >= caml_string_get(s, j)){var j$0 = j + 1 | 0; j = j$0; continue;} + if(start >= j) return 0; + var + n = + runtime.caml_int_of_string + (Stdlib_String[16].call(null, s, start, j - start | 0)), + c = neg ? - n | 0 : n; + return [0, c]; + } + } a: if(args){ var a = args[1]; @@ -26313,12 +26324,12 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df var match = args[2], s = a[1]; if(match){ if(match[2]) break a; - var default_val$0 = match[1], match$0 = Stdlib[34].call(null, s); + var default_val$0 = match[1], match$0 = parse_leading_int(s); if(! match$0) return default_val$0; var n$0 = match$0[1]; return [1, n$0]; } - var match$1 = Stdlib[34].call(null, s); + var match$1 = parse_leading_int(s); if(! match$1) return 0; var n$1 = match$1[1]; return [1, n$1]; @@ -26877,32 +26888,99 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df register ("index-of", function(args){ + a: if(args){ - var a = args[1]; - if(typeof a !== "number" && 2 === a[0]){ - var b = args[2]; - if(b){ - var c = b[1]; - if(typeof c !== "number" && 2 === c[0] && ! b[2]){ - var - needle = c[1], - haystack = a[1], - nl = caml_ml_string_length(needle), - hl = caml_ml_string_length(haystack), - i = 0; - for(;;){ - if(hl < (i + nl | 0)) return w; - if(Stdlib_String[16].call(null, haystack, i, nl) === needle) - return [1, i]; - var i$0 = i + 1 | 0; - i = i$0; + var b = args[1]; + if(typeof b !== "number"){ + switch(b[0]){ + case 2: + var c = args[2]; + if(! c) break a; + var d = c[1]; + if(typeof d === "number") break a; + if(2 !== d[0]) break a; + if(c[2]) break a; + var + needle = d[1], + haystack = b[1], + nl = caml_ml_string_length(needle), + hl = caml_ml_string_length(haystack), + i = 0; + for(;;){ + if(hl < (i + nl | 0)) return w; + if(Stdlib_String[16].call(null, haystack, i, nl) === needle) + return [1, i]; + var i$0 = i + 1 | 0; + i = i$0; + } + break; + case 5: + var e = args[2]; + if(! e) break a; + if(e[2]) break a; + var target = e[1], items = b[1]; + break; + case 19: + var f = args[2], g = b[1][1]; + if(! f) break a; + if(f[2]) break a; + var target = f[1], items = g; + break; + default: break a; + } + var i$1 = 0, param = items; + for(;;){ + if(! param) return 0; + var h = param[1]; + b: + { + if(typeof h === "number"){ + if(typeof target === "number"){var a = 1; break b;} } + else + switch(h[0]){ + case 0: + if(typeof target !== "number" && 0 === target[0]){ + var y = target[1], x = h[1], a = x === y; + break b; + } + break; + case 1: + if(typeof target !== "number" && 1 === target[0]){ + var y$0 = target[1], x$0 = h[1], a = x$0 === y$0; + break b; + } + break; + case 2: + if(typeof target !== "number" && 2 === target[0]){ + var y$1 = target[1], x$1 = h[1], a = x$1 === y$1; + break b; + } + break; + case 3: + if(typeof target !== "number" && 3 === target[0]){ + var y$2 = target[1], x$2 = h[1], a = x$2 === y$2; + break b; + } + break; + case 4: + if(typeof target !== "number" && 4 === target[0]){ + var y$3 = target[1], x$3 = h[1], a = x$3 === y$3; + break b; + } + break; + } + var a = h === target; } + if(a) return [1, i$1]; + var tl = param[2], i$2 = i$1 + 1 | 0; + i$1 = i$2; + param = tl; } } } throw caml_maybe_attach_backtrace - ([0, Sx_types[7], "index-of: 2 string args"], 1); + ([0, Sx_types[7], "index-of: 2 string args or list+target"], 1); }); register ("substring", @@ -28405,9 +28483,17 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df register ("serialize", function(args){ - if(args && ! args[2]){ + a: + if(args){ var a = args[1]; - return [2, Sx_types[72].call(null, a)]; + if(typeof a !== "number") + switch(a[0]){ + case 15: + if(args[2]) break a; var s = a[1]; return [2, s]; + case 17: + if(args[2]) break a; var s$0 = a[1]; return [2, s$0]; + } + if(! args[2]) return [2, Sx_types[72].call(null, a)]; } throw caml_maybe_attach_backtrace ([0, Sx_types[7], "serialize: 1 arg"], 1); @@ -29352,7 +29438,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 4623 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 4709 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_runtime:[F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(3),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(1),F(1),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(2),F(1),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(2),F(2),F(2),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(1),F(2),F(2),F(3),F(2),F(3),F(1),F(1),F(3),F(2),F(2),F(1),F(1),F(3),F(2),F(2),F(2),F(1),F(1),F(2),F(1),F(1),F(1),F(2),F(2),F(3),F(1),F(1),F(1),F(1),F(2),F(2),F(1),F(1),F(1),F(2),F(1),F(1),F(2),F(1),F(2),F(1)*,F(1)*,F(1),F(2),F(2),F(3),F(3),F(1),F(1),F(2),F(2),F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1)*,F(1),F(1)*,F(2)*,F(1),F(1),F(1)*,F(2),F(2),F(2),F(2),F(1)*,F(2),F(1),F(4),F(2),F(1),F(1),F(2),F(2),F(1),N,F(2),N,N,F(1)*,F(1),F(2),F(1),F(2),F(2),F(1),F(2),F(1),F(1)*,F(1)*,F(2),F(1)*,F(2)*,F(1)*,F(1)*,F(2),F(4),F(4),F(4),F(2),F(2),F(2),F(2),F(2),F(2),F(2)*,F(1)*] (function (globalThis){ @@ -30303,7 +30389,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 5575 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 5661 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_ref:[N,F(1),N,N,N,N,F(3)*,F(3)*,F(1),F(1),F(1),F(1),F(1),F(1),F(3)*,F(2)*,F(2)*,F(4)*,F(4)*,F(2)*,F(6)*,F(3)*,F(3)*,F(3)*,F(2)*,F(4)*,F(4)*,F(5)*,F(3)*,F(3)*,F(3)*,F(3)*,F(3)*,F(4)*,F(4)*,F(1)*,F(3)*,F(2)*,F(2)*,F(4)*,F(3)*,F(1)*,F(4)*,F(2)*,F(1),F(3)*,F(3)*,F(2)*,F(2),F(2),F(2),F(2),F(1),F(2),F(1),F(1),F(1),F(1),F(2),F(2),F(1),F(1),N,F(2),N,N,N,F(1),N,F(1),F(2),F(2),F(3),F(3),F(2),F(1),F(1),F(2),F(2),F(2),F(3),F(1),F(2),F(2),F(1),F(2),F(2),F(3),F(2),F(2),F(2),F(3),F(1),F(1),F(1),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(2),F(3),F(4),F(1),F(1)*,F(2),F(4),F(3),F(3),F(3),F(3),F(3),F(3),F(3),F(1),F(5),F(4),F(2),F(1),F(2),F(1),F(1),F(1)] (function (globalThis){ @@ -34967,7 +35053,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 10240 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 10326 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_vm:[N,N,F(1)*,N,F(1)*,F(2),F(1),F(1),F(1),F(1),F(1),F(1)*,N,N,N,F(1),F(1),F(3),F(1),F(3),F(2),F(3),F(1),F(2),F(2),F(1),F(1)*,F(2),F(1)] (function (globalThis){ @@ -37231,7 +37317,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 12505 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 12591 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_scope:[N,N,N,F(1),F(1),F(1),N,F(1)] (function (globalThis){ @@ -37719,7 +37805,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# 12994 "../lib/.sx.objs/jsoo/default/sx.cma.js" +//# 13080 "../lib/.sx.objs/jsoo/default/sx.cma.js" //# shape: Sx_render:[N,N,N,F(1),F(1),F(1),F(1),F(1),N,F(2),F(3),F(2),F(2),F(3),F(3),F(3),F(2),F(3),F(2),F(2),F(3),F(2),F(2),F(2),F(3),F(4),F(4),F(4),F(3),F(3),F(4),F(3),F(3),F(2),F(1)] (function (globalThis){ @@ -38203,8 +38289,6 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df continue; case 5: var b = expr[1]; if(b){var args = b[2], head = b[1]; break a;} break; - case 15: - var s$1 = expr[1]; return s$1; case 19: var c = expr[1][1]; if(c){var args = c[2], head = c[1]; break a;} @@ -38212,6 +38296,9 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 2: case 4: var s = expr[1]; return escape_html(s); + case 15: + case 17: + var s$1 = expr[1]; return s$1; default: var expr$1 = Sx_ref[143].call(null, expr, [18, env]); expr = expr$1; @@ -38268,8 +38355,8 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df if(tag === cst$9) return render_children(args, env); if(tag === cst_raw){ var - p = Stdlib_List[6].call(null, args), - v$2 = Sx_ref[143].call(null, p, [18, env]); + q = Stdlib_List[6].call(null, args), + v$2 = Sx_ref[143].call(null, q, [18, env]); if(typeof v$2 !== "number") switch(v$2[0]){case 2:case 15: var s = v$2[1]; return s;} return Sx_types[21].call(null, v$2); @@ -38292,23 +38379,23 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df if(tag === cst_map_indexed) return render_map(args, env, 1); if(tag !== cst_when) break a; var - k = Stdlib_List[6].call(null, args), - cond_val = Sx_ref[143].call(null, k, [18, env]); + l = Stdlib_List[6].call(null, args), + cond_val = Sx_ref[143].call(null, l, [18, env]); if(! Sx_types[42].call(null, cond_val)) return cst; var - l = Stdlib_List[7].call(null, args), - n = + n = Stdlib_List[7].call(null, args), + o = Stdlib_List[20].call - (null, function(e){return do_render_to_html(e, env);}, l); - return Stdlib_String[7].call(null, cst, n); + (null, function(e){return do_render_to_html(e, env);}, n); + return Stdlib_String[7].call(null, cst, o); } return counter < 50 ? render_let$0(counter + 1 | 0, args, env) : caml_trampoline_return(render_let$0, [0, args, env]); } var - o = Stdlib_List[6].call(null, args), - cond_val$0 = Sx_ref[143].call(null, o, [18, env]); + p = Stdlib_List[6].call(null, args), + cond_val$0 = Sx_ref[143].call(null, p, [18, env]); if(Sx_types[42].call(null, cond_val$0)){ if(1 >= Stdlib_List[1].call(null, args)) return cst; var d = Stdlib_List[8].call(null, args, 1); @@ -38370,7 +38457,7 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 9: var i = v[1], - f = + g = Stdlib_List[20].call (null, function(v){ @@ -38387,11 +38474,11 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df return Sx_runtime[2].call(null, v); }, [0, [3, tag], args]), - g = Stdlib_String[7].call(null, cst$3, f), - h = Stdlib[28].call(null, g, cst$2), - call_sx = Stdlib[28].call(null, cst$4, h), - j = i[1], - a = caml_call2(Stdlib_Printf[4].call(null, b), j, call_sx); + h = Stdlib_String[7].call(null, cst$3, g), + j = Stdlib[28].call(null, h, cst$2), + call_sx = Stdlib[28].call(null, cst$4, j), + k = i[1], + a = caml_call2(Stdlib_Printf[4].call(null, b), k, call_sx); break a; case 10: var @@ -38401,15 +38488,25 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df break a; } var - result$0 = Sx_ref[143].call(null, [5, [0, head, args]], [18, env]), - a = do_render_to_html(result$0, env); + result$1 = Sx_ref[143].call(null, [5, [0, head, args]], [18, env]), + a = do_render_to_html(result$1, env); } return a; } - catch(exn$0){ - var exn = caml_wrap_exception(exn$0); - if(exn[1] === Sx_types[7]) return cst; - throw caml_maybe_attach_backtrace(exn, 0); + catch(exn$1){ + var exn = caml_wrap_exception(exn$1); + if(exn[1] !== Sx_types[7]) throw caml_maybe_attach_backtrace(exn, 0); + try{ + var + result$0 = Sx_ref[143].call(null, [5, [0, head, args]], [18, env]), + f = do_render_to_html(result$0, env); + return f; + } + catch(exn){ + var exn$0 = caml_wrap_exception(exn); + if(exn$0[1] === Sx_types[7]) return cst; + throw caml_maybe_attach_backtrace(exn$0, 0); + } } } var result = Sx_ref[143].call(null, [5, [0, head, args]], [18, env]); @@ -38818,8 +38915,6 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df continue; case 5: var a = expr[1]; if(a){var args = a[2], head = a[1]; break a;} break; - case 15: - var s$1 = expr[1]; return Stdlib_Buffer[16].call(null, buf, s$1); case 19: var b = expr[1][1]; if(b){var args = b[2], head = b[1]; break a;} @@ -38827,6 +38922,9 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df case 2: case 4: var s = expr[1]; return escape_html_buf(buf, s); + case 15: + case 17: + var s$1 = expr[1]; return Stdlib_Buffer[16].call(null, buf, s$1); default: var expr$1 = Sx_ref[143].call(null, expr, [18, env]); expr = expr$1; @@ -42412,4 +42510,4 @@ a7=102,b7=114,b8="Stdlib__Type",eF="Stdlib__Buffer",de="Js_of_ocaml__Dom_svg",df } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3hfYnJvd3Nlci5iYy5qcyIsInNlY3Rpb25zIjpbeyJvZmZzZXQiOnsibGluZSI6MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL3N4X2Jyb3dzZXIuYmMucnVudGltZS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK3N5bmMuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JsYWtlMi5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2VmZmVjdC5qcyIsIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLytkb21haW4uanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rcnVudGltZV9ldmVudHMuanMiLCIvYnVpbHRpbi8renN0ZC5qcyIsIi9idWlsdGluLyt3ZWFrLmpzIiwiL2J1aWx0aW4vK2djLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytncmFwaGljcy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rcHJuZy5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK3N0ci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgcmV0dXJuIHMucmVwZWF0KG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5KG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsIGxlbiAtPSAxMDI0KVxuICAgIHMgKz0gZi5hcHBseShudWxsLCBhLnNsaWNlKGksIGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCwgbGVuIC09IDEwMjQpXG4gICAgcyArPSBmLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgZWxzZSByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICAgIGNhc2UgMCAvKiBCWVRFUyAqLzpcbiAgICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICAgIGNhc2UgNCAvKiBBUlJBWSAqLzpcbiAgICAgIHJldHVybiBzLmNbaV07XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIGlmIChpICsgMSA9PT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSksXG4gICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4KSB8IGIxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpLFxuICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCkgfCAoYjMgPDwgMTYpIHwgKGIyIDw8IDgpIHwgYjE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpLFxuICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAxKSxcbiAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0KSB8IChiMyA8PCAxNikgfCAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQoX3MsIF9pLCBfYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocywgaSwgaTE2KSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhmZiAmIChpMTYgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocywgaSwgaTMyKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhmZiAmIChpMzIgPj4gMjQpLFxuICAgIGIzID0gMHhmZiAmIChpMzIgPj4gMTYpLFxuICAgIGIyID0gMHhmZiAmIChpMzIgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLCBpLCBpNjQpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczoganNvb190ZXh0X2VuY29kZXJcbnZhciBqc29vX3RleHRfZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2RlclxudmFyIGpzb29fdGV4dF9kZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHtcbiAgICByZXR1cm4gbmV3IE1sQnl0ZXMoOSwgcywgcy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhID0ganNvb190ZXh0X2VuY29kZXIuZW5jb2RlKHMpO1xuICAgIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczoganNvb190ZXh0X2RlY29kZXJcbmNsYXNzIE1sQnl0ZXMge1xuICBjb25zdHJ1Y3Rvcih0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgICB0aGlzLnQgPSB0YWc7XG4gICAgdGhpcy5jID0gY29udGVudHM7XG4gICAgdGhpcy5sID0gbGVuZ3RoO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgc3dpdGNoICh0aGlzLnQpIHtcbiAgICAgIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIGNhc2UgOCAvKkJZVEVTIHwgTk9UX0FTQ0lJKi86XG4gICAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgMCAvKkJZVEVTIHwgVU5LTk9XTiovOlxuICAgICAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgICBlbHNlIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgfVxuXG4gIHRvVXRmMTYoKSB7XG4gICAgaWYgKHRoaXMudCA9PT0gOSkgcmV0dXJuIHRoaXMuYztcbiAgICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXModGhpcyk7XG4gICAgcmV0dXJuIGpzb29fdGV4dF9kZWNvZGVyLmRlY29kZShhKTtcbiAgfVxuXG4gIHNsaWNlKCkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50ID09PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gICAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCwgY29udGVudCwgdGhpcy5sKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09PSAyIC8qIFBBUlRJQUwgKi8pIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgXCJcXDBcIik7XG4gIGVsc2Ugcy5jID0gY2FtbF9zdWJfdWludDhfYXJyYXlfdG9fanNieXRlcyhzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYyxcbiAgICBsID0gYi5sZW5ndGgsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocykge1xuICBpZiAocy50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbiA/IDIgOiA5LCBcIlwiLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcoX2xlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuID8gMiA6IDksIFwiXCIsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIDAsIGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgMCwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShhLnNsaWNlKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5KGEpIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCwgYSwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICBzMS50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgczIudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBzMS5jIDwgczIuYyA/IC0xIDogczEuYyA+IHMyLmMgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZiAoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gczEuYyA9PT0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAxIC0gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gMSAtIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPD0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPCBzMi5jID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsIHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0KGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSBsID09PSBzLmwgPyAwIC8qIEJZVEVTIHwgVU5LTk9XTiAqLyA6IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChcbiAgICBpMiA9PT0gMCAmJlxuICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpXG4gICkge1xuICAgIHMyLmMgPVxuICAgICAgczEudCA9PT0gNCAvKiBBUlJBWSAqL1xuICAgICAgICA/IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbilcbiAgICAgICAgOiBpMSA9PT0gMCAmJiBzMS5jLmxlbmd0aCA9PT0gbGVuXG4gICAgICAgICAgPyBzMS5jXG4gICAgICAgICAgOiBzMS5jLnNsaWNlKGkxLCBpMSArIGxlbik7XG4gICAgczIudCA9IHMyLmMubGVuZ3RoID09PSBzMi5sID8gMCAvKiBCWVRFUyB8IFVOS05PV04gKi8gOiAyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz1cbiAgICAgIHMxLnQgPT09IDQgLyogQVJSQVkgKi9cbiAgICAgICAgPyBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pXG4gICAgICAgIDogaTEgPT09IDAgJiYgczEuYy5sZW5ndGggPT09IGxlblxuICAgICAgICAgID8gczEuY1xuICAgICAgICAgIDogczEuYy5zbGljZShpMSwgaTEgKyBsZW4pO1xuICAgIHMyLnQgPSBzMi5jLmxlbmd0aCA9PT0gczIubCA/IDAgLyogQllURVMgfCBVTktOT1dOICovIDogMjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsXG4gICAgICBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMltpMiArIGldID0gYzFbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzJbaTIgKyBpXSA9IGMxW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4obGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzJbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLCBiLCBjLCBkLCBlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSwgYiwgYywgZCwgZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykge1xuICByZXR1cm4gcy5sO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSwgczIpIHtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoMCwgczEuYyArIHMyLmMsIHMxLmwgKyBzMi5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gczEgPCBzMiA/IC0xIDogczEgPiBzMiA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYgKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gczEgPD0gczIgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBzMSA8IHMyID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7XG4gIHJldHVybiB4O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG52YXIganNvb190ZXh0X2RlY29kZXJfYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9kZWNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBzO1xuICB2YXIgYSA9XG4gICAgcy5sZW5ndGggPD0ganNvb190ZXh0X2RlY29kZXJfYnVmZi5sZW5ndGhcbiAgICAgID8gbmV3IFVpbnQ4QXJyYXkoanNvb190ZXh0X2RlY29kZXJfYnVmZiwgMCwgcy5sZW5ndGgpXG4gICAgICA6IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgYVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4ganNvb190ZXh0X2RlY29kZXIuZGVjb2RlKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgYSA9IGpzb29fdGV4dF9lbmNvZGVyLmVuY29kZShzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcygwLCBzLCBzLmxlbmd0aCk7XG59XG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIHMudG9VdGYxNigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiBzIGluc3RhbmNlb2YgTWxCeXRlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JldHVybnMgYSAoZnVsbCkgc3RyaW5nIG9mIGJ5dGVzIG9yIGFuIGFycmF5XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gICAgICByZXR1cm4gcy5jO1xuICAgIGRlZmF1bHQ6IC8qIEJZVEVTIG9yIEFSUkFZICovXG4gICAgICByZXR1cm4gcy5jO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgcmV0dXJuIHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc2J5dGVzXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmddIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc3N0cmluZ10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7XG4gIHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNdIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkge1xuICByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9zdHJpbmdfb2ZfanNieXRlc10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogMHgyMCxcbiAgQ09ERV9JTlQ4OiAweDAwLFxuICBDT0RFX0lOVDE2OiAweDAxLFxuICBDT0RFX0lOVDMyOiAweDAyLFxuICBDT0RFX0lOVDY0OiAweDAzLFxuICBDT0RFX1NIQVJFRDg6IDB4MDQsXG4gIENPREVfU0hBUkVEMTY6IDB4MDUsXG4gIENPREVfU0hBUkVEMzI6IDB4MDYsXG4gIENPREVfQkxPQ0szMjogMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAweDEzLFxuICBDT0RFX1NUUklORzg6IDB4MDksXG4gIENPREVfU1RSSU5HMzI6IDB4MGEsXG4gIENPREVfRE9VQkxFX0JJRzogMHgwYixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAweDBjLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAweDBkLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAweDBlLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogMHgwZixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6IDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAweDExLFxuICBDT0RFX0NVU1RPTTogMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogMHgxOSxcbn07XG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBVSW50OEFycmF5UmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTtcbiAgfVxuXG4gIHJlYWQ4cygpIHtcbiAgICByZXR1cm4gKHRoaXMuc1t0aGlzLmkrK10gPDwgMjQpID4+IDI0O1xuICB9XG5cbiAgcmVhZDE2dSgpIHtcbiAgICB2YXIgcyA9IHRoaXMucyxcbiAgICAgIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV07XG4gIH1cblxuICByZWFkMTZzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSArIDFdIDw8IDE2KSB8IChzW2kgKyAyXSA8PCA4KSB8IHNbaSArIDNdKSA+Pj4gMDtcbiAgfVxuXG4gIHJlYWQzMnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpICsgMV0gPDwgMTYpIHwgKHNbaSArIDJdIDw8IDgpIHwgc1tpICsgM107XG4gIH1cblxuICByZWFkc3RyKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogSnNTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmNsYXNzIEpzU3RyaW5nUmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspO1xuICB9XG5cbiAgcmVhZDhzKCkge1xuICAgIHJldHVybiAodGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0KSA+PiAyNDtcbiAgfVxuXG4gIHJlYWQxNnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQxNnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoXG4gICAgICAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCAxNikgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCA4KSB8XG4gICAgICAgIHMuY2hhckNvZGVBdChpICsgMykpID4+PlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICByZWFkMzJzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKFxuICAgICAgKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDgpIHxcbiAgICAgIHMuY2hhckNvZGVBdChpICsgMylcbiAgICApO1xuICB9XG5cbiAgcmVhZHN0cihsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zbGljZShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IEpzU3RyaW5nUmVhZGVyLCBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLCBvZnMpIHtcbiAgdmFyIGMgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gIHZhciBvZnMgPSB0eXBlb2Ygb2ZzID09PSBcIm51bWJlclwiID8gb2ZzIDogb2ZzWzBdO1xuICB2YXIgcmVhZGVyID1cbiAgICBjIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBuZXcgVUludDhBcnJheVJlYWRlcihjLCBvZnMpXG4gICAgICA6IG5ldyBKc1N0cmluZ1JlYWRlcihjLCBvZnMpO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKSB7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4O1xuICBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1KCkpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzaXplWzBdID0gNDtcbiAgICAgIHJldHVybiByZWFkZXIucmVhZDMycygpO1xuICAgIGNhc2UgMjpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPSB7XG4gIF9qOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgIHNlcmlhbGl6ZTogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgIGZpeGVkX2xlbmd0aDogOCxcbiAgICBjb21wYXJlOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgaGFzaDogY2FtbF9pbnQ2NF9oYXNoLFxuICB9LFxuICBfaToge1xuICAgIGRlc2VyaWFsaXplOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9uOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9iaWdhcnJheToge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyYXlcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG4gIF9iaWdhcnIwMjoge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyMDJcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG59O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX3NldF9vb19pZFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdmKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgc3dpdGNoIChtYWdpYykge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmQgLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNmO1xuICAgICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgaWYgKG92ZXJmbG93WzBdKSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGhlYWRlcl9sZW4gIT09IHJlYWRlci5pIC0gb2xkX3Bvcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBpbnZhbGlkIGhlYWRlclwiKTtcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIG9iamVjdHMgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSBudW1fb2JqZWN0cyA+IDAgPyBbXSA6IG51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweGY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgcmV0dXJuIGNvZGUgJiAweDNmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFmO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzKCk7XG4gICAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzKCk7XG4gICAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIGlmIChjb21wcmVzc2VkID09PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICAgICAgICBpZiAoY29tcHJlc3NlZCA9PT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWQgPT09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4ZmY7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIobGVuKTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIGNhc2UgMHgwYzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBkOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBmOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgICAgdmFyIGMsXG4gICAgICAgICAgICAgIHMgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSgpKSAhPT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgICAgaWYgKCFvcHMpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgICAgICBpZiAoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZF9zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkX3NpemUgIT09IHNpemVbMF0pXG4gICAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIH1cbiAgd2hpbGUgKG9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgIHZhciB4ID0gb2JqZWN0cy5wb3AoKTtcbiAgICBpZiAoeFsyXSA+PSAwKSBjYW1sX3NldF9vb19pZCh4KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNjtcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZShzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT09IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Zik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoIChyLnJlYWQzMnUoKSkge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAweDg0OTVhNmJkIC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqLzpcbiAgICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M2Y7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICBpZiAob3ZlcmZsb3dbMF0pIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG5jbGFzcyBNbE9iamVjdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vYmpzID0gW107XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfVxuXG4gIHN0b3JlKHYpIHtcbiAgICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gICAgdGhpcy5vYmpzLnB1c2godik7XG4gIH1cblxuICByZWNhbGwodikge1xuICAgIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICAgIHJldHVybiBpID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IChmdW5jdGlvbiAoKSB7XG4gIGNsYXNzIFdyaXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNodW5rID0gW107XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDIwO1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSAwO1xuICAgICAgdGhpcy5vYmpfY291bnRlciA9IDA7XG4gICAgICB0aGlzLnNpemVfMzIgPSAwO1xuICAgICAgdGhpcy5zaXplXzY0ID0gMDtcbiAgICB9XG5cbiAgICB3cml0ZShzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4OyBpID49IDA7IGkgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgd3JpdGVfYXQocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhmZjtcbiAgICB9XG5cbiAgICB3cml0ZV9jb2RlKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweGZmO1xuICAgIH1cblxuICAgIHdyaXRlX3NoYXJlZChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAxIDw8IDgpXG4gICAgICAgIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgMSA8PCAxNilcbiAgICAgICAgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwb3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaHVua19pZHg7XG4gICAgfVxuXG4gICAgZmluYWxpemUoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlKDMyLCAweDg0OTVhNmJlKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSxcbiAgICAgIGNsb3N1cmVzID0gZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTE7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgICk7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcigpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkge1xuICAgICAgICB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWModikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwgMF07XG4gICAgICAgIGlmICghb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPT0gc3pfMzJfNjRbMF0pXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICBcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdlswXSA9PT0gKHZbMF0gfCAwKSkge1xuICAgICAgICBpZiAodlswXSA9PT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZShcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKSA8PCA0KSxcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoXG4gICAgICAgICAgICAzMixcbiAgICAgICAgICAgIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sXG4gICAgICAgICAgICAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXSxcbiAgICAgICAgICApO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2godiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYgKCFjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgIFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApIHdyaXRlci53cml0ZSg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDkgLypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MGEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMCkgd3JpdGVyLndyaXRlKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwOSAvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZSB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwYSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT09ICh2IHwgMCkpIHtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYgKHR5cGVfb2ZfdiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIiArIHR5cGVfb2ZfdiArIFwiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MGMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgdFs3IC0gaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzO1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAxIDw8IDcpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8IDEgPDwgMTUpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWModltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3cml0ZXIuY2h1bmspO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXModiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlcihzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheSh0KSwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciB4ID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKHgpIHtcbiAgICB4LmZpbGUuY2xvc2UoZmFsc2UpO1xuICAgIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbENoYW5pZFxuZnVuY3Rpb24gTWxDaGFuaWQoaWQpIHtcbiAgdGhpcy5pZCA9IGlkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxDaGFuaWRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSwgaWR4KSB7XG4gIHZhciBjaGFuaWQ7XG4gIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gICAgY2hhbmlkID0gbmV3IE1sQ2hhbmlkKGlkeCk7XG4gIH0gZWxzZSBpZiAoY2FtbF9zeXNfZmRzW2lkeF0pIHtcbiAgICBjaGFuaWQgPSBjYW1sX3N5c19mZHNbaWR4XS5jaGFuaWQ7XG4gIH0gZWxzZSBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGYud3JpdGVvbmx5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGYuY3JlYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGYudHJ1bmNhdGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgZi5leGNsID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGYuYmluYXJ5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYudGV4dCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vbmJsb2NrID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZsYWdzID0gZmxhZ3NbMl07XG4gIH1cbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgZiwgcGVybXMpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlzX25vZGUgPSBmc19ub2RlX3N1cHBvcnRlZCgpO1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmIChpc19ub2RlKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH0gZWxzZSByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpO1xuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgwLCB7IHJkb25seTogMSwgYWx0bmFtZTogXCIvZGV2L3N0ZGluXCIsIGlzQ2hhcmFjdGVyRGV2aWNlOiB0cnVlIH0pLFxuICAgIDAsXG4gICk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgxLCB7IGJ1ZmZlcmVkOiBpc19ub2RlID8gMSA6IDIsIHdyb25seTogMSwgaXNDaGFyYWN0ZXJEZXZpY2U6IHRydWUgfSksXG4gICAgMSxcbiAgKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChcbiAgICBmaWxlKDIsIHsgYnVmZmVyZWQ6IGlzX25vZGUgPyAxIDogMiwgd3Jvbmx5OiAxLCBpc0NoYXJhY3RlckRldmljZTogdHJ1ZSB9KSxcbiAgICAyLFxuICApO1xufSkoKTtcblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogTWxDaGFuaWRcbmNsYXNzIGNhbWxfbWxfY2hhbm5lbHNfc3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgICB0aGlzLm9wZW5lZCA9IG5ldyBnbG9iYWxUaGlzLlNldCgpO1xuICB9XG5cbiAgY2xvc2UoY2hhbmlkKSB7XG4gICAgdGhpcy5vcGVuZWQuZGVsZXRlKGNoYW5pZCk7XG4gIH1cblxuICBnZXQoY2hhbmlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChjaGFuaWQpO1xuICB9XG5cbiAgc2V0KGNoYW5pZCwgdmFsKSB7XG4gICAgaWYgKHZhbC5vcGVuZWQpIHRoaXMub3BlbmVkLmFkZChjaGFuaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcC5zZXQoY2hhbmlkLCB2YWwpO1xuICB9XG5cbiAgYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZC52YWx1ZXMoKTtcbiAgfVxufVxuXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBjYW1sX21sX2NoYW5uZWxzX3N0YXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHMuZ2V0KGlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QoY2FwdHVyZWQsIGludG8pIHtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzLnNldChjYXB0dXJlZCwgbmV3Xyk7XG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpIHtcbiAgY2FtbF9tbF9jaGFubmVscy5zZXQoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCgpIHtcbiAgdmFyIGwgPSAwO1xuICB2YXIga2V5cyA9IGNhbWxfbWxfY2hhbm5lbHMuYWxsKCk7XG4gIGZvciAodmFyIGsgb2Yga2V5cykge1xuICAgIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChrKTtcbiAgICBpZiAoY2hhbi5vcGVuZWQgJiYgY2hhbi5vdXQpIGwgPSBbMCwgaywgbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9pb19idWZmZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiICsgZmQgKyBcIiBkb2Vzbid0IGV4aXN0XCIpO1xuICB2YXIgZmlsZSA9IGZkX2Rlc2MuZmlsZTtcbiAgdmFyIGNoYW5pZCA9IGZkX2Rlc2MuY2hhbmlkO1xuICB2YXIgYnVmZmVyZWQgPSBmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBvZmZzZXQ6IGZpbGUucG9zKCksXG4gICAgZmQ6IGZkLFxuICAgIG9wZW5lZDogdHJ1ZSxcbiAgICBvdXQ6IHRydWUsXG4gICAgYnVmZmVyX2N1cnI6IDAsXG4gICAgYnVmZmVyOiBuZXcgVWludDhBcnJheShjYW1sX2lvX2J1ZmZlcl9zaXplKSxcbiAgICBidWZmZXJlZDogYnVmZmVyZWQsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCkge1xuICB2YXIgZmRfZGVzYyA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmIChmZF9kZXNjID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIiArIGZkICsgXCIgZG9lc24ndCBleGlzdFwiKTtcbiAgdmFyIGZpbGUgPSBmZF9kZXNjLmZpbGU7XG4gIHZhciBjaGFuaWQgPSBmZF9kZXNjLmNoYW5pZDtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6IGZpbGUsXG4gICAgb2Zmc2V0OiBmaWxlLnBvcygpLFxuICAgIGZkOiBmZCxcbiAgICBvcGVuZWQ6IHRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjogMCxcbiAgICBidWZmZXJfbWF4OiAwLFxuICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoY2FtbF9pb19idWZmZXJfc2l6ZSksXG4gICAgcmVmaWxsOiByZWZpbGwsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLCBtb2RlKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlO1xuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnk7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9tbF9jaGFubmVscy5jbG9zZShjaGFuaWQpO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGgoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsIGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICBmKHMpO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCwgZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yZWZpbGwoY2hhbikge1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkge1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKSB7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsIGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbi5mZCA9PT0gLTEpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQmFkIGZpbGUgZGVzY3JpcHRvclwiKTtcbiAgICB9XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoXG4gICAgICBjaGFuLmJ1ZmZlcixcbiAgICAgIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheShjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYgKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciwgY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH0gZWxzZSBpZiAoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZiAobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZSAociA8IG4pIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCArIHJdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZiAociA9PT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLCAwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKTtcbiAgaWYgKHIgPCBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgMCk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludChjaGFuaWQpIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgcmVzID0gKChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYgKFxuICAgIHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heCAmJlxuICAgIHBvcyA8PSBjaGFuLm9mZnNldCAmJlxuICAgIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbiAgKSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCwgcG9zKSB7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3Vycik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZiAocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksIDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtY2hhbi5idWZmZXJfbWF4IHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgaWYgKHByZXZfbWF4ID09PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC1jaGFuLmJ1ZmZlcl9tYXggfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKCFjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYgKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09PSAwKSByZXR1cm4gMDtcbiAgaWYgKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoXG4gICAgICBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IGNoYW4uYnVmZmVyX2N1cnI7ICkge1xuICAgICAgcG9zICs9IGNoYW4uZmlsZS53cml0ZShjaGFuLmJ1ZmZlciwgcG9zLCBjaGFuLmJ1ZmZlcl9jdXJyIC0gcG9zLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmICghY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZiAoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiO1xuICB9XG4gIHN3aXRjaCAoY2hhbi5idWZmZXJlZCkge1xuICAgIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMCk7XG4gICAgICBpZiAoaWQgPCAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aCkgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICAgIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLCBidWZmZXIsIG9mZnNldCwgbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbikge1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoXG4gICAgY2hhbmlkLFxuICAgIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksXG4gICAgb2Zmc2V0LFxuICAgIGxlbixcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIoY2hhbmlkLCBjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLCBzLCAwLCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUoY2hhbmlkLCB2LCBmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpIHtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLCBwb3MpIHtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50KGNoYW5pZCwgaSkge1xuICB2YXIgYXJyID0gWyhpID4+IDI0KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZiwgaSAmIDB4ZmZdO1xuICBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIG5ldyBVaW50OEFycmF5KGFyciksIDAsIDQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLCB2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmICghdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvcihtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9BbGlhczogY2FtbF91bml4X2V4aXRcbi8vQWxpYXM6IHVuaXhfZXhpdFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdChjb2RlKSB7XG4gIGlmIChnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZXhpdCkgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKSB7XG4gIHN3aXRjaCAoZXhuWzJdKSB7XG4gICAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICAgIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICAgIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bikge1xuICB2YXIgciA9IFwiXCI7XG4gIGlmIChleG5bMF0gPT09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZiAoXG4gICAgICBleG4ubGVuZ3RoID09PSAzICYmXG4gICAgICBleG5bMl1bMF0gPT09IDAgJiZcbiAgICAgIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKVxuICAgICkge1xuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDI7XG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiBzdGFydCkgciArPSBcIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgciArPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgTWxCeXRlcykge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCI7XG4gIH0gZWxzZSBpZiAoZXhuWzBdID09PSAyNDgpIHtcbiAgICByICs9IGV4blsxXTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVycikgJiYgKGVyclswXSA9PT0gMCB8fCBlcnJbMF0gPT09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmIChoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsIGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZiAoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYgKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczoganNvb19zdGF0aWNfZW52XG52YXIganNvb19zdGF0aWNfZW52ID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbi8vUmVxdWlyZXM6IGpzb29fc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLCB2KSB7XG4gIGpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczoganNvb19zdGF0aWNfZW52XG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICBpZiAoanNvb19zdGF0aWNfZW52W25dKSByZXR1cm4ganNvb19zdGF0aWNfZW52W25dO1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W25dICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZiAoZ2xvYmFsVGhpcy5qc29vX2VudiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5qc29vX2VudltuXSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fZW52W25dO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudihuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnZfb3B0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52X29wdChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocildO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSkge1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52KG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdO1xuXG4gIGlmIChwcm9jZXNzPy5hcmd2Py5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2KF91bml0KSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKSB7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKSB7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgaWYgKGNoaWxkX3Byb2Nlc3M/LmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQsIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gIH0gZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKF9jbWQpIHtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSgpIHtcbiAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oX2IpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfVxuICB9XG4gIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3cgXiAoMHhmZmZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICByZXR1cm4gWzAsIHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUoKSB7XG4gIHJldHVybiAzMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplKCkge1xuICByZXR1cm4gMzI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSgpIHtcbiAgcmV0dXJuICgweDdmZmZmZmZmIC8gNCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXgoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIlVuaXhcIiA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIldpbjMyXCIgPyAxIDogMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4oKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIkN5Z3dpblwiID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbnZhciBvc190eXBlID0ganNvb19pc193aW4zMiA/IFwiV2luMzJcIiA6IFwiVW5peFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW9fYnVmZmVyX3NpemVcbnZhciBjYW1sX2lvX2J1ZmZlcl9zaXplID0gNjU1MzY7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lvX2J1ZmZlcl9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfaW9fYnVmZmVyX3NpemUoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfaW9fYnVmZmVyX3NpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RlbXBfZGlyX25hbWVcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfdGVtcF9kaXJfbmFtZShfdW5pdCkge1xuICBpZiAob3NfdHlwZSA9PT0gXCJXaW4zMlwiKSB7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHJlcXVpcmUoXCJub2RlOm9zXCIpLnRtcGRpcigpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGVtcF9kaXJfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vVmVyc2lvbjogPj0gNS40XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c190ZW1wX2Rpcl9uYW1lKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyKHNpZ25vKSB7XG4gIHJldHVybiBzaWdubztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmV2X2NvbnZlcnRfc2lnbmFsX251bWJlclxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfc3lzX3Jldl9jb252ZXJ0X3NpZ25hbF9udW1iZXIoc2lnbm8pIHtcbiAgcmV0dXJuIHNpZ25vO1xufVxuXG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vSWY6ICF3YXNtXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYgKHByb2Nlc3M/Lm9uKSB7XG4gICAgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5lcnJvcikge1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobFtpXSA9PT0gXCJiXCIpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZyA9ICtsW2ldLnNsaWNlKDIpO1xuICAgICAgfSBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnXG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZztcblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cygpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9ydW50aW1lX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UoX3VuaXQpIHtcbiAgcmV0dXJuIFswXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlKGIpIHtcbiAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlKCkge1xuICByZXR1cm4gWzBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KF9zbG90KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QoX2J0LCBfaWR4KSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoX2V4biwgX2J0KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KF9yYnQpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSByZXR1cm4gZiguLi5hcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYoLi4uYXJncy5zbGljZSgwLCBuKSk7XG4gICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3Muc2xpY2UobikpO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIHJldHVybiBmKC4uLm5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKyspIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgICByZXR1cm4gZiguLi5uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSB7XG4gICAgcmV0dXJuIGYoLi4uYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG4gICAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKykgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXJncy5sZW5ndGggPSBhcmdzTGVuO1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl9jcHMgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfY3BzX2Nsb3N1cmVcbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl90dXBsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3MpIHtcbiAgICB2YXIgbiA9IGYubCA+PSAwID8gZi5sIDogKGYubCA9IGYubGVuZ3RoKTtcbiAgICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICAgIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICAgIHZhciBnID0gZiguLi5hcmdzLnNsaWNlKDAsIG4pKTtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChnLCBhcmdzLnNsaWNlKG4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRklYTUU6IFJlc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvZiBoYW5kbGluZyBzcGVjaWFsbHkgZCA9IDEgb3IgMlxuICAgICAgdmFyIGFyZ3NfID0gYXJncy5zbGljZSgpO1xuICAgICAgYXJnc18ubGVuZ3RoID0gYXJnc0xlbjtcbiAgICAgIHZhciByZXQgPSBjYW1sX2Nwc19jbG9zdXJlKFxuICAgICAgICBmdW5jdGlvbiAoLi4uZXh0cmFfYXJncykge1xuICAgICAgICAgIGlmIChleHRyYV9hcmdzLmxlbmd0aCA9PT0gMCkgZXh0cmFfYXJncyA9IFt1bmRlZmluZWRdO1xuICAgICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChmLCBhcmdzLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0LmwgPSBkO1xuICAgICAgcmV0LmNwcy5sID0gZCArIDE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYW1sX2NhbGxfZ2VuX2NwcyhmLCBhcmdzKSB7XG4gICAgaWYgKCFmLmNwcykge1xuICAgICAgdmFyIGsgPSBhcmdzLnBvcCgpO1xuICAgICAgcmV0dXJuIGsoY2FtbF9jYWxsX2dlbl9kaXJlY3QoZiwgYXJncykpO1xuICAgIH1cbiAgICB2YXIgbiA9IGYuY3BzLmwgPj0gMCA/IGYuY3BzLmwgOiAoZi5jcHMubCA9IGYuY3BzLmxlbmd0aCk7XG4gICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2NwcyhnLCBhcmdzKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NMZW4tLTtcbiAgICAgIHZhciBhcmdzXyA9IGFyZ3Muc2xpY2UoKTtcbiAgICAgIGFyZ3NfLmxlbmd0aCA9IGFyZ3NMZW47XG4gICAgICB2YXIgY29udCA9IGNhbWxfY3BzX2Nsb3N1cmUoXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgICAgY29udC5sID0gZDtcbiAgICAgIGNvbnQuY3BzLmwgPSBkICsgMTtcbiAgICAgIHJldHVybiBrKGNvbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2NhbWxfY2FsbF9nZW5fZGlyZWN0LCBjYW1sX2NhbGxfZ2VuX2Nwc107XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vV2Vha2RlZlxudmFyIGNhbWxfY2FsbF9nZW4gPSBjYW1sX2NhbGxfZ2VuX3R1cGxlWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlbl90dXBsZVxuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1dlYWtkZWZcbnZhciBjYW1sX2NhbGxfZ2VuX2NwcyA9IGNhbWxfY2FsbF9nZW5fdHVwbGVbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLCB2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgdmFyIG1heCA9IC0xO1xuICBpZiAoc3ltYikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkeCA9IHN5bWJbaV1bMl07XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIGlkeCk7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IGlkeDtcbiAgICB9XG4gIH1cbiAgci5uZXh0X2lkeCA9IG1heCArIDE7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RvcGxldmVsX3JlbG9jXG52YXIganNvb190b3BsZXZlbF9yZWxvYyA9IHVuZGVmaW5lZDtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczoganNvb190b3BsZXZlbF9yZWxvY1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZiAoanNvb190b3BsZXZlbF9yZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soanNvb190b3BsZXZlbF9yZWxvYywgW25hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpO1xuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdO1xuICAgICAgaWYgKG5pZCA+PSAwKSBuID0gbmlkO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1bml0IGlzIHVua25vd24sIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGR5bmxpbmtpbmcgYSBwcmVjb21waWxlZCBqcyxcbiAgICAgICAgLy8gbGV0J3MgYWxsb2NhdGUgYSBmcmVzaCBpZHguXG4gICAgICAgIHZhciBuID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgubmV4dF9pZHgrKztcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV0gPSBuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmIChuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykge1xuICByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByKGYpIHtcbiAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobywgZiwgdikge1xuICBvW2ZdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLCBmKSB7XG4gIHJldHVybiBvW2ZdO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobywgZikge1xuICBkZWxldGUgb1tmXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sIGMpIHtcbiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlIChyZXM/Lmpvb190cmFtcCkge1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsIGFyZ3MsIGRpcmVjdCkge1xuICByZXR1cm4geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBhcmdzLCBqb29fZGlyZWN0OiBkaXJlY3QgfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX3dyYXBfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vQWxpYXM6IGNhbWxfY3BzX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZiwgYXJncykge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgam9vX3RyYW1wOiBmLFxuICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0geyBqb29fdHJhbXA6IGhhbmRsZXIsIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV0gfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZXM/Lmpvb19hcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyhfdW5pdCkge1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKENPTkZJRyhcImVmZmVjdHNcIikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZiAoXG4gICAgICBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUubWVzc2FnZSAmJlxuICAgICAgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSlcbiAgICApXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmIChcbiAgICAgIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZS5tZXNzYWdlICYmXG4gICAgICBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKVxuICAgIClcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLCBlXTtcbiAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICBlbHNlXG4gICAgICBleG4gPSBbMCwgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcikgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2UgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy8gQmFja3RyYWNlcyBhcmUgdmVyeSBleHBlbnNpdmUsIHdlIG9ubHkgZW5hYmxlIHRoZW0gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAvLyBhdCBjb21waWxlLXRpbWUgKC0tZW5hYmxlIHdpdGgtanMtZXJyb3IpIG9yIGF0IHN0YXJ0dXAgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MS5cbiAgLy8gTGlicmFyaWVzIHN1Y2ggYXMgQmFzZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlIGJhY2t0cmFjZXMgKHByb2dyYW1tYXRpY2FsbHkpIGJ1dFxuICAvLyBpdCdzIHdheSB0byBzbG93LiBIZXJlLCB3ZSBmb3JjZSB0aGUgZW5kLXVzZXIgdG8gb3B0LWluIHRvIGJhY2t0cmFjZXMuXG4gIGlmIChjYW1sX3JlY29yZF9iYWNrdHJhY2VfZW52X2ZsYWcgJiYgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4bjtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZiAoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT09IDI0OClcbiAgICBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmIChleG4uanNfZXJyb3IpIHtcbiAgICByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3Rocm93X2pzX2V4Y2VwdGlvbihleG4pIHtcbiAgdGhyb3cgZXhuO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7XG4gIHJldHVybiAhIXg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkge1xuICByZXR1cm4geCB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgYlswXSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJbaSArIDFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yICh2YXIgaSA9IGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLCBlLCBsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpIHtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICg7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmICgheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnY2FtbF9qc192YXI6IFwiJyArXG4gICAgICAgIHggK1xuICAgICAgICAnXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLicsXG4gICAgKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6XG4gIHJldHVybiBldmFsPy4oeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykge1xuICByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGYoKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZihhWzFdKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG5ldyBjKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0pO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7XG4gICAgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbiAgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEYoKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgYygpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkge1xuICAgIHJldHVybiBjLmFwcGx5KHRoaXMsIGEpO1xuICB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRigpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBjYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKSA6IHJlcztcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW3RoaXMsIGFyZ3NdKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuIChmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCkpIC0gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMoeCwgeSkge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRG91YmxlRXF1YWxzOlxuICByZXR1cm4gKyh4ID09IHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzKHgsIHkpIHtcbiAgcmV0dXJuICsoeCA9PT0geSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcocykge1xuICAvLyBVc2VzIGFuIGluZGlyZWN0IGV2YWwgdGhyb3VnaCB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgb3BlcmF0b3IuXG4gIC8vIChzZWUgaHR0cHM6Ly9tZG4uZGV2L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2V2YWwpXG4gIC8vIFRoaXMgaXMgZmFzdGVyIGFuZCBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlcy5cbiAgLy8gQWxzbyBwcmVwZW5kcyBgXCJ1c2Ugc3RyaWN0XCJgIGRpcmVjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vdCBpbmhlcml0ZWRcbiAgLy8gZnJvbSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHdpdGggYW4gaW5kaXJlY3QgZXZhbC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsnICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gV2UgYWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYmV0d2VlbiBleHByZXNzaW9uc1xuICAvLyBhbmQgc3RhdGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHdlIGFjY2VwdCBpbnZhbGlkIGlucHV0cyBsaWtlXG4gIC8vIFwiYSkoYlwiLCBidXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50KHRhZykge1xuICB0aHJvdyB0YWc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnKHRhZywgYXJnKSB7XG4gIHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyh0YWcsIGFyZ3MpIHtcbiAgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aChtc2cpIHtcbiAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlID0gWzI0OCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksIC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5KCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RpbWVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3M/LmNwdVVzYWdlKSB7XG4gICAgdmFyIHQgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3B1VXNhZ2UoKTtcbiAgICByZXR1cm4gQkxPQ0soMCwgdC51c2VyIC8gMWU2LCB0LnN5c3RlbSAvIDFlNiwgMCwgMCk7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZT8ubm93KSB7XG4gICAgcmV0dXJuIEJMT0NLKDAsIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwLCAwLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RpbWVzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICBkLmdldFVUQ0RhdGUoKSxcbiAgICBkLmdldFVUQ01vbnRoKCksXG4gICAgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldFVUQ0RheSgpLFxuICAgIGRveSxcbiAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgamFuLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAganVsLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0U2Vjb25kcygpLFxuICAgIGQuZ2V0TWludXRlcygpLFxuICAgIGQuZ2V0SG91cnMoKSxcbiAgICBkLmdldERhdGUoKSxcbiAgICBkLmdldE1vbnRoKCksXG4gICAgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldERheSgpLFxuICAgIGRveSxcbiAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHxcbiAgICAgIDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKSB7XG4gIHZhciBkID0gbmV3IERhdGUodG1bNl0gKyAxOTAwLCB0bVs1XSwgdG1bNF0sIHRtWzNdLCB0bVsyXSwgdG1bMV0pLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLCB0LCB0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQpO1xuICBpZiAoIWZpbGUuaXNhdHR5KSByZXR1cm4gMDtcbiAgcmV0dXJuIGZpbGUuaXNhdHR5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KF9maWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvclxudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLFxuICBcIkVBQ0NFU1wiLFxuICBcIkVBR0FJTlwiLFxuICBcIkVCQURGXCIsXG4gIFwiRUJVU1lcIixcbiAgXCJFQ0hJTERcIixcbiAgXCJFREVBRExLXCIsXG4gIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLFxuICBcIkVGQVVMVFwiLFxuICBcIkVGQklHXCIsXG4gIFwiRUlOVFJcIixcbiAgXCJFSU5WQUxcIixcbiAgXCJFSU9cIixcbiAgXCJFSVNESVJcIixcbiAgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIixcbiAgXCJFTkFNRVRPT0xPTkdcIixcbiAgXCJFTkZJTEVcIixcbiAgXCJFTk9ERVZcIixcbiAgXCJFTk9FTlRcIixcbiAgXCJFTk9FWEVDXCIsXG4gIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsXG4gIFwiRU5PU1BDXCIsXG4gIFwiRU5PU1lTXCIsXG4gIFwiRU5PVERJUlwiLFxuICBcIkVOT1RFTVBUWVwiLFxuICBcIkVOT1RUWVwiLFxuICBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIixcbiAgXCJFUElQRVwiLFxuICBcIkVSQU5HRVwiLFxuICBcIkVST0ZTXCIsXG4gIFwiRVNQSVBFXCIsXG4gIFwiRVNSQ0hcIixcbiAgXCJFWERFVlwiLFxuICBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIixcbiAgXCJFQUxSRUFEWVwiLFxuICBcIkVOT1RTT0NLXCIsXG4gIFwiRURFU1RBRERSUkVRXCIsXG4gIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsXG4gIFwiRU5PUFJPVE9PUFRcIixcbiAgXCJFUFJPVE9OT1NVUFBPUlRcIixcbiAgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsXG4gIFwiRVBGTk9TVVBQT1JUXCIsXG4gIFwiRUFGTk9TVVBQT1JUXCIsXG4gIFwiRUFERFJJTlVTRVwiLFxuICBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLFxuICBcIkVORVRVTlJFQUNIXCIsXG4gIFwiRU5FVFJFU0VUXCIsXG4gIFwiRUNPTk5BQk9SVEVEXCIsXG4gIFwiRUNPTk5SRVNFVFwiLFxuICBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsXG4gIFwiRU5PVENPTk5cIixcbiAgXCJFU0hVVERPV05cIixcbiAgXCJFVE9PTUFOWVJFRlNcIixcbiAgXCJFVElNRURPVVRcIixcbiAgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIixcbiAgXCJFSE9TVFVOUkVBQ0hcIixcbiAgXCJFTE9PUFwiLFxuICBcIkVPVkVSRkxPV1wiLFxuXTtcblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5O1xuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIC8vIGVycm5vIGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIC1lcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIiksXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmVycm9yXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N0cmVycm9yKGVycm5vKSB7XG4gIGNvbnN0IHV0aWwgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuICBpZiAoZXJybm8gPj0gMCkge1xuICAgIGNvbnN0IGNvZGUgPSB1bml4X2Vycm9yW2Vycm5vXTtcbiAgICByZXR1cm4gdXRpbFxuICAgICAgLmdldFN5c3RlbUVycm9yTWFwKClcbiAgICAgIC5lbnRyaWVzKClcbiAgICAgIC5maW5kKCh4KSA9PiB4WzFdWzBdID09PSBjb2RlKVsxXVsxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXRpbC5nZXRTeXN0ZW1FcnJvck1lc3NhZ2UoZXJybm8pO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyZXJyb3Jcbi8vUmVxdWlyZXM6IHVuaXhfZXJyb3Jcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3RyZXJyb3IoZXJybm8pIHtcbiAgY29uc3QgY29kZSA9IHVuaXhfZXJyb3JbZXJybm9dO1xuICByZXR1cm4gY29kZSB8fCBcIlVua25vd24gZXJyb3IgXCIgKyBlcnJubztcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvcl9tZXNzYWdlXG4vL0FsaWFzOiBjYW1sX3VuaXhfZXJyb3JfbWVzc2FnZVxuLy9SZXF1aXJlczogY2FtbF9zdHJlcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIHVuaXhfZXJyb3JfbWVzc2FnZShlcnIpIHtcbiAgY29uc3QgZXJybm8gPSB0eXBlb2YgZXJyID09PSBcIm51bWJlclwiID8gZXJyIDogLWVyclsxXTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNhbWxfc3RyZXJyb3IoZXJybm8pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jaGRpclxuLy9BbGlhczogdW5peF9jaGRpclxuZnVuY3Rpb24gY2FtbF91bml4X2NoZGlyKGRpcikge1xuICByZXR1cm4gY2FtbF9zeXNfY2hkaXIoZGlyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gZmFsc2UsXG4gICAgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXRfNjQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gdHJ1ZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyBmYWxzZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0XzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyB0cnVlLFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NobW9kXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9jaG1vZFxuZnVuY3Rpb24gY2FtbF91bml4X2NobW9kKG5hbWUsIHBlcm1zKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2NobW9kOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmNobW9kKHJvb3QucmVzdCwgcGVybXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vQWxpYXM6IHVuaXhfcmVuYW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVuYW1lKG8sIG4pIHtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmIChvX3Jvb3QuZGV2aWNlICE9PSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSwgXCJFWERFVlwiLCBcInJlbmFtZVwiKTtcbiAgaWYgKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSkgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm90IGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X2xpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9saW5rKGZvbGxvdywgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2UubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8vIFdlIGNhbid0IGNvbnRyb2wgd2hldGhlciBhICdzcmMnIHN5bWxpbmsgaXMgZm9sbG93ZWQgb3Igbm90LlxuICAvLyBTbyB3ZSBmYWlsIHdoZW4gJ2ZvbGxvdycgaXMgc2V0LCBhcyBkb2N1bWVudGVkIGluIHRoZSBVbml4IG1vZHVsZS5cbiAgaWYgKHR5cGVvZiBmb2xsb3cgIT09IFwibnVtYmVyXCIpXG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoLyogcmFpc2UgVW5peF9lcnJvciAqLyAxLCBcIkVOT1NZU1wiLCBcImxpbmtcIik7XG4gIGlmIChzcmNfcm9vdC5kZXZpY2UgIT09IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRVhERVZcIiwgXCJsaW5rXCIpO1xuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLmxpbmsoXG4gICAgc3JjX3Jvb3QucmVzdCxcbiAgICBkc3Rfcm9vdC5yZXN0LFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmICghZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmsoXG4gICAgdG9fZGlyLFxuICAgIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHNyYyksXG4gICAgZHN0X3Jvb3QucmVzdCxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdXRpbWVzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91dGltZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF91dGltZXMobmFtZSwgYXRpbWUsIG10aW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudXRpbWVzKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91dGltZXM6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByb290LmRldmljZS51dGltZXMocm9vdC5yZXN0LCBhdGltZSwgbXRpbWUsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGUobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUocm9vdC5yZXN0LCBsZW4sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2ludDY0X3RvX2Zsb2F0XG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjQobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUoXG4gICAgcm9vdC5yZXN0LFxuICAgIGNhbWxfaW50NjRfdG9fZmxvYXQobGVuKSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfYWNjZXNzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9hY2Nlc3NcbmZ1bmN0aW9uIGNhbWxfdW5peF9hY2Nlc3MobmFtZSwgZmxhZ3MpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnIgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZi53ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGYueCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBmLmYgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmFjY2Vzcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfYWNjZXNzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UuYWNjZXNzKHJvb3QucmVzdCwgZiwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9zeXNfZmRzLCBNbENoYW5pZFxuLy9BbGlhczogdW5peF9vcGVuXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLnJkd3IgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZi5ub25ibG9jayA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgICBmLmNyZWF0ZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2OlxuICAgICAgICBmLnRydW5jYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYuZXhjbCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vY3R0eSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA5OlxuICAgICAgICBmLmRzeW5jID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBmLnN5bmMgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LCBmLCBwZXJtcywgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgdmFyIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIHZhciBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2ZkcywgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgY21kKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgY21kKTtcbiAgcmV0dXJuIGZkX2Rlc2MuZmlsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzdGF0XG4vL0FsaWFzOiB1bml4X2ZzdGF0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3RhdChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3RhdFwiKTtcbiAgaWYgKCFmaWxlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyBmYWxzZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mc3RhdF82NFxuLy9BbGlhczogdW5peF9mc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3VuaXhfZnN0YXRfNjQoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZnN0YXRcIik7XG4gIGlmICghZmlsZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mc3RhdDY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZjaG1vZFxuLy9BbGlhczogdW5peF9mY2htb2Rcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2ZjaG1vZChmZCwgcGVybXMpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZmNobW9kXCIpO1xuICBpZiAoIWZpbGUuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZjaG1vZDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBmaWxlLmNobW9kKHBlcm1zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzeW5jXG4vL0FsaWFzOiB1bml4X2ZzeW5jXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3luYyhmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3luY1wiKTtcbiAgaWYgKCFmaWxlLnN5bmMpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzeW5jOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3luYygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfd3JpdGVcbi8vQWxpYXM6IHVuaXhfd3JpdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF91bml4X3dyaXRlKGZkLCBidWYsIHBvcywgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgdmFyIHdyaXR0ZW4gPSAwO1xuICB3aGlsZSAobGVuID4gMCkge1xuICAgIHZhciBuID0gZmlsZS53cml0ZShhLCBwb3MsIGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgICB3cml0dGVuICs9IG47XG4gICAgcG9zICs9IG47XG4gICAgbGVuIC09IG47XG4gIH1cbiAgcmV0dXJuIHdyaXR0ZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zaW5nbGVfd3JpdGVcbi8vQWxpYXM6IHVuaXhfc2luZ2xlX3dyaXRlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF9zaW5nbGVfd3JpdGUoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwid3JpdGVcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gZmlsZS53cml0ZShcbiAgICBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZiksXG4gICAgcG9zLFxuICAgIGxlbixcbiAgICAvKiByYWlzZSB1bml4X2Vycm9yICovIDEsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF93cml0ZV9iaWdhcnJheVxuLy9BbGlhczogY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3VuaXhfd3JpdGVfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgd3JpdHRlbiA9IDA7XG4gIHdoaWxlIChsZW4gPiAwKSB7XG4gICAgdmFyIG4gPSBmaWxlLndyaXRlKGEsIHBvcywgbGVuLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xuICAgIHdyaXR0ZW4gKz0gbjtcbiAgICBwb3MgKz0gbjtcbiAgICBsZW4gLT0gbjtcbiAgfVxuICByZXR1cm4gd3JpdHRlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRcbi8vQWxpYXM6IHVuaXhfcmVhZFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZChmZCwgYnVmLCBwb3MsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJyZWFkXCIpO1xuICByZXR1cm4gZmlsZS5yZWFkKFxuICAgIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKSxcbiAgICBwb3MsXG4gICAgbGVuLFxuICAgIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRfYmlnYXJyYXlcbi8vQWxpYXM6IHVuaXhfcmVhZF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcInJlYWRcIik7XG4gIHJldHVybiBmaWxlLnJlYWQoYSwgcG9zLCBsZW4sIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc2Vla1xuLy9BbGlhczogdW5peF9sc2Vla1xuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlXG5mdW5jdGlvbiBjYW1sX3VuaXhfbHNlZWsoZmQsIGxlbiwgd2hlbmNlKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImxzZWVrXCIpO1xuICByZXR1cm4gZmlsZS5zZWVrKGxlbiwgd2hlbmNlLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHNlZWtfNjRcbi8vQWxpYXM6IHVuaXhfbHNlZWtfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9pbnQ2NF90b19mbG9hdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzZWVrXzY0KGZkLCBsZW4sIHdoZW5jZSkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJsc2Vla1wiKTtcbiAgcmV0dXJuIGZpbGUuc2VlayhjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIHdoZW5jZSwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Z0cnVuY2F0ZVxuLy9BbGlhczogdW5peF9mdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2Z0cnVuY2F0ZShmZCwgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImZ0cnVuY2F0ZVwiKTtcbiAgaWYgKCFmaWxlLnRydW5jYXRlKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mdHJ1bmNhdGU6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICBmaWxlLnRydW5jYXRlKGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mdHJ1bmNhdGVfNjRcbi8vQWxpYXM6IHVuaXhfZnRydW5jYXRlXzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGgsIGNhbWxfaW50NjRfdG9fZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9mdHJ1bmNhdGVfNjQoZmQsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmdHJ1bmNhdGVcIik7XG4gIGlmICghZmlsZS50cnVuY2F0ZSkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfZnRydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgZmlsZS50cnVuY2F0ZShjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2Vcbi8vQWxpYXM6IHVuaXhfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImNsb3NlXCIpO1xuICBmaWxlLmNsb3NlKC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9BbGlhczogdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5faW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuZnVuY3Rpb24gY2FtbF91bml4X2luY2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgZmlsZS5jaGVja19zdHJlYW1fc2VtYW50aWNzKFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB1bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5fb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3Jcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG5mdW5jdGlvbiBjYW1sX3VuaXhfb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwib3V0X2NoYW5uZWxfb2ZfZGVzY3JcIik7XG4gIGZpbGUuY2hlY2tfc3RyZWFtX3NlbWFudGljcyhcIm91dF9jaGFubmVsX29mX2Rlc2NyXCIpO1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0dWlkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldGV1aWRcbi8vQWxpYXM6IHVuaXhfZ2V0ZXVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGV1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0ZXVpZCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0ZXVpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0Z2lkXG4vL0FsaWFzOiB1bml4X2dldGdpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRnaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldGdpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0ZWdpZFxuLy9BbGlhczogdW5peF9nZXRlZ2lkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0ZWdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRlZ2lkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXRlZ2lkKCk7XG4gIH1cbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd25hbVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHduYW1cbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuLy9BbGlhczogY2FtbF91bml4X2dldGdybmFtXG4vL0FsaWFzOiB1bml4X2dldGdybmFtXG4vL0FsaWFzOiBjYW1sX3VuaXhfZ2V0Z3JnaWRcbi8vQWxpYXM6IHVuaXhfZ2V0Z3JnaWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd25hbShfdW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsoX3VuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCkgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlcjogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJyZWFkZGlyXCIpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJjbG9zZWRpclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihyYWlzZV91bml4LCBjb2RlLCBjbWQsIG1zZywgcGF0aCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpXG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIGNtZCwgcGF0aCkpO1xuICBlbHNlIHtcbiAgICB2YXIgbXNnID0gY29kZSArIFwiOiBcIiArIG1zZyArIFwiLCBcIiArIGNtZDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSBtc2cgKz0gXCIgJ1wiICsgcGF0aCArIFwiJ1wiO1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG1zZyk7XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIiA/IG5hbWUgKyBcIi9cIiA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5lbHNlIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKSB7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9XG4gIGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHxcbiAgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKSB7fVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczoganNvb19pc193aW4zMlxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSBcIi9cIikgcmV0dXJuIFtcIlwiLCBwYXRoLnNsaWNlKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9XG4gICAgICAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgdmFyIGlzVW5jID0gZGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gXCI6XCI7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChyZXN1bHRbMl0gfHwgaXNVbmMpIHtcbiAgICAgIHZhciByb290ID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgICB2YXIgc2VwID0gcmVzdWx0WzJdIHx8IFwiXCI7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4ganNvb19pc193aW4zMiA/IHdpbjMyIDogcG9zaXg7XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoKG5hbWUpIHtcbiAgbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkpIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdCgvWy9cXFxcXS8pO1xuICB2YXIgbmNvbXAgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChjb21wW2ldKSB7XG4gICAgICBjYXNlIFwiLi5cIjpcbiAgICAgICAgbmNvbXAucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmNvbXAucHVzaChjb21wW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdO1xuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgcGF0aDogXCIvc3RhdGljL1wiLFxuICBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKSxcbn0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpIHtcbiAgdmFyIHByZXYgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF07XG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZiAoXG4gICAgICBuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09PSAwICYmXG4gICAgICAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKVxuICAgIClcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gIH1cbiAgaWYgKCFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdD8ubWF0Y2goL15bYS16QS1aXTpcXC8kLykpIHtcbiAgICAgIHZhciBtID0geyBwYXRoOiByb290LCBkZXZpY2U6IG5ldyBNbE5vZGVEZXZpY2Uocm9vdCkgfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsIGYpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goeyBwYXRoOiBuYW1lLCBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UobmFtZSwgZikgfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSkge1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmIChqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT09IG5hbWUpIGlkeCA9IGk7XG4gIGlmIChpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRjd2Rcbi8vQWxpYXM6IHVuaXhfZ2V0Y3dkXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZiAocm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCkpIHtcbiAgICBpZiAocm9vdC5yZXN0KVxuICAgICAgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVOT1RESVJcIixcbiAgICAgIFwiY2hkaXJcIixcbiAgICAgIFwibm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhkaXIpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZGlyKSwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lLCByYWlzZV91bml4KSB7XG4gIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgIHJhaXNlX3VuaXgsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICBuYW1lLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBsW2kgKyAxXSA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYSA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobywgbikge1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYgKG9fcm9vdC5kZXZpY2UgIT09IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZiAoIW9fcm9vdC5kZXZpY2UucmVuYW1lKSBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKF92ZmQsIF9raW5kLCBfbGF5b3V0LCBfc2hhcmVkLCBfZGltcywgX3Bvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndiwgX2FyZ24pIHtcbiAgLy8gYXJnbiA9PT0gNlxuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLCBhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsIGNvbnRlbnQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSkgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZiAoIWdsb2JhbFRoaXMuanNvb19mc190bXApIGdsb2JhbFRoaXMuanNvb19mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wLnB1c2goeyBuYW1lOiBuYW1lLCBjb250ZW50OiBjb250ZW50IH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCgpIHtcbiAgdmFyIHRtcCA9IGdsb2JhbFRoaXMuanNvb19mc190bXA7XG4gIGlmICh0bXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKykge1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSwgdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LCBjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50KG5hbWUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG5hbWUpIDogbmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgeyByZG9ubHk6IDEgfSk7XG4gICAgdmFyIGxlbiA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKGJ1ZiwgMCwgbGVuLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGJ1Zik7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRGV2aWNlIHtcbiAgY29uc3RydWN0b3Iocm9vdCwgZikge1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5sb29rdXBGdW4gPSBmO1xuICB9XG5cbiAgbm0obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgKyBuYW1lO1xuICB9XG5cbiAgY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSkge1xuICAgIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIGxvb2t1cChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcodGhpcy5yb290KSxcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobmFtZSksXG4gICAgICApO1xuICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleGlzdHMobmFtZSwgZG9fbm90X2xvb2t1cCkge1xuICAgIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHJldHVybiAxO1xuICAgIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gICAgaWYgKCFkb19ub3RfbG9va3VwKSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdID8gMSA6IDA7XG4gIH1cblxuICBpc0ZpbGUobmFtZSkge1xuICAgIGlmICh0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkZGlyKG5ld25hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuZXduYW1lKSArIFwiIDogZGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9sZF9zbGFzaCA9IHRoaXMuc2xhc2gob2xkbmFtZSk7XG4gICAgdmFyIG5ld19zbGFzaCA9IHRoaXMuc2xhc2gobmV3bmFtZSk7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuZXdfc2xhc2gpO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnJlYWRkaXIob2xkbmFtZSkpIHtcbiAgICAgIHRoaXMucmVuYW1lKG9sZF9zbGFzaCArIGYsIG5ld19zbGFzaCArIGYpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W29sZF9zbGFzaF07XG4gIH1cblxuICByZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkge1xuICAgIGlmICghdGhpcy5leGlzdHMob2xkbmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG9sZG5hbWUpICsgXCIgOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIGlmICh0aGlzLmlzX2RpcihvbGRuYW1lKSkge1xuICAgICAgdGhpcy5yZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkgJiYgdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFtuZXduYW1lXSA9IHRoaXMuY29udGVudFtvbGRuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbb2xkbmFtZV07XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgX21vZGUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICAgIHBhcmVudCA9IHBhcmVudD8uWzFdIHx8IFwiXCI7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyhwYXJlbnQpKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICApO1xuICAgIGlmICghdGhpcy5pc19kaXIocGFyZW50KSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHZhciBuYW1lX3NsYXNoID0gbmFtZSA9PT0gXCJcIiA/IFwiXCIgOiB0aGlzLnNsYXNoKG5hbWUpO1xuICAgIGlmICghdGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICBmb3IgKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgICAgaWYgKG4uc3RhcnRzV2l0aChuYW1lX3NsYXNoKSAmJiBuICE9PSBuYW1lX3NsYXNoKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRU5PVEVNUFRZXCIsXG4gICAgICAgICAgXCJybWRpclwiLFxuICAgICAgICAgIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiLFxuICAgICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG4gIH1cblxuICByZWFkZGlyKG5hbWUpIHtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgPT09IFwiXCIgPyBcIlwiIDogdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmIChuLnN0YXJ0c1dpdGgobmFtZV9zbGFzaCkgJiYgbiAhPT0gbmFtZV9zbGFzaCkge1xuICAgICAgICB2YXIgbGFzdCA9IG4uaW5kZXhPZihcIi9cIiwgbmFtZV9zbGFzaC5sZW5ndGgpO1xuICAgICAgICBpZiAobGFzdCA8IDApIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBtID0gbi5zbGljZShuYW1lX3NsYXNoLmxlbmd0aCwgbGFzdCk7XG4gICAgICAgIGlmIChtICYmICFzZWVuW21dKSB7XG4gICAgICAgICAgc2VlblttXSA9IHRydWU7XG4gICAgICAgICAgYS5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgb3BlbmRpcihuYW1lLCByYWlzZV91bml4KSB7XG4gICAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gICAgdmFyIGMgPSBmYWxzZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRTeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjKVxuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICAgIFwiRUJBREZcIixcbiAgICAgICAgICAgIFwicmVhZGRpclwiLFxuICAgICAgICAgICAgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGkgPT09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9O1xuICAgICAgfSxcbiAgICAgIGNsb3NlU3luYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYylcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgICBcIkVCQURGXCIsXG4gICAgICAgICAgICBcInJlYWRkaXJcIixcbiAgICAgICAgICAgIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiLFxuICAgICAgICAgICk7XG4gICAgICAgIGMgPSB0cnVlO1xuICAgICAgICBhID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpc19kaXIobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSA/IDEgOiAwO1xuICB9XG5cbiAgdW5saW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUsIHRydWUpKSB7XG4gICAgICAvLyBbdHJ1ZV0gbWVhbnMgbm8gXCJsb29rdXBcIiBpZiBub3QgZm91bmQuXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJ1bmxpbmtcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYWNjZXNzKG5hbWUsIF9mbGFncywgcmFpc2VfdW5peCkge1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVBQ0NFU1NcIixcbiAgICAgICAgICBcImFjY2Vzc1wiLFxuICAgICAgICAgIFwicGVybWlzc2lvbiBkZW5pZWQsXCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBfcGVybXMsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgZmlsZTtcbiAgICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFSVNESVJcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGlmIChmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKDApO1xuICAgIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSh0aGlzLm5tKG5hbWUpLCByYWlzZV91bml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbiAgfVxuXG4gIHRydW5jYXRlKG5hbWUsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHZhciBmaWxlO1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVJU0RJUlwiLFxuICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGZpbGUudHJ1bmNhdGUobGVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIobmFtZSwgY29udGVudCkge1xuICAgIHZhciBmaWxlO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGlmIChjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKSBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gICAgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gICAgZWxzZSBpZiAoY29udGVudC50b1N0cmluZykge1xuICAgICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoXG4gICAgICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSksXG4gICAgICApO1xuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICAgIH0gZWxzZVxuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgIHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiLFxuICAgICAgKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBNbEZha2VGaWxlIGV4dGVuZHMgTWxGaWxlIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gY29udGVudDtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbikge1xuICAgIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gICAgdmFyIG9sZF9sZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvbGQpO1xuICAgIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbiB8IDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgTWF0aC5taW4obGVuLCBvbGRfbGVuKSk7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG4gIH1cblxuICB3cml0ZShvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICAgIH1cbiAgICBjYW1sX2JsaXRfYnl0ZXMoXG4gICAgICBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5KGJ1ZiksXG4gICAgICBwb3MsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBvZmZzZXQsXG4gICAgICBsZW4sXG4gICAgKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgcmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4gfCAwKTtcbiAgICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmNsYXNzIE1sRmFrZUZkX291dCBleHRlbmRzIE1sRmFrZUZpbGUge1xuICBjb25zdHJ1Y3RvcihmZCwgZmxhZ3MpIHtcbiAgICBzdXBlcihjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoX3MpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgaWYgKGZkID09PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGVsc2UgaWYgKGZkID09PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIpIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ1bmNhdGUoX2xlbiwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgcmFpc2VfdW5peCxcbiAgICAgIFwiRUlOVkFMXCIsXG4gICAgICBcImZ0cnVuY2F0ZVwiLFxuICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgd3JpdHRlbiA9IGxlbjtcbiAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGVuID4gMCAmJlxuICAgICAgICBwb3MgPj0gMCAmJlxuICAgICAgICBwb3MgKyBsZW4gPD0gYnVmLmxlbmd0aCAmJlxuICAgICAgICBidWZbcG9zICsgbGVuIC0gMV0gPT09IDEwXG4gICAgICApXG4gICAgICAgIGxlbi0tO1xuICAgICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH1cbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVCQURGXCIsXG4gICAgICBcIndyaXRlXCIsXG4gICAgICBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIixcbiAgICApO1xuICB9XG5cbiAgcmVhZChfYnVmLCBfcG9zLCBfbGVuLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFQkFERlwiLCBcInJlYWRcIiwgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIpO1xuICB9XG5cbiAgc2VlayhfbGVuLCBfd2hlbmNlLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFU1BJUEVcIiwgXCJsc2Vla1wiLCBcImlsbGVnYWwgc2Vla1wiKTtcbiAgfVxuICBwb3MoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKF9jbWQpIHt9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRmQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBmbGFncykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2Vla2VkID0gZmFsc2U7XG4gIH1cblxuICBlcnJfY2xvc2VkKGNtZCwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRUJBREZcIiwgY21kLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIik7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGgoKTtcbiAgICB0aGlzLmVycl9jbG9zZWQoXCJsZW5ndGhcIik7XG4gIH1cblxuICB0cnVuY2F0ZShsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICBpZiAoISh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgICAgXCJ0cnVuY2F0ZVwiLFxuICAgICAgICAgIFwiaW52YWxpZCBhcmd1bWVudFwiLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZS50cnVuY2F0ZShsZW4pO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJ0cnVuY2F0ZVwiLCByYWlzZV91bml4KTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlICYmICh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBsZW4gPSB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgICAgIHRoaXMub2Zmc2V0ICs9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHRoaXMuZXJyX2Nsb3NlZChcIndyaXRlXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgcmVhZChidWYsIHBvcywgbGVuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKHRoaXMuZmlsZSAmJiAhdGhpcy5mbGFncy53cm9ubHkpIHtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgIGxlbiA9IHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gICAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJyZWFkXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgc2VlayhvZmZzZXQsIHdoZW5jZSwgcmFpc2VfdW5peCkge1xuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIFwibHNlZWtcIixcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5maWxlKSB0aGlzLmVycl9jbG9zZWQoXCJjbG9zZVwiKTtcbiAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKGNtZCkge1xuICAgIGlmICghdGhpcy5maWxlKSByZXR1cm4gdGhpcy5lcnJfY2xvc2VkKGNtZCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuY2xhc3MgTWxJbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGxvLCBtaSwgaGkpIHtcbiAgICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX2pcIjtcbiAgfVxuXG4gIHN0YXRpYyBVTlNJR05FRF9NQVggPSBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZik7XG4gIHN0YXRpYyBTSUdORURfTUFYID0gbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmLCAweDdmZmYpO1xuICBzdGF0aWMgU0lHTkVEX01JTiA9IG5ldyBNbEludDY0KDB4MDAwMDAwLCAweDAwMDAwMCwgMHg4MDAwKTtcblxuICBzbGljZSgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbywgdGhpcy5taSwgdGhpcy5oaSk7XG4gIH1cblxuICB1Y29tcGFyZSh4KSB7XG4gICAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb21wYXJlKHgpIHtcbiAgICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICAgIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICAgIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gICAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHZhciBsbyA9IC10aGlzLmxvO1xuICAgIHZhciBtaSA9IC10aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgICB2YXIgaGkgPSAtdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xuICB9XG5cbiAgYWRkKHgpIHtcbiAgICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gICAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbiAgfVxuXG4gIHN1Yih4KSB7XG4gICAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gICAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICAgIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBtdWwoeCkge1xuICAgIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICAgIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gICAgdmFyIGhpID1cbiAgICAgICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArXG4gICAgICB0aGlzLmhpICogeC5sbyArXG4gICAgICB0aGlzLm1pICogeC5taSArXG4gICAgICB0aGlzLmxvICogeC5oaTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvIHwgdGhpcy5taSB8IHRoaXMuaGkpID09PSAwO1xuICB9XG5cbiAgaXNOZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGkgPDwgMTYgPCAwO1xuICB9XG5cbiAgYW5kKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG4gIH1cblxuICBvcih4KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gfCB4LmxvLCB0aGlzLm1pIHwgeC5taSwgdGhpcy5oaSB8IHguaGkpO1xuICB9XG5cbiAgeG9yKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyBeIHgubG8sIHRoaXMubWkgXiB4Lm1pLCB0aGlzLmhpIF4geC5oaSk7XG4gIH1cblxuICBzaGlmdF9sZWZ0KHMpIHtcbiAgICBzID0gcyAmIDYzO1xuICAgIGlmIChzID09PSAwKSByZXR1cm4gdGhpcztcbiAgICBpZiAocyA8IDI0KSB7XG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgIHRoaXMubG8gPDwgcyxcbiAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHMgPCA0OClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpLFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSk7XG4gIH1cblxuICBzaGlmdF9yaWdodF91bnNpZ25lZChzKSB7XG4gICAgcyA9IHMgJiA2MztcbiAgICBpZiAocyA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHMgPCAyNClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgICB0aGlzLmhpID4+IHMsXG4gICAgICApO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgdGhpcy5oaSA+PiAocyAtIDI0KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xuICB9XG5cbiAgc2hpZnRfcmlnaHQocykge1xuICAgIHMgPSBzICYgNjM7XG4gICAgaWYgKHMgPT09IDApIHJldHVybiB0aGlzO1xuICAgIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICAgIGlmIChzIDwgMjQpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYsXG4gICAgICApO1xuICAgIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSkgPj4gMTYsXG4gICAgICAgIHNpZ24gJiAweGZmZmYsXG4gICAgICApO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xuICB9XG5cbiAgbHNsMSgpIHtcbiAgICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbiAgfVxuXG4gIGxzcjEoKSB7XG4gICAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG4gIH1cblxuICB1ZGl2bW9kKHgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgbW9kdWx1cyA9IHRoaXMuc2xpY2UoKTtcbiAgICB2YXIgZGl2aXNvciA9IHguc2xpY2UoKTtcbiAgICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLCAwLCAwKTtcbiAgICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGl2aXNvci5sc2wxKCk7XG4gICAgfVxuICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgb2Zmc2V0LS07XG4gICAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICAgIHF1b3RpZW50LmxvKys7XG4gICAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICAgIH1cbiAgICAgIGRpdmlzb3IubHNyMSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBxdW90aWVudDogcXVvdGllbnQsIG1vZHVsdXM6IG1vZHVsdXMgfTtcbiAgfVxuXG4gIGRpdih5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gICAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICAgIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICAgIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIG1vZCh5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpO1xuICAgIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gICAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICB0b0ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbiAgfVxuXG4gIHRvRmxvYXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzLmxvXG4gICAgKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuaGkgPj4gOCxcbiAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubG8gJiAweGZmLFxuICAgIF07XG4gIH1cblxuICBsbzMyKCkge1xuICAgIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xuICB9XG5cbiAgaGkzMigpIHtcbiAgICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgsIHkpIHtcbiAgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LCB5LCBfdG90YWwpIHtcbiAgcmV0dXJuIHguY29tcGFyZSh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnKHgpIHtcbiAgcmV0dXJuIHgubmVnKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCh4LCB5KSB7XG4gIHJldHVybiB4LmFkZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViKHgsIHkpIHtcbiAgcmV0dXJuIHguc3ViKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgsIHkpIHtcbiAgcmV0dXJuIHgubXVsKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7XG4gIHJldHVybiAreC5pc1plcm8oKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7XG4gIHJldHVybiAreC5pc05lZygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQoeCwgeSkge1xuICByZXR1cm4geC5hbmQoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IoeCwgeSkge1xuICByZXR1cm4geC5vcih5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yKHgsIHkpIHtcbiAgcmV0dXJuIHgueG9yKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X2xlZnQocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQoeCwgcykge1xuICByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdlxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYoeCwgeSkge1xuICByZXR1cm4geC5kaXYoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kXG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCh4LCB5KSB7XG4gIHJldHVybiB4Lm1vZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuLy9BbGlhczogY2FtbF9pbnQ2NF9vZl9pbnRcbi8vQWxpYXM6IGNhbWxfaW50NjRfb2ZfbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50NjRfdG9faW50XG4vL0FsaWFzOiBjYW1sX2ludDY0X3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMih4KSB7XG4gIHJldHVybiB4LnRvSW50KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geC50b0Zsb2F0KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0KHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSBcIiBcIjtcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQobiwgXCIwXCIpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZShzKTtcbiAgdmFyIGkgPSByWzBdLFxuICAgIHNpZ24gPSByWzFdLFxuICAgIGJhc2UgPSByWzJdLFxuICAgIHNpZ25lZG5lc3MgPSByWzNdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9IE1sSW50NjQuVU5TSUdORURfTUFYLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJJbnQ2NC5vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcIkludDY0Lm9mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoXG4gICAgc2lnbmVkbmVzcyAmJlxuICAgIGNhbWxfaW50NjRfdWx0KHNpZ24gPCAwID8gTWxJbnQ2NC5TSUdORURfTUlOIDogTWxJbnQ2NC5TSUdORURfTUFYLCByZXMpXG4gIClcbiAgICBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZixcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KSB7XG4gIHJldHVybiB2LmhpMzIoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAoYVs3XSA8PCAwKSB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgIChhWzRdIDw8IDApIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgKGFbMV0gPDwgMCkgfCAoYVswXSA8PCA4KSxcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkge1xuICByZXR1cm4geC50b0FycmF5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpIF4gdi5oaTMyKCk7XG59XG4iLCIvL1Byb3ZpZGVzOiBNbE11dGV4XG5jbGFzcyBNbE11dGV4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X25ld1xuLy9SZXF1aXJlczogTWxNdXRleFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIG5ldyBNbE11dGV4KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbXV0ZXhfbG9ja1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9sb2NrKHQpIHtcbiAgaWYgKHQubG9ja2VkKSBjYW1sX2ZhaWx3aXRoKFwiTXV0ZXgubG9jazogbXV0ZXggYWxyZWFkeSBsb2NrZWQuIENhbm5vdCB3YWl0LlwiKTtcbiAgZWxzZSB0LmxvY2tlZCA9IHRydWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X3RyeV9sb2NrXG5mdW5jdGlvbiBjYW1sX21sX211dGV4X3RyeV9sb2NrKHQpIHtcbiAgaWYgKCF0LmxvY2tlZCkge1xuICAgIHQubG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tdXRleF91bmxvY2tcbmZ1bmN0aW9uIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHQpIHtcbiAgdC5sb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHMuX25hdCA9IHtcbiAgICBkZXNlcmlhbGl6ZTogZGVzZXJpYWxpemVfbmF0LFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplX25hdCxcbiAgICBoYXNoOiBjYW1sX2hhc2hfbmF0LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuY2xhc3MgTWxOYXQge1xuICBjb25zdHJ1Y3Rvcih4KSB7XG4gICAgdGhpcy5kYXRhID0gbmV3IEludDMyQXJyYXkoeCk7XG4gICAgLy8gRm9yIG51bSA8IDEuNVxuICAgIC8vIGxlbmd0aF9uYXQgaXNuJ3QgZXh0ZXJuYWwsIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGUgT2JqLnNpemVcbiAgICAvLyB3b3JrIG91dCByaWdodC5cbiAgICAvLyBXZSBhZGQgKzIgdG8gdGhlIGFycmF5IGxlbmd0aDpcbiAgICAvLyAtICsxIGZvciB0aGUgdGFnXG4gICAgLy8gLSArMSBmb3IgdGhlIGN1c3RvbV9vcHMgc2xvdFxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDI7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGxlbmd0aF9uYXRcbmZ1bmN0aW9uIGxlbmd0aF9uYXQoeCkge1xuICByZXR1cm4geC5kYXRhLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpIHtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGFyci5kYXRhW2ldID0gLTE7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy9Qcm92aWRlczogc2V0X3RvX3plcm9fbmF0XG5mdW5jdGlvbiBzZXRfdG9femVyb19uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzICsgaV0gPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBibGl0X25hdFxuZnVuY3Rpb24gYmxpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMiwgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0gbmF0Mi5kYXRhW29mczIgKyBpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQuZGF0YVtvZnMgKyBpXSAhPT0gMCkgcmV0dXJuIGkgKyAxO1xuICB9XG4gIHJldHVybiAxOyAvLyAwIGNvdW50cyBhcyAxIGRpZ2l0XG59XG5cbi8vUHJvdmlkZXM6IG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdFxuZnVuY3Rpb24gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdCwgb2ZzKSB7XG4gIHZhciBhID0gbmF0LmRhdGFbb2ZzXTtcbiAgdmFyIGIgPSAwO1xuICBpZiAoYSAmIDB4ZmZmZjAwMDApIHtcbiAgICBiICs9IDE2O1xuICAgIGEgPj4+PSAxNjtcbiAgfVxuICBpZiAoYSAmIDB4ZmYwMCkge1xuICAgIGIgKz0gODtcbiAgICBhID4+Pj0gODtcbiAgfVxuICBpZiAoYSAmIDB4ZjApIHtcbiAgICBiICs9IDQ7XG4gICAgYSA+Pj49IDQ7XG4gIH1cbiAgaWYgKGEgJiAxMikge1xuICAgIGIgKz0gMjtcbiAgICBhID4+Pj0gMjtcbiAgfVxuICBpZiAoYSAmIDIpIHtcbiAgICBiICs9IDE7XG4gICAgYSA+Pj49IDE7XG4gIH1cbiAgaWYgKGEgJiAxKSB7XG4gICAgYiArPSAxO1xuICB9XG4gIHJldHVybiAzMiAtIGI7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X2ludFxuZnVuY3Rpb24gaXNfZGlnaXRfaW50KG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdID49IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9ub3JtYWxpemVkXG5mdW5jdGlvbiBpc19kaWdpdF9ub3JtYWxpemVkKF9uYXQsIF9vZnMpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdICYgMSkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpbmNyX25hdFxuZnVuY3Rpb24gaW5jcl9uYXQobmF0LCBvZnMsIGxlbiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHggfCAwO1xuICAgIGlmICh4ID09PSB4ID4+PiAwKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2FycnkgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogYWRkX25hdFxuLy9SZXF1aXJlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0geDtcbiAgICBpZiAoeCA9PT0geCA+Pj4gMCkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGNhcnJ5KTtcbn1cblxuLy9Qcm92aWRlczogY29tcGxlbWVudF9uYXRcbmZ1bmN0aW9uIGNvbXBsZW1lbnRfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcyArIGldID0gKC0xID4+PiAwKSAtIChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gY2FycnlfaW4gPT09IDEgPyAwIDogMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcyArIGldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9ycm93ID09PSAxID8gMCA6IDE7XG59XG5cbi8vIG9jYW1sIGZsaXBzIGNhcnJ5X2luXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IHN1Yl9uYXRcbi8vUmVxdWlyZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBzdWJfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSBjYXJyeV9pbiA9PT0gMSA/IDAgOiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvcnJvdyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGJvcnJvdyA9PT0gMSA/IDAgOiAxKTtcbn1cblxuLy8gbmF0MSArPSBuYXQyICogbmF0M1tvZnMzXVxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBtdWx0X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogYWRkX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBhID0gbmF0My5kYXRhW29mczNdID4+PiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9XG4gICAgICAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgK1xuICAgICAgKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApICogKGEgJiAweDAwMDBmZmZmKSArXG4gICAgICBjYXJyeTtcbiAgICB2YXIgeDIgPSAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4MiAvIDY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4MztcbiAgICBjYXJyeSArPSBNYXRoLmZsb29yKHgzIC8gNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZiAobGVuMiA8IGxlbjEgJiYgY2FycnkpIHtcbiAgICByZXR1cm4gYWRkX25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgbGVuMixcbiAgICAgIGxlbjEgLSBsZW4yLFxuICAgICAgbmF0X29mX2FycmF5KFtjYXJyeV0pLFxuICAgICAgMCxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgaSxcbiAgICAgIGxlbjEgLSBpLFxuICAgICAgbmF0MixcbiAgICAgIG9mczIsXG4gICAgICBsZW4yLFxuICAgICAgbmF0MyxcbiAgICAgIG9mczMgKyBpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBuYXQxID0gMiAqIG5hdDEgKyBuYXQyICogbmF0MlxuLy8gbGVuMSA+PSAyICogbGVuMlxuLy9Qcm92aWRlczogc3F1YXJlX25hdFxuLy9SZXF1aXJlczogbXVsdF9uYXQsIGFkZF9uYXRcbmZ1bmN0aW9uIHNxdWFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgY2FycnkgPSAwO1xuICBjYXJyeSArPSBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDEsIG9mczEsIGxlbjEsIDApO1xuICBjYXJyeSArPSBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQyLCBvZnMyLCBsZW4yKTtcbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZiAobmJpdHMgPT09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IChhIDw8IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPj4+ICgzMiAtIG5iaXRzKTtcbiAgfVxuICBuYXQyLmRhdGFbb2ZzMl0gPSB3cmFwO1xuICByZXR1cm4gMDtcbn1cblxuLy8gQXNzdW1pbmcgYyA+IGEsIHJldHVybnMgW3F1b3RpZW50LCByZW1haW5kZXJdIG9mIChhPDwzMiArIGIpL2Ncbi8vUHJvdmlkZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9oZWxwZXIoYSwgYiwgYykge1xuICB2YXIgeCA9IGEgKiA2NTUzNiArIChiID4+PiAxNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4IC8gYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwZmZmZik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3IodyAvIGMpLCB3ICUgY107XG59XG5cbi8vIG5hdDFbb2ZzMStsZW5dIDwgbmF0MltvZnMyXVxuLy9Qcm92aWRlczogZGl2X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2RpZ2l0X25hdChuYXRxLCBvZnNxLCBuYXRyLCBvZnNyLCBuYXQxLCBvZnMxLCBsZW4sIG5hdDIsIG9mczIpIHtcbiAgdmFyIHJlbSA9IG5hdDEuZGF0YVtvZnMxICsgbGVuIC0gMV0gPj4+IDA7XG4gIC8vIG5hdHFbb2ZzcStsZW4tMV0gaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIChkdWUgdG8gdGhlIE1TRCByZXF1aXJlbWVudCksXG4gIC8vIGFuZCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uXG4gIGZvciAodmFyIGkgPSBsZW4gLSAyOyBpID49IDA7IGktLSkge1xuICAgIHZhciB4ID0gZGl2X2hlbHBlcihyZW0sIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsIG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCk7XG4gICAgbmF0cS5kYXRhW29mc3EgKyBpXSA9IHhbMF07XG4gICAgcmVtID0geFsxXTtcbiAgfVxuICBuYXRyLmRhdGFbb2Zzcl0gPSByZW07XG4gIHJldHVybiAwO1xufVxuXG4vLyBuYXQxW25hdDI6XSA6PSBuYXQxIC8gbmF0MlxuLy8gbmF0MVs6bmF0Ml0gOj0gbmF0MSAlIG5hdDJcbi8vIGxlbjEgPiBsZW4yLCBuYXQyW29mczIrbGVuMi0xXSA+IG5hdDFbb2ZzMStsZW4xLTFdXG4vL1Byb3ZpZGVzOiBkaXZfbmF0XG4vL1JlcXVpcmVzOiBkaXZfZGlnaXRfbmF0LCBkaXZfaGVscGVyLCBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQsIHNoaWZ0X2xlZnRfbmF0LCBzaGlmdF9yaWdodF9uYXQsIGNyZWF0ZV9uYXQsIHNldF90b196ZXJvX25hdCwgbXVsdF9kaWdpdF9uYXQsIHN1Yl9uYXQsIGNvbXBhcmVfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIGRpdl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICBpZiAobGVuMiA9PT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSArIDEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMiArIGxlbjIgLSAxKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIgKyBsZW4yIC0gMV0gPj4+IDApICsgMTtcbiAgdmFyIGEgPSBjcmVhdGVfbmF0KGxlbjIgKyAxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID1cbiAgICAgIGQgPT09IDQyOTQ5NjcyOTZcbiAgICAgICAgPyBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwXG4gICAgICAgIDogZGl2X2hlbHBlcihcbiAgICAgICAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsXG4gICAgICAgICAgICBuYXQxLmRhdGFbb2ZzMSArIGkgLSAxXSA+Pj4gMCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgKVswXTtcbiAgICBzZXRfdG9femVyb19uYXQoYSwgMCwgbGVuMiArIDEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIgKyAxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiArIDEsIGEsIDAsIGxlbjIgKyAxLCAxKTtcblxuICAgIHdoaWxlIChcbiAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gIT09IDAgfHxcbiAgICAgIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMFxuICAgICkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMSArIGkgLSBsZW4yLCBsZW4yICsgMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IHF1bztcbiAgfVxuXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHNoaWZ0IHJlbWFpbmRlclxuICBzaGlmdF9yaWdodF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyByZXN0b3JlXG4gIHJldHVybiAwO1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmIChuYml0cyA9PT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGEgPSBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYgKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmIChuYXQxLmRhdGFbb2ZzMV0gPCBuYXQyLmRhdGFbb2ZzMl0pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfbmF0XG4vL1JlcXVpcmVzOiBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgYSA9IG51bV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIGxlbjEpO1xuICB2YXIgYiA9IG51bV9kaWdpdHNfbmF0KG5hdDIsIG9mczIsIGxlbjIpO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwID4gbmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgcmV0dXJuIDE7XG4gICAgaWYgKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAgPCBuYXQyLmRhdGFbb2ZzMiArIGldID4+PiAwKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxhbmRfZGlnaXRfbmF0XG5mdW5jdGlvbiBsYW5kX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSAmPSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBsb3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBsb3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIHw9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGx4b3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBseG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSBePSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeikge1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3opIHtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX3dpbjMyXG52YXIganNvb19pc193aW4zMiA9XG4gIGdsb2JhbFRoaXMuRGVubz8uYnVpbGQ/Lm9zID09PSBcIndpbmRvd3NcIiB8fFxuICBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHNcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbmNsYXNzIE1sTm9kZURldmljZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICB0aGlzLmZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgfVxuXG4gIG5tKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yb290ICsgbmFtZTtcbiAgfVxuXG4gIGV4aXN0cyhuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGlzRmlsZShuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpID8gMSA6IDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLCB7IG1vZGU6IG1vZGUgfSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGlzX2RpcihuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB1bmxpbmsobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgdXRpbWVzKG5hbWUsIGF0aW1lLCBtdGltZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXRpbWUgPT09IDAgJiYgbXRpbWUgPT09IDApIHtcbiAgICAgICAgYXRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIG10aW1lID0gYXRpbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZzLnV0aW1lc1N5bmModGhpcy5ubShuYW1lKSwgYXRpbWUsIG10aW1lKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICB0cnVuY2F0ZShuYW1lLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy50cnVuY2F0ZVN5bmModGhpcy5ubShuYW1lKSwgbGVuIHwgMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgY29uc3RzID0gdGhpcy5mcy5jb25zdGFudHM7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIga2V5IGluIGYpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5SX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuV19PSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXMgfD0ganNvb19pc193aW4zMiA/IGNvbnN0cy5SX09LIDogY29uc3RzLlhfT0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5GX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5hY2Nlc3NTeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBwZXJtcywgcmFpc2VfdW5peCkge1xuICAgIHZhciBjb25zdHMgPSB0aGlzLmZzLmNvbnN0YW50cztcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gZikge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInJkb25seVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRE9OTFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3cm9ubHlcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmR3clwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRFdSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXBwZW5kXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19DUkVBVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX1RSVU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhjbFwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19FWENMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fVEVYVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm5vbmJsb2NrXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm9jdHR5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PQ1RUWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRzeW5jXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0RTWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3luY1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19TWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMsIHBlcm1zKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIHJlbmFtZShvLCBuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKGpzb29faXNfd2luMzIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLm5tKG4pO1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5ubShvKTtcbiAgICAgICAgdmFyIHRhcmdldF9zdGF0cywgc291cmNlX3N0YXRzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldF9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGFyZ2V0LCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgKHNvdXJjZV9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmMoc291cmNlLCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgc291cmNlX3N0YXRzLmlzRGlyZWN0b3J5KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRhcmdldF9zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xhc2godGFyZ2V0KS5zdGFydHNXaXRoKHRoaXMuc2xhc2goc291cmNlKSkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcy5ybWRpclN5bmModGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCByZW5hbWUgJyR7c291cmNlfScgLT4gJyR7dGFyZ2V0fSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyLCB7XG4gICAgICAgICAgICAgIGVycm5vOiAtMjAsXG4gICAgICAgICAgICAgIGNvZGU6IFwiRU5PVERJUlwiLFxuICAgICAgICAgICAgICBzeXNjYWxsOiBcInJlbmFtZVwiLFxuICAgICAgICAgICAgICBwYXRoOiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgbHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNobW9kKG5hbWUsIHBlcm1zLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2htb2RTeW5jKHRoaXMubm0obmFtZSksIHBlcm1zKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgc3ltbGluayh0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRoaXMubm0ocGF0aCksXG4gICAgICAgIHRvX2RpciA9PT0gMCA/IG51bGwgOiB0b19kaXJbMV0gPyBcImRpclwiIDogXCJmaWxlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRsaW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCBcInV0ZjhcIik7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IG9jYW1sX3N0YXRzX2Zyb21fbm9kZV9zdGF0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdFxuZnVuY3Rpb24gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSkge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vIHwgMCxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAgbGFyZ2UgPyBjYW1sX2ludDY0X29mX2Zsb2F0KGpzX3N0YXRzLnNpemUpIDoganNfc3RhdHMuc2l6ZSB8IDAsXG4gICAganNfc3RhdHMuYXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMubXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMuY3RpbWVNcyAvIDEwMDAsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuY2xhc3MgTWxOb2RlRGV2aWNlIHt9XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvciwgb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzXG5jbGFzcyBNbE5vZGVGZCBleHRlbmRzIE1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKGZkLCBmbGFncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mcyA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuICAgIHRoaXMuZmQgPSBmZDtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKGZkKTtcbiAgICAgIGZsYWdzLm5vU2VlayA9XG4gICAgICAgIHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNGSUZPKCkgfHwgc3RhdHMuaXNTb2NrZXQoKTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5mbGFncy5hcHBlbmQgPyBzdGF0cy5zaXplIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmc3RhdCB3aWxsIGZhaWwgb24gc3RhbmRhcmQgc3RyZWFtcyB1bmRlciBXaW5kb3dzIHdpdGggbm9kZVxuICAgICAgLy8gMTggKGFuZCBsb3dlcikuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8zODExLlxuICAgICAgZmxhZ3Mubm9TZWVrID0gdHJ1ZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZWVrZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCwgbGVuIHwgMCk7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPiBsZW4pIHRoaXMub2Zmc2V0ID0gbGVuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBpc2F0dHkoKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoXCJub2RlOnR0eVwiKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eSh0aGlzLmZkKSA/IDEgOiAwO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5mbGFncy5ub1NlZWsgfHwgIXRoaXMuc2Vla2VkKSB7XG4gICAgICAgIHZhciB3cml0dGVuID0gdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHdyaXR0ZW4gPSB0aGlzLmZzLndyaXRlU3luYyhcbiAgICAgICAgICB0aGlzLmZkLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBidWZfb2Zmc2V0LFxuICAgICAgICAgIGxlbixcbiAgICAgICAgICB0aGlzLm9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbiAgfVxuXG4gIHJlYWQoYSwgYnVmX29mZnNldCwgbGVuLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZsYWdzLm5vU2VlayB8fCAhdGhpcy5zZWVrZWQpIHtcbiAgICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCB0aGlzLm9mZnNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9mZnNldCArPSByZWFkO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlZWsob2Zmc2V0LCB3aGVuY2UsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5mbGFncy5ub1NlZWspIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRVNQSVBFXCIsIFwibHNlZWtcIiwgXCJpbGxlZ2FsIHNlZWtcIik7XG4gICAgfVxuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFSU5WQUxcIixcbiAgICAgICAgXCJsc2Vla1wiLFxuICAgICAgICBcImludmFsaWQgYXJndW1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgc3RhdChsYXJnZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjaG1vZChwZXJtcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZjaG1vZFN5bmModGhpcy5mZCwgcGVybXMpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSk7XG4gICAgfVxuICB9XG5cbiAgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5mc3luY1N5bmModGhpcy5mZCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZShyYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrX3N0cmVhbV9zZW1hbnRpY3MoY21kKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIGNtZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGpzX3N0YXRzLmlzRmlsZSgpIHx8XG4gICAgICAgIGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNGSUZPKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNTb2NrZXQoKVxuICAgICAgKVxuICAgIClcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIGNtZCxcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5jbGFzcyBNbE5vZGVGZCB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpIHtcbiAgaWYgKGZsYWdzLmFsdG5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MuYWx0bmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoX2ZkLCBfZmxhZ3MpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncywgbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4LCBjbWQpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoXG4gICAgICBlcnIuY29kZSxcbiAgICAgIGNtZCB8fCBlcnIuc3lzY2FsbCxcbiAgICAgIGVyci5wYXRoLFxuICAgICAgZXJyLmVycm5vLFxuICAgICk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxudmFyIGNhbWxfdW5wYWNrRmxvYXQxNiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgRVhQX01BU0sxNiA9IDMxOyAvLyAyICoqIDUgLSAxXG4gIHZhciBTSUdOSUZJQ0FORF9NQVNLMTYgPSAxMDIzOyAvLyAyICoqIDEwIC0gMVxuICB2YXIgTUlOX1NVQk5PUk1BTDE2ID0gcG93KDIsIC0yNCk7IC8vIDIgKiogLTEwICogMiAqKiAtMTRcbiAgdmFyIFNJR05JRklDQU5EX0RFTk9NMTYgPSAwLjAwMDk3NjU2MjU7IC8vIDIgKiogLTEwXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzaWduID0gYnl0ZXMgPj4+IDE1O1xuICAgIHZhciBleHBvbmVudCA9IChieXRlcyA+Pj4gMTApICYgRVhQX01BU0sxNjtcbiAgICB2YXIgc2lnbmlmaWNhbmQgPSBieXRlcyAmIFNJR05JRklDQU5EX01BU0sxNjtcbiAgICBpZiAoZXhwb25lbnQgPT09IEVYUF9NQVNLMTYpXG4gICAgICByZXR1cm4gc2lnbmlmaWNhbmQgPT09IDBcbiAgICAgICAgPyBzaWduID09PSAwXG4gICAgICAgICAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgICA6IE51bWJlci5OYU47XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKVxuICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICogKHNpZ24gPT09IDAgPyBNSU5fU1VCTk9STUFMMTYgOiAtTUlOX1NVQk5PUk1BTDE2KTtcbiAgICB2YXIgciA9XG4gICAgICBwb3coMiwgZXhwb25lbnQgLSAxNSkgKlxuICAgICAgKHNpZ24gPT09IDBcbiAgICAgICAgPyAxICsgc2lnbmlmaWNhbmQgKiBTSUdOSUZJQ0FORF9ERU5PTTE2XG4gICAgICAgIDogLTEgLSBzaWduaWZpY2FuZCAqIFNJR05JRklDQU5EX0RFTk9NMTYpO1xuICAgIHJldHVybiByO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9wYWNrRmxvYXQxNlxudmFyIGNhbWxfcGFja0Zsb2F0MTYgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBJTlZFUlNFX09GX0VQU0lMT04gPSAxIC8gTnVtYmVyLkVQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUaWVzVG9FdmVuKG51bSkge1xuICAgIHJldHVybiBudW0gKyBJTlZFUlNFX09GX0VQU0lMT04gLSBJTlZFUlNFX09GX0VQU0lMT047XG4gIH1cblxuICBjb25zdCBGTE9BVDE2X01JTl9WQUxVRSA9IDYuMTAzNTE1NjI1ZS01O1xuICBjb25zdCBGTE9BVDE2X01BWF9WQUxVRSA9IDY1NTA0O1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT04gPSAwLjAwMDk3NjU2MjU7XG5cbiAgY29uc3QgRkxPQVQxNl9FUFNJTE9OX01VTFRJUExJRURfQllfRkxPQVQxNl9NSU5fVkFMVUUgPVxuICAgIEZMT0FUMTZfRVBTSUxPTiAqIEZMT0FUMTZfTUlOX1ZBTFVFO1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT05fREVWSURFRF9CWV9FUFNJTE9OID1cbiAgICBGTE9BVDE2X0VQU0lMT04gKiBJTlZFUlNFX09GX0VQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUb0Zsb2F0MTYobnVtKSB7XG4gICAgY29uc3QgbnVtYmVyID0gK251bTtcblxuICAgIC8vIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLTBcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpIHx8IG51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBmaW5pdGUgZXhjZXB0IDAsIC0wXG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA+IDAgPyAxIDogLTE7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBNYXRoLmFicyhudW1iZXIpO1xuXG4gICAgLy8gc21hbGwgbnVtYmVyXG4gICAgaWYgKGFic29sdXRlIDwgRkxPQVQxNl9NSU5fVkFMVUUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNpZ24gKlxuICAgICAgICByb3VuZFRpZXNUb0V2ZW4oXG4gICAgICAgICAgYWJzb2x1dGUgLyBGTE9BVDE2X0VQU0lMT05fTVVMVElQTElFRF9CWV9GTE9BVDE2X01JTl9WQUxVRSxcbiAgICAgICAgKSAqXG4gICAgICAgIEZMT0FUMTZfRVBTSUxPTl9NVUxUSVBMSUVEX0JZX0ZMT0FUMTZfTUlOX1ZBTFVFXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXAgPSAoMSArIEZMT0FUMTZfRVBTSUxPTl9ERVZJREVEX0JZX0VQU0lMT04pICogYWJzb2x1dGU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGVtcCAtICh0ZW1wIC0gYWJzb2x1dGUpO1xuXG4gICAgLy8gbGFyZ2UgbnVtYmVyXG4gICAgaWYgKHJlc3VsdCA+IEZMT0FUMTZfTUFYX1ZBTFVFIHx8IE51bWJlci5pc05hTihyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGJhc2UgYWxnb3JpdGhtOiBodHRwOi8vZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcblxuICBjb25zdCBiYXNlVGFibGUgPSBuZXcgVWludDE2QXJyYXkoNTEyKTtcbiAgY29uc3Qgc2hpZnRUYWJsZSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGNvbnN0IGUgPSBpIC0gMTI3O1xuXG4gICAgLy8gdmVyeSBzbWFsbCBudW1iZXIgKDAsIC0wKVxuICAgIGlmIChlIDwgLTI0KSB7XG4gICAgICBiYXNlVGFibGVbaV0gPSAweDAwMDA7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAyNDtcbiAgICAgIHNoaWZ0VGFibGVbaSB8IDB4MTAwXSA9IDI0O1xuXG4gICAgICAvLyBzbWFsbCBudW1iZXIgKGRlbm9ybSlcbiAgICB9IGVsc2UgaWYgKGUgPCAtMTQpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4MDQwMCA+PiAoLWUgLSAxNCk7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9ICgweDA0MDAgPj4gKC1lIC0gMTQpKSB8IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAtZSAtIDE7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAtZSAtIDE7XG5cbiAgICAgIC8vIG5vcm1hbCBudW1iZXJcbiAgICB9IGVsc2UgaWYgKGUgPD0gMTUpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IChlICsgMTUpIDw8IDEwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAoKGUgKyAxNSkgPDwgMTApIHwgMHg4MDAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDEzO1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMTM7XG5cbiAgICAgIC8vIGxhcmdlIG51bWJlciAoSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2UgaWYgKGUgPCAxMjgpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4N2MwMDtcbiAgICAgIGJhc2VUYWJsZVtpIHwgMHgxMDBdID0gMHhmYzAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDI0O1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMjQ7XG5cbiAgICAgIC8vIHN0YXkgKE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVRhYmxlW2ldID0gMHg3YzAwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAweGZjMDA7XG4gICAgICBzaGlmdFRhYmxlW2ldID0gMTM7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAxMztcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7XG4gIGNvbnN0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgY29uc3QgdWludDMyVmlldyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG4gICAgZmxvYXRWaWV3WzBdID0gcm91bmRUb0Zsb2F0MTYobnVtKTtcbiAgICBjb25zdCBmID0gdWludDMyVmlld1swXTtcbiAgICBjb25zdCBlID0gKGYgPj4gMjMpICYgMHgxZmY7XG4gICAgcmV0dXJuIGJhc2VUYWJsZVtlXSArICgoZiAmIDB4MDA3ZmZmZmYpID4+IHNoaWZ0VGFibGVbZV0pO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKSB7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2aWV3ID0gRmxvYXQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgdmlldyA9IEZsb2F0NjRBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZpZXcgPSBJbnQ4QXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2aWV3ID0gVWludDhBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZpZXcgPSBJbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmlldyA9IFVpbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2aWV3ID0gSW50MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZpZXcgPSBJbnQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmlldyA9IEZsb2F0MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2aWV3ID0gRmxvYXQ2NEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZpZXcgPSBVaW50OEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHZpZXcgPSBVaW50MTZBcnJheTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIjtcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG4vL1JlcXVpcmVzOiBjYW1sX3BhY2tGbG9hdDE2LCBjYW1sX3VucGFja0Zsb2F0MTZcbmNsYXNzIE1sX0JpZ2FycmF5IHtcbiAgY29uc3RydWN0b3Ioa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5kYXRhID0gYnVmZmVyO1xuICAgIHRoaXMuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuICB9XG5cbiAgb2Zmc2V0KGFyZykge1xuICAgIHZhciBvZnMgPSAwO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYXJnLmxlbmd0aClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgb2ZzID0gb2ZzICogdGhpcy5kaW1zW2ldICsgYXJnW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSkge1xuICAgICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBvZnMgPSBvZnMgKiB0aGlzLmRpbXNbaV0gKyAoYXJnW2ldIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZnM7XG4gIH1cblxuICBnZXQob2ZzKSB7XG4gICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgICAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLCBoKTtcbiAgICAgIGNhc2UgMTA6XG4gICAgICBjYXNlIDExOlxuICAgICAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgICAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICAgICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgcmV0dXJuIGNhbWxfdW5wYWNrRmxvYXQxNih0aGlzLmRhdGFbb2ZzXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW29mc107XG4gICAgfVxuICB9XG5cbiAgc2V0KG9mcywgdikge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIC8vIEludDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgICAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGFbb2ZzXSA9IGNhbWxfcGFja0Zsb2F0MTYodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBJbnQ2NFxuICAgICAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gYSA6IGI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHZhciBpbSA9IHZbMV07XG4gICAgICAgIHZhciByZSA9IHZbMl07XG4gICAgICAgIGlmIChpbSA9PT0gcmUpIHtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gaW0gOiByZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGEuZmlsbChjYW1sX3BhY2tGbG9hdDE2KHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZShiLCB0b3RhbCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9PSBiLmtpbmQpIHtcbiAgICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICAgIHZhciBrMiA9IGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICAgIHJldHVybiBrMiAtIGsxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYi5kaW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICh0aGlzLmRpbXNbaV0gIT09IGIuZGltc1tpXSkgcmV0dXJuIHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSA/IC0xIDogMTtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICB2YXIgeCwgeTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICAgICAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoeCAhPT0geSkge1xuICAgICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE51bWJlci5OYU47XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih5KSkgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA8IGIuZGF0YVtpICsgMV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA+IGIuZGF0YVtpICsgMV0pIHJldHVybiAxO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPj4+IDAgPCBiLmRhdGFbaV0gPj4+IDApIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4+PiAwID4gYi5kYXRhW2ldID4+PiAwKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGFhID0gY2FtbF91bnBhY2tGbG9hdDE2KHRoaXMuZGF0YVtpXSk7XG4gICAgICAgICAgdmFyIGJiID0gY2FtbF91bnBhY2tGbG9hdDE2KGIuZGF0YVtpXSk7XG4gICAgICAgICAgaWYgKGFhIDwgYmIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYWEgPiBiYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEyOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmNsYXNzIE1sX0JpZ2FycmF5X2NfMV8xIGV4dGVuZHMgTWxfQmlnYXJyYXkge1xuICBvZmZzZXQoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA9PT0gMSkgYXJnID0gYXJnWzBdO1xuICAgICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gICAgfVxuICAgIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgZ2V0KG9mcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbiAgfVxuXG4gIHNldChvZnMsIHYpIHtcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLCBiLCB0b3RhbCkge1xuICByZXR1cm4gYS5jb21wYXJlKGIsIHRvdGFsKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSkge1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmIChjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmIChcbiAgICBsYXlvdXQgPT09IDAgJiYgLy8gY19sYXlvdXRcbiAgICBkaW1zLmxlbmd0aCA9PT0gMSAmJiAvLyBBcnJheTFcbiAgICBzaXplX3Blcl9lbGVtZW50ID09PSAxICYmXG4gICAga2luZCAhPT0gMTMgLy8gZmxvYXQxNlxuICApXG4gICAgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmIChiYS5sYXlvdXQgPT09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiBiMSB8IChiMiA8PCA4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMgKyAwKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzICsgMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMgKyAzKTtcbiAgcmV0dXJuIChiMSA8PCAwKSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQgPDwgMjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyArIDApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMgKyAyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyArIDMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzICsgNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMgKyA1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcyArIDYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzICsgNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCwgYjcsIGI2LCBiNSwgYjQsIGIzLCBiMiwgYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMgKyAwLCB2ICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZiAob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzICsgMCwgdiAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzICsgMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAzLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcyArIGksIHZbNyAtIGldKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9PSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gMTsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBiYS5kaW1zW2NoYW5nZWRfZGltXSkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShcbiAgICBvZnMgKiBzaXplX3Blcl9lbGVtZW50LFxuICAgIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQsXG4gICk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpO1xuICBpZiAoYmEuY2FtbF9jdXN0b20gPT09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYmEuZGltc1tpXSA8IDB4ZmZmZikgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgY2FzZSA1OiAvLyBVaW50MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6IC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OiAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOiAvLyBGbG9hdDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlKDgsIGJbal0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKSB7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmO1xuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW107XG4gIGlmIChuYW1lID09PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmIChzaXplX2RpbSA9PT0gMHhmZmZmKSB7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmIChzaXplX2RpbV9oaSAhPT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OiAvLyBJbnQzMkFycmF5IChpbnQpXG4gICAgY2FzZSA5OiAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICBpZiAoc2l4dHkpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiLFxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICAgIGJhLnNldChpLCBpbnQ2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6IC8vIEZsb2F0MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDA6IC8vIEZsb2F0MzJBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBbMjU0LCByZSwgaW1dKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBiYS5zZXQoaSwgWzI1NCwgcmUsIGltXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfYmFfY3JlYXRlX3Vuc2FmZV0gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIF9qc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKSB7XG4gIGlmIChkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09PSAyKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF91bnBhY2tGbG9hdDE2LCBjYW1sX2hhc2hfbWl4X2Zsb2F0MTYsIGNhbWxfaGFzaF9taXhfZmxvYXQzMlxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKSB7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgICAgdmFyIHcgPSAwLFxuICAgICAgICBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9lbHRzOyBpICs9IDQpIHtcbiAgICAgICAgdyA9XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDBdICYgMHhmZikgfFxuICAgICAgICAgICgoYmEuZGF0YVtpICsgMV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChiYS5kYXRhW2kgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDNdIDw8IDI0KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgICAgfVxuICAgICAgdyA9IDA7XG4gICAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICAgIHcgPSBiYS5kYXRhW2kgKyAyXSA8PCAxNjtcbiAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDFdIDw8IDg7XG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDogLy8gSW50MTZBcnJheVxuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGlmIChudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgICB2YXIgdyA9IDAsXG4gICAgICAgIGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gbnVtX2VsdHM7IGkgKz0gMikge1xuICAgICAgICB3ID0gKGJhLmRhdGFbaSArIDBdICYgMHhmZmZmKSB8IChiYS5kYXRhW2kgKyAxXSA8PCAxNik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPT0gMCkgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgICBudW1fZWx0cyAqPSAyO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMDogLy8gRmxvYXQzMkFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKylcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQzMihoLCBiYS5kYXRhW2ldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMTogLy8gRmxvYXQ2NEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgaWYgKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdDE2KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQxNlxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQxNihoYXNoLCBkKSB7XG4gIC8qIE5vcm1hbGl6ZSBOYU5zICovXG4gIGlmICgoZCAmIDB4N2MwMCkgPT09IDB4N2MwMCAmJiAoZCAmIDB4MDNmZikgIT09IDApIHtcbiAgICBkID0gMHg3YzAxO1xuICB9IGVsc2UgaWYgKGQgPT09IDB4ODAwMCkge1xuICAgIC8qIE5vcm1hbGl6ZSAtMCBpbnRvICswICovXG4gICAgZCA9IDA7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQzMihoYXNoLCB2KSB7XG4gIHZhciBpID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KHYpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGkgJiAweDdmODAwMDAwKSA9PT0gMHg3ZjgwMDAwMCAmJiAoaSAmIDB4N2ZmZmZmKSAhPT0gMCkge1xuICAgIGkgPSAweDdmODAwMDAxO1xuICB9IGVsc2UgaWYgKGkgPT09ICgweDgwMDAwMDAwIHwgMCkpIHtcbiAgICAvKiBOb3JtYWxpemUgLTAgaW50byArMCAqL1xuICAgIC8vIFRoaXMgY29kZSBwYXRoIGlzIG5vdCB1c2VkIGJ5IGNhbWxfaGFzaCBiZWNhdXNlIDAgYW5kIC0wIGxvb2tcbiAgICAvLyBsaWtlIGludGVnZXJzXG4gICAgaSA9IDA7XG4gIH1cbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGkpO1xuICByZXR1cm4gaGFzaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKSB7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpIHtcbiAgdmFyIGtpbmQ7XG4gIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKSB7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICAgID8gbmV3IEludDMyQXJyYXkodGEuYnVmZmVyLCB0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpXG4gICAgICA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShcbiAgICBiYS5idWZmZXIsXG4gICAgYmEuYnl0ZU9mZnNldCxcbiAgICBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSwgcG9zMSArIGkpO1xuICAgIHZhciBiID0gY2FtbF9iYV9nZXRfMShzMiwgcG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGJhMS5kYXRhLnN1YmFycmF5KG9mczEsIG9mczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2UsIHBvczIpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pIHtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYgKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyMSkuc3ViYXJyYXkocG9zMSwgcG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSwgb2ZzMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhKHN0cjEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChwb3MxICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zdWJhcnJheShwb3MxLCBwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLCBvZnMyKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChwb3MyICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoYnl0ZXMyKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLCBvZnMxICsgbGVuKTtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoc2xpY2UpLCAwLCBieXRlczIsIHBvczIsIGxlbik7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogYmxha2UyYlxuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBibGFrZTJiID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQmxha2UyQiBpbiBwdXJlIEphdmFzY3JpcHRcbiAgLy8gQWRhcHRlZCBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gUkZDNzY5M1xuICAvLyBQb3J0ZWQgdG8gSmF2YXNjcmlwdCBieSBEQyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kY3Bvc2NoXG5cbiAgLy8gNjQtYml0IHVuc2lnbmVkIGFkZGl0aW9uXG4gIC8vIFNldHMgdlthLGErMV0gKz0gdltiLGIrMV1cbiAgLy8gdiBzaG91bGQgYmUgYSBVaW50MzJBcnJheVxuICBmdW5jdGlvbiBBREQ2NEFBKHYsIGEsIGIpIHtcbiAgICBjb25zdCBvMCA9IHZbYV0gKyB2W2JdO1xuICAgIGxldCBvMSA9IHZbYSArIDFdICsgdltiICsgMV07XG4gICAgaWYgKG8wID49IDB4MTAwMDAwMDAwKSB7XG4gICAgICBvMSsrO1xuICAgIH1cbiAgICB2W2FdID0gbzA7XG4gICAgdlthICsgMV0gPSBvMTtcbiAgfVxuXG4gIC8vIDY0LWJpdCB1bnNpZ25lZCBhZGRpdGlvblxuICAvLyBTZXRzIHZbYSxhKzFdICs9IGJcbiAgLy8gYjAgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGIsIGIxIHJlcHJlc2VudHMgdGhlIGhpZ2ggMzIgYml0c1xuICBmdW5jdGlvbiBBREQ2NEFDKHYsIGEsIGIwLCBiMSkge1xuICAgIGxldCBvMCA9IHZbYV0gKyBiMDtcbiAgICBpZiAoYjAgPCAwKSB7XG4gICAgICBvMCArPSAweDEwMDAwMDAwMDtcbiAgICB9XG4gICAgbGV0IG8xID0gdlthICsgMV0gKyBiMTtcbiAgICBpZiAobzAgPj0gMHgxMDAwMDAwMDApIHtcbiAgICAgIG8xKys7XG4gICAgfVxuICAgIHZbYV0gPSBvMDtcbiAgICB2W2EgKyAxXSA9IG8xO1xuICB9XG5cbiAgLy8gTGl0dGxlLWVuZGlhbiBieXRlIGFjY2Vzc1xuICBmdW5jdGlvbiBCMkJfR0VUMzIoYXJyLCBpKSB7XG4gICAgcmV0dXJuIGFycltpXSBeIChhcnJbaSArIDFdIDw8IDgpIF4gKGFycltpICsgMl0gPDwgMTYpIF4gKGFycltpICsgM10gPDwgMjQpO1xuICB9XG5cbiAgLy8gRyBNaXhpbmcgZnVuY3Rpb25cbiAgLy8gVGhlIFJPVFJzIGFyZSBpbmxpbmVkIGZvciBzcGVlZFxuICBmdW5jdGlvbiBCMkJfRyhhLCBiLCBjLCBkLCBpeCwgaXkpIHtcbiAgICBjb25zdCB4MCA9IG1baXhdO1xuICAgIGNvbnN0IHgxID0gbVtpeCArIDFdO1xuICAgIGNvbnN0IHkwID0gbVtpeV07XG4gICAgY29uc3QgeTEgPSBtW2l5ICsgMV07XG5cbiAgICBBREQ2NEFBKHYsIGEsIGIpOyAvLyB2W2EsYSsxXSArPSB2W2IsYisxXSAuLi4gaW4gSlMgd2UgbXVzdCBzdG9yZSBhIHVpbnQ2NCBhcyB0d28gdWludDMyc1xuICAgIEFERDY0QUModiwgYSwgeDAsIHgxKTsgLy8gdlthLCBhKzFdICs9IHggLi4uIHgwIGlzIHRoZSBsb3cgMzIgYml0cyBvZiB4LCB4MSBpcyB0aGUgaGlnaCAzMiBiaXRzXG5cbiAgICAvLyB2W2QsZCsxXSA9ICh2W2QsZCsxXSB4b3IgdlthLGErMV0pIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IDMyIGJpdHNcbiAgICBsZXQgeG9yMCA9IHZbZF0gXiB2W2FdO1xuICAgIGxldCB4b3IxID0gdltkICsgMV0gXiB2W2EgKyAxXTtcbiAgICB2W2RdID0geG9yMTtcbiAgICB2W2QgKyAxXSA9IHhvcjA7XG5cbiAgICBBREQ2NEFBKHYsIGMsIGQpO1xuXG4gICAgLy8gdltiLGIrMV0gPSAodltiLGIrMV0geG9yIHZbYyxjKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDI0IGJpdHNcbiAgICB4b3IwID0gdltiXSBeIHZbY107XG4gICAgeG9yMSA9IHZbYiArIDFdIF4gdltjICsgMV07XG4gICAgdltiXSA9ICh4b3IwID4+PiAyNCkgXiAoeG9yMSA8PCA4KTtcbiAgICB2W2IgKyAxXSA9ICh4b3IxID4+PiAyNCkgXiAoeG9yMCA8PCA4KTtcblxuICAgIEFERDY0QUEodiwgYSwgYik7XG4gICAgQURENjRBQyh2LCBhLCB5MCwgeTEpO1xuXG4gICAgLy8gdltkLGQrMV0gPSAodltkLGQrMV0geG9yIHZbYSxhKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDE2IGJpdHNcbiAgICB4b3IwID0gdltkXSBeIHZbYV07XG4gICAgeG9yMSA9IHZbZCArIDFdIF4gdlthICsgMV07XG4gICAgdltkXSA9ICh4b3IwID4+PiAxNikgXiAoeG9yMSA8PCAxNik7XG4gICAgdltkICsgMV0gPSAoeG9yMSA+Pj4gMTYpIF4gKHhvcjAgPDwgMTYpO1xuXG4gICAgQURENjRBQSh2LCBjLCBkKTtcblxuICAgIC8vIHZbYixiKzFdID0gKHZbYixiKzFdIHhvciB2W2MsYysxXSkgcm90YXRlZCByaWdodCBieSA2MyBiaXRzXG4gICAgeG9yMCA9IHZbYl0gXiB2W2NdO1xuICAgIHhvcjEgPSB2W2IgKyAxXSBeIHZbYyArIDFdO1xuICAgIHZbYl0gPSAoeG9yMSA+Pj4gMzEpIF4gKHhvcjAgPDwgMSk7XG4gICAgdltiICsgMV0gPSAoeG9yMCA+Pj4gMzEpIF4gKHhvcjEgPDwgMSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3JcbiAgY29uc3QgQkxBS0UyQl9JVjMyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLFxuICAgIDB4NWYxZDM2ZjEsIDB4YTU0ZmY1M2EsIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsXG4gICAgMHhmYjQxYmQ2YiwgMHgxZjgzZDlhYiwgMHgxMzdlMjE3OSwgMHg1YmUwY2QxOSxcbiAgXSk7XG5cbiAgY29uc3QgU0lHTUE4ID0gW1xuICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE0LCAxMCwgNCwgOCwgOSwgMTUsXG4gICAgMTMsIDYsIDEsIDEyLCAwLCAyLCAxMSwgNywgNSwgMywgMTEsIDgsIDEyLCAwLCA1LCAyLCAxNSwgMTMsIDEwLCAxNCwgMywgNixcbiAgICA3LCAxLCA5LCA0LCA3LCA5LCAzLCAxLCAxMywgMTIsIDExLCAxNCwgMiwgNiwgNSwgMTAsIDQsIDAsIDE1LCA4LCA5LCAwLCA1LFxuICAgIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMsIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsXG4gICAgMTMsIDcsIDUsIDE1LCAxNCwgMSwgOSwgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LFxuICAgIDExLCAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLCA2LCAxNSwgMTQsIDksIDExLFxuICAgIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsIDEwLCAyLCA4LCA0LCA3LCA2LCAxLCA1LCAxNSwgMTEsIDksIDE0LFxuICAgIDMsIDEyLCAxMywgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDEwLFxuICAgIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICBdO1xuXG4gIC8vIFRoZXNlIGFyZSBvZmZzZXRzIGludG8gYSB1aW50NjQgYnVmZmVyLlxuICAvLyBNdWx0aXBseSB0aGVtIGFsbCBieSAyIHRvIG1ha2UgdGhlbSBvZmZzZXRzIGludG8gYSB1aW50MzIgYnVmZmVyLFxuICAvLyBiZWNhdXNlIHRoaXMgaXMgSmF2YXNjcmlwdCBhbmQgd2UgZG9uJ3QgaGF2ZSB1aW50NjRzXG4gIGNvbnN0IFNJR01BODIgPSBuZXcgVWludDhBcnJheShcbiAgICBTSUdNQTgubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDI7XG4gICAgfSksXG4gICk7XG5cbiAgLy8gQ29tcHJlc3Npb24gZnVuY3Rpb24uICdsYXN0JyBmbGFnIGluZGljYXRlcyBsYXN0IGJsb2NrLlxuICAvLyBOb3RlIHdlJ3JlIHJlcHJlc2VudGluZyAxNiB1aW50NjRzIGFzIDMyIHVpbnQzMnNcbiAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheSgzMik7XG4gIGNvbnN0IG0gPSBuZXcgVWludDMyQXJyYXkoMzIpO1xuICBmdW5jdGlvbiBibGFrZTJiQ29tcHJlc3MoY3R4LCBsYXN0KSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gaW5pdCB3b3JrIHZhcmlhYmxlc1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB2W2ldID0gY3R4LmhbaV07XG4gICAgICB2W2kgKyAxNl0gPSBCTEFLRTJCX0lWMzJbaV07XG4gICAgfVxuXG4gICAgLy8gbG93IDY0IGJpdHMgb2Ygb2Zmc2V0XG4gICAgdlsyNF0gPSB2WzI0XSBeIGN0eC50O1xuICAgIHZbMjVdID0gdlsyNV0gXiAoY3R4LnQgLyAweDEwMDAwMDAwMCk7XG4gICAgLy8gaGlnaCA2NCBiaXRzIG5vdCBzdXBwb3J0ZWQsIG9mZnNldCBtYXkgbm90IGJlIGhpZ2hlciB0aGFuIDIqKjUzLTFcblxuICAgIC8vIGxhc3QgYmxvY2sgZmxhZyBzZXQgP1xuICAgIGlmIChsYXN0KSB7XG4gICAgICB2WzI4XSA9IH52WzI4XTtcbiAgICAgIHZbMjldID0gfnZbMjldO1xuICAgIH1cblxuICAgIC8vIGdldCBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIG1baV0gPSBCMkJfR0VUMzIoY3R4LmIsIDQgKiBpKTtcbiAgICB9XG5cbiAgICAvLyB0d2VsdmUgcm91bmRzIG9mIG1peGluZ1xuICAgIC8vIHVuY29tbWVudCB0aGUgRGVidWdQcmludCBjYWxscyB0byBsb2cgdGhlIGNvbXB1dGF0aW9uXG4gICAgLy8gYW5kIG1hdGNoIHRoZSBSRkMgc2FtcGxlIGRvY3VtZW50YXRpb25cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgQjJCX0coMCwgOCwgMTYsIDI0LCBTSUdNQTgyW2kgKiAxNiArIDBdLCBTSUdNQTgyW2kgKiAxNiArIDFdKTtcbiAgICAgIEIyQl9HKDIsIDEwLCAxOCwgMjYsIFNJR01BODJbaSAqIDE2ICsgMl0sIFNJR01BODJbaSAqIDE2ICsgM10pO1xuICAgICAgQjJCX0coNCwgMTIsIDIwLCAyOCwgU0lHTUE4MltpICogMTYgKyA0XSwgU0lHTUE4MltpICogMTYgKyA1XSk7XG4gICAgICBCMkJfRyg2LCAxNCwgMjIsIDMwLCBTSUdNQTgyW2kgKiAxNiArIDZdLCBTSUdNQTgyW2kgKiAxNiArIDddKTtcbiAgICAgIEIyQl9HKDAsIDEwLCAyMCwgMzAsIFNJR01BODJbaSAqIDE2ICsgOF0sIFNJR01BODJbaSAqIDE2ICsgOV0pO1xuICAgICAgQjJCX0coMiwgMTIsIDIyLCAyNCwgU0lHTUE4MltpICogMTYgKyAxMF0sIFNJR01BODJbaSAqIDE2ICsgMTFdKTtcbiAgICAgIEIyQl9HKDQsIDE0LCAxNiwgMjYsIFNJR01BODJbaSAqIDE2ICsgMTJdLCBTSUdNQTgyW2kgKiAxNiArIDEzXSk7XG4gICAgICBCMkJfRyg2LCA4LCAxOCwgMjgsIFNJR01BODJbaSAqIDE2ICsgMTRdLCBTSUdNQTgyW2kgKiAxNiArIDE1XSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGN0eC5oW2ldID0gY3R4LmhbaV0gXiB2W2ldIF4gdltpICsgMTZdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldXNhYmxlIHBhcmFtZXRlckJsb2NrXG4gIGNvbnN0IHBhcmFtZXRlckJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICAwOiBvdXRsZW4sIGtleWxlbiwgZmFub3V0LCBkZXB0aFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICA0OiBsZWFmIGxlbmd0aCwgc2VxdWVudGlhbCBtb2RlXG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gIDg6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTI6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTY6IG5vZGUgZGVwdGgsIGlubmVyIGxlbmd0aCwgcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMjA6IHJmdVxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDI0OiByZnVcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAyODogcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMzI6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAzNjogc2FsdFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDQwOiBzYWx0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gNDQ6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA0ODogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1MjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1NjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA2MDogcGVyc29uYWxcbiAgXSk7XG5cbiAgLy8gQ3JlYXRlcyBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0XG4gIC8vIFJlcXVpcmVzIGFuIG91dHB1dCBsZW5ndGggYmV0d2VlbiAxIGFuZCA2NCBieXRlc1xuICAvLyBUYWtlcyBhbiBvcHRpb25hbCBVaW50OEFycmF5IGtleVxuICBmdW5jdGlvbiBibGFrZTJiSW5pdChvdXRsZW4sIGtleSkge1xuICAgIGlmIChvdXRsZW4gPT09IDAgfHwgb3V0bGVuID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NFwiKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0XCIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRlLCAncGFyYW0gYmxvY2snXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYjogbmV3IFVpbnQ4QXJyYXkoMTI4KSxcbiAgICAgIGg6IG5ldyBVaW50MzJBcnJheSgxNiksXG4gICAgICB0OiAwLCAvLyBpbnB1dCBjb3VudFxuICAgICAgYzogMCwgLy8gcG9pbnRlciB3aXRoaW4gYnVmZmVyXG4gICAgICBvdXRsZW46IG91dGxlbiwgLy8gb3V0cHV0IGxlbmd0aCBpbiBieXRlc1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmFtZXRlckJsb2NrIGJlZm9yZSB1c2FnZVxuICAgIHBhcmFtZXRlckJsb2NrLmZpbGwoMCk7XG4gICAgcGFyYW1ldGVyQmxvY2tbMF0gPSBvdXRsZW47XG4gICAgcGFyYW1ldGVyQmxvY2tbMV0gPSBrZXkubGVuZ3RoO1xuICAgIHBhcmFtZXRlckJsb2NrWzJdID0gMTsgLy8gZmFub3V0XG4gICAgcGFyYW1ldGVyQmxvY2tbM10gPSAxOyAvLyBkZXB0aFxuXG4gICAgLy8gaW5pdGlhbGl6ZSBoYXNoIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBjdHguaFtpXSA9IEJMQUtFMkJfSVYzMltpXSBeIEIyQl9HRVQzMihwYXJhbWV0ZXJCbG9jaywgaSAqIDQpO1xuICAgIH1cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMCkge1xuICAgICAgYmxha2UyYlVwZGF0ZShjdHgsIGtleSk7XG4gICAgICAvLyBhdCB0aGUgZW5kXG4gICAgICBjdHguYyA9IDEyODtcbiAgICB9XG5cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmVxdWlyZXMgaGFzaCBjb250ZXh0IGFuZCBVaW50OEFycmF5IChieXRlIGFycmF5KVxuICBmdW5jdGlvbiBibGFrZTJiVXBkYXRlKGN0eCwgaW5wdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3R4LmMgPT09IDEyOCkge1xuICAgICAgICAvLyBidWZmZXIgZnVsbCA/XG4gICAgICAgIGN0eC50ICs9IGN0eC5jOyAvLyBhZGQgY291bnRlcnNcbiAgICAgICAgYmxha2UyYkNvbXByZXNzKGN0eCwgZmFsc2UpOyAvLyBjb21wcmVzcyAobm90IGxhc3QpXG4gICAgICAgIGN0eC5jID0gMDsgLy8gY291bnRlciB0byB6ZXJvXG4gICAgICB9XG4gICAgICBjdHguYltjdHguYysrXSA9IGlucHV0W2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgbWVzc2FnZSBkaWdlc3RcbiAgZnVuY3Rpb24gYmxha2UyYkZpbmFsKGN0eCkge1xuICAgIGN0eC50ICs9IGN0eC5jOyAvLyBtYXJrIGxhc3QgYmxvY2sgb2Zmc2V0XG5cbiAgICB3aGlsZSAoY3R4LmMgPCAxMjgpIHtcbiAgICAgIC8vIGZpbGwgdXAgd2l0aCB6ZXJvc1xuICAgICAgY3R4LmJbY3R4LmMrK10gPSAwO1xuICAgIH1cbiAgICBibGFrZTJiQ29tcHJlc3MoY3R4LCB0cnVlKTsgLy8gZmluYWwgYmxvY2sgZmxhZyA9IDFcblxuICAgIC8vIGxpdHRsZSBlbmRpYW4gY29udmVydCBhbmQgc3RvcmVcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjdHgub3V0bGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5vdXRsZW47IGkrKykge1xuICAgICAgb3V0W2ldID0gY3R4LmhbaSA+PiAyXSA+PiAoOCAqIChpICYgMykpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHJldHVybiB7IEluaXQ6IGJsYWtlMmJJbml0LCBVcGRhdGU6IGJsYWtlMmJVcGRhdGUsIEZpbmFsOiBibGFrZTJiRmluYWwgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl9jcmVhdGUoaGFzaGxlbiwga2V5KSB7XG4gIGtleSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKGtleSk7XG4gIGlmIChrZXkubGVuZ3RoID4gNjQpIHtcbiAgICBrZXkuc3ViYXJyYXkoMCwgNjQpO1xuICB9XG4gIHJldHVybiBibGFrZTJiLkluaXQoaGFzaGxlbiwga2V5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBibGFrZTJiXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBfaGFzaGxlbikge1xuICAvLyBjdHgub3V0bGVuID09PSBoYXNobGVuXG4gIHZhciByID0gYmxha2UyYi5GaW5hbChjdHgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkocik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogYmxha2UyYlxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgaW5wdXQgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpbnB1dCA9IGlucHV0LnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKTtcbiAgYmxha2UyYi5VcGRhdGUoY3R4LCBpbnB1dCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsYWtlMl91cGRhdGVcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWYsIG9mcywgbGVuKSB7XG4gIHZhciBpbnB1dCA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgaW5wdXQgPSBpbnB1dC5zdWJhcnJheShvZnMsIG9mcyArIGxlbik7XG4gIGJsYWtlMmIuVXBkYXRlKGN0eCwgaW5wdXQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmX3N0ciwgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfYmxha2UyX2NyZWF0ZShoYXNobGVuLCBrZXkpO1xuICB2YXIgYnVmID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmX3N0cik7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9maW5hbFxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfYmxha2UyX2J5dGVzKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfY3JlYXRlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZShoYXNobGVuLCBrZXkpIHtcbiAgY29uc3Qga2V5X2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhrZXkpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleV9qc29vX3N0cmluZyk7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWwsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBibGFrZTJfanNfZm9yX3dhc21fZmluYWwoY3R4LCBoYXNobGVuKSB7XG4gIHJldHVybiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfYmxha2UyX2ZpbmFsKGN0eCwgaGFzaGxlbikpO1xufVxuXG4vL1Byb3ZpZGVzOiBibGFrZTJfanNfZm9yX3dhc21fdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl91cGRhdGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWYpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmX2pzb29fc3RyaW5nLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV91cGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZSwgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGJ1Zik7XG4gIHJldHVybiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWZfanNvb19zdHJpbmcsIG9mcywgbGVuKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsIHRvcmVhZCkge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYgKHRvcmVhZCA8IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCwgYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhcbiAgICAgICAgY2hhbmlkLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIDAsXG4gICAgICAgIHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkLFxuICAgICAgKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsIGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHJldHVybiAoeCArIHkpIHwgMDtcbiAgfVxuICBmdW5jdGlvbiB4eChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLFxuICAgICAgYiA9IHdbMV0sXG4gICAgICBjID0gd1syXSxcbiAgICAgIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclswXSwgNywgMHhkNzZhYTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxXSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMl0sIDE3LCAweDI0MjA3MGRiKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzNdLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls0XSwgNywgMHhmNTdjMGZhZik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls1XSwgMTIsIDB4NDc4N2M2MmEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzddLCAyMiwgMHhmZDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls4XSwgNywgMHg2OTgwOThkOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls5XSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhmZmZmNWJiMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NWNkN2JlKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweGZkOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4YTY3OTQzOGUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OWI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA1LCAweGY2MWUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzZdLCA5LCAweGMwNDBiMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1ZTVhNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMF0sIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzVdLCA1LCAweGQ2MmYxMDVkKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweGQ4YTFlNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzRdLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcls5XSwgNSwgMHgyMWUxY2RlNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbM10sIDE0LCAweGY0ZDUwZDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzhdLCAyMCwgMHg0NTVhMTRlZCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4YTllM2U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMl0sIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbN10sIDE0LCAweDY3NmYwMmQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OGQyYTRjOGEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcls1XSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcls4XSwgMTEsIDB4ODc3MWY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweGZkZTUzODBjKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA0LCAweGE0YmVlYTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzRdLCAxMSwgMHg0YmRlY2ZhOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcls3XSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhiZWJmYmM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5YjdlYzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMF0sIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzNdLCAxNiwgMHhkNGVmMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcls2XSwgMjMsIDB4MDQ4ODFkMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbOV0sIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhlNmRiOTllNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFmYTI3Y2Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzJdLCAyMywgMHhjNGFjNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzBdLCA2LCAweGY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzddLCAxMCwgMHg0MzJhZmY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweGFiOTQyM2E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzVdLCAyMSwgMHhmYzkzYTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1YjU5YzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbM10sIDEwLCAweDhmMGNjYzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4ZmZlZmY0N2QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMV0sIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzhdLCA2LCAweDZmYTg3ZTRmKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE1LCAweGEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbNF0sIDYsIDB4Zjc1MzdlODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsyXSwgMTUsIDB4MmFkN2QyYmIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbOV0sIDIxLCAweGViODZkMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH07XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtcbiAgICBsZW46IDAsXG4gICAgdzogbmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSksXG4gICAgYjMyOiBiMzIsXG4gICAgYjg6IGI4LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbikge1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYgKGluX2J1Zikge1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYgKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCwgaW5wdXRfbGVuKSwgaW5fYnVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLCBtaXNzaW5nKSwgaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUgKGlucHV0X2xlbiA+PSA2NCkge1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLCBpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmIChpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsIGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpIHtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZisrO1xuICBpZiAoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IgKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNTY7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspIHtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MWZmZmZmZmY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweGZmO1xuICByZXR1cm4gdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LCBhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19kYXRhdmlld1xudmFyIGpzb29fZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuLy9SZXF1aXJlczoganNvb19kYXRhdmlld1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpIHtcbiAganNvb19kYXRhdmlldy5zZXRGbG9hdDY0KDAsIHgsIHRydWUpO1xuICB2YXIgbG8zMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICB2YXIgaGkzMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDQsIHRydWUpO1xuICB2YXIgbG8gPSBsbzMyICYgMHhmZmZmZmY7XG4gIHZhciBtaSA9IChsbzMyID4+PiAyNCkgfCAoKGhpMzIgPDwgOCkgJiAweGZmZmZmZik7XG4gIHZhciBoaSA9IChoaTMyID4+PiAxNikgJiAweGZmZmY7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCh4KSB7XG4gIGpzb29fZGF0YXZpZXcuc2V0RmxvYXQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHggPiAwID8gXCJpbmZpbml0eVwiIDogXCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSB4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPyAxIDogeCA+PSAwID8gMCA6IDE7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PT0gMCkge1xuICB9IGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSB7XG4gICAgICB4ICo9IDI7XG4gICAgICBleHAtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikge1xuICAgICAgeCAvPSAyO1xuICAgICAgZXhwKys7XG4gICAgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyBcIlwiIDogXCIrXCI7XG4gIHZhciBzaWduX3N0ciA9IFwiXCI7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9IFwiLVwiO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIDQzIC8qICcrJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIitcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyIC8qICcgJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIiBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLCBwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmIChwcmVjID49IDApIHtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHhfc3RyICs9IFwiLlwiICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsIFwiMFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHggKyAxICsgcHJlYztcbiAgICAgIGlmICh4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgXCIwXCIpO1xuICAgICAgZWxzZSB4X3N0ciA9IHhfc3RyLnNsaWNlKDAsIHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXG4gICAgc2lnbl9zdHIgKyBcIjB4XCIgKyB4X3N0ciArIFwicFwiICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoMCwgbG8gfCAobWkgPDwgMjQpLCB0cnVlKTtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoNCwgKG1pID4+PiA4KSB8IChoaSA8PCAxNiksIHRydWUpO1xuICByZXR1cm4ganNvb19kYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCh4LCB5KSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gTnVtYmVyLk5hTjtcbiAgaWYgKHggPT09IHkpIHJldHVybiB5O1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGlmICh5IDwgMCkgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NCk7XG4gICAgZWxzZSByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpO1xuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKHggPCB5ID09PSB4ID4gMCkgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSk7XG4gIGVsc2UgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSk7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2RhdGF2aWV3XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMoeCkge1xuICBqc29vX2RhdGF2aWV3LnNldFVpbnQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpID8gNCA6IDM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB2YXIgbmVnID0gMSAvIHggPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7XG4gICAgICBpID0gLWk7XG4gICAgICBmID0gLWY7XG4gICAgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKE51bWJlci5pc05hTih4KSkgcmV0dXJuIFswLCBOdW1iZXIuTmFOLCBOdW1iZXIuTmFOXTtcbiAgcmV0dXJuIFswLCAxIC8geCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0KHgsIGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7XG4gICAgICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0KHgpIHtcbiAgaWYgKHggPT09IDAgfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLXg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywgTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwgLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLXg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gIGlmICghTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0KHgsIHkpIHtcbiAgaWYgKHkgPT09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4geSA8IDAgPyAteCA6IHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuLy9BbGlhczogY2FtbF9zaWduYml0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4geCA8IDAgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cG0xKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC5wb3coMiwgeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMXAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZzIoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMTAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0KHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4geCAtIHkgPj0gMC41ID8geSArIDEgOiB5O1xuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiB5IC0geCA+PSAwLjUgPyB5IC0gMSA6IHk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguY2JydCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9XG4gICAgMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5KGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSBhaGkgKiBiaGkgLSBwICsgYWhpICogYmxvICsgYWxvICogYmhpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSBhIC0gKHMgLSB2KSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGp1c3QoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4XG4gICAgICA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKVxuICAgICAgOiB4O1xuICB9XG5cbiAgaWYgKHggPT09IDAgfHwgeSA9PT0gMCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiAoTWF0aC5hYnMoeHMgKiB5cykgKiA0KSAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgKCgoTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OKSAvIDQpICogRVBTSUxPTikgLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LCBkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gTnVtYmVyLnBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdChcIitcIilbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLCBlKTtcbiAgICAgICAgeCArPSBjYW1sX3N0cl9yZXBlYXQoZSwgXCIwXCIpO1xuICAgICAgICBpZiAoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyBcIi5cIiArIGNhbWxfc3RyX3JlcGVhdChkcCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH1cbiAgfVxuICB2YXIgcyxcbiAgICBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSBmLnByZWMgPCAwID8gNiA6IGYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IC14O1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkpIHtcbiAgICBzID0gXCJuYW5cIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBzID0gXCJpbmZcIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT09IFwiZVwiKVxuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgLSAxKSArIFwiMFwiICsgcy5zbGljZShpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcHJlYyA9IHByZWMgPyBwcmVjIDogMTtcbiAgICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICAgIHZhciBqID0gcy5pbmRleE9mKFwiZVwiKTtcbiAgICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IGogLSAxO1xuICAgICAgICAgIHdoaWxlIChzLmNoYXJBdChpKSA9PT0gXCIwXCIpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT09IFwiLlwiKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PT0gXCJlXCIpXG4gICAgICAgICAgICBzID0gcy5zbGljZSgwLCBpIC0gMSkgKyBcIjBcIiArIHMuc2xpY2UoaSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgICBpZiAoZXhwIDwgMCkge1xuICAgICAgICAgICAgcCAtPSBleHAgKyAxO1xuICAgICAgICAgICAgcyA9IHgudG9GaXhlZChwKTtcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKCgocyA9IHgudG9GaXhlZChwKSksIHMubGVuZ3RoID4gcHJlYyArIDEpKSBwLS07XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHMuY2hhckF0KGkpID09PSBcIjBcIikgaS0tO1xuICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09PSBcIi5cIikgaS0tO1xuICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHZhciByX2Zsb2F0ID0gL14gKlstK10/KD86XFxkKlxcLj9cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWy0rXT9cXGQrKT8kLztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHJlcyA9ICtzO1xuICAvL0Zhc3QgcGF0aFxuICBpZiAoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLCBcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKVxuICAgIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8kL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmIChtKSB7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCBcIlwiKTtcbiAgICB2YXIgbWFudGlzc2EgPSBOdW1iZXIucGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9ICgrbVs1XSB8fCAwKSAtIDQgKiBtMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkoeCwgeSkge1xuICBpZiAoeS5mdW4pIHtcbiAgICB4LmZ1biA9IHkuZnVuO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgeC5mdW4gPSB5O1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpID0geS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9WZXJzaW9uOiA8IDUuNFxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYoeCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pO1xuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2xhenlcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2xhenkoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlfbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15X2xhenkoZHVtbXksIG5ld3ZhbCkge1xuICBzd2l0Y2ggKGNhbWxfb2JqX3RhZyhuZXd2YWwpKSB7XG4gICAgY2FzZSAyNDY6IC8vIExhenlcbiAgICBjYXNlIDI0NDogLy8gRm9yY2luZ1xuICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkXG4gICAgICBjYW1sX3VwZGF0ZV9kdW1teShkdW1teSwgbmV3dmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkdW1teVsxXSA9IG5ld3ZhbDtcbiAgICAgIGR1bW15WzBdID0gMjUwO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHhbMF0gPT09IHhbMF0gPj4+IDApIHJldHVybiB4WzBdO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKSByZXR1cm4gMjUyO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSkgcmV0dXJuIDI1MjtcbiAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiAyNDc7XG4gIGVsc2UgaWYgKHg/LmNhbWxfY3VzdG9tKSByZXR1cm4gMjU1O1xuICBlbHNlIHJldHVybiAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcoeCwgdGFnKSB7XG4gIHhbMF0gPSB0YWc7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sodGFnLCBzaXplKSB7XG4gIC8vIFRPRE86IGZhaWwgZm9yIHZhbHVlIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBhcyBhbiBhcnJheVxuICB2YXIgbyA9IG5ldyBBcnJheShzaXplICsgMSk7XG4gIG9bMF0gPSB0YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLCB4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIiA/IHggOiB4LnNsaWNlKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUoeCwgcykge1xuICBpZiAocyA8PSAwIHx8IHMgKyAxID4geC5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9PSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkKGIsIHYpIHtcbiAgYlswXSA9IDI1MDtcbiAgYlsxXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LCBpLCBvbGQsIG4pIHtcbiAgaWYgKHhbaSArIDFdID09PSBvbGQpIHtcbiAgICB4W2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZChfeCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQodikge1xuICByZXR1cm4gWzI1MCwgdl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcblxuLy9Qcm92aWRlczogY2FtbF9vb19jYWNoZV9pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tZXRob2RfY2FjaGVcbmZ1bmN0aW9uIGNhbWxfb29fY2FjaGVfaWQoKSB7XG4gIHZhciBjYWNoZWlkID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoO1xuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IDA7XG4gIGNhY2hlaWQ7XG59XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NhY2hlZF9tZXRob2QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG5mdW5jdGlvbiBjYW1sX2dldF9jYWNoZWRfbWV0aG9kKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAobWV0aHNbb2ZzICsgNF0gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgKyAzXTtcbiAgfVxuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSAtIDM7XG4gIHJldHVybiBtZXRoc1tsaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2Qob2JqLCB0YWcpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gdGFnID09PSBtZXRoc1tsaSArIDFdID8gbWV0aHNbbGldIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQoYikge1xuICBiWzJdID0gY2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobywgaSkge1xuICByZXR1cm4gb1tpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobywgaSwgdikge1xuICByZXR1cm4gKG9baSArIDFdID0gdik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKF9vKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KF92LCBfb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLCBvLCBuKSB7XG4gIGlmIChiWzBdID09PSBvKSB7XG4gICAgYlswXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG8pICYmXG4gICAgb1swXSA9PT0gb1swXSA+Pj4gMCAmJlxuICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ0LCAyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDQsIDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiBjYW1sX29ial90YWcobykgPT09IDI1MCA/IG9bMV0gOiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gdCA9PT0gMjQ1ID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2lkZW50aWZpZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2N1c3RvbV9pZGVudGlmaWVyKG8pIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG8uY2FtbF9jdXN0b20gfHwgXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZ2NfcmFtcF91cFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF91cChmKSB7XG4gIHZhciBhID0gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xuICB2YXIgc3VzcGVuZGVkID0gMDtcbiAgcmV0dXJuIFswLCBhLCBzdXNwZW5kZWRdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2djX3JhbXBfZG93blxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF9kb3duKF9zdXNwZW5kZWRfY29sbGVjdGlvbl93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuIiwiLypcblRvIGRlYWwgd2l0aCBlZmZlY3RzLCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMgaW50dWl0aXZlbHkgY29tcG9zZWQgb2ZcbmEgc3RhY2sgb2YgZmliZXJzLiBFYWNoIGZpYmVyIGhhcyBhIGN1cnJlbnQgbG93LWxldmVsIGNvbnRpbnVhdGlvblxuKG9uZS1hcmd1bWVudCBKYXZhU2NyaXB0IGZ1bmN0aW9uKSwgYSBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kXG5hIHRyaXBsZSBvZiBoYW5kbGVycywgd2hpY2ggYXJlIGludm9rZWQgd2hlbiB0aGUgZmliZXIgdGVybWluYXRlc1xuKGVpdGhlciB3aXRoIGEgdmFsdWUgb3IgYW4gZXhjZXB0aW9uKSBvciB3aGVuIGFuIGVmZmVjdCBpcyBwZXJmb3JtZWQuXG5UaGUgbG93LWxldmVsIGNvbnRpbnVhdGlvbiBvZiB0aGUgdG9wbW9zdCBmaWJlciAod2hpY2ggaXMgY3VycmVudGx5XG5leGVjdXRpbmcpIGlzIHBhc3NlZCBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGFzIGFuIGFkZGl0aW9uYWxcbmFyZ3VtZW50LiBJdHMgc3RhY2sgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIGlzIHN0b3JlZCBpblxuW2NhbWxfY3VycmVudF9zdGFjay54XS5cbkV4Y2VwdGlvbiBoYW5kbGVycyBhcmUgcHVzaGVkIGludG8gdGhpcyBzdGFja1xud2hlbiBlbnRlcmluZyBhIFt0cnkgLi4uIHdpdGggLi4uXSBhbmQgcG9wcGVkIG9uIGV4aXQuXG5IYW5kbGVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suaF1cbmFuZCB0aGUgcmVtYWluaW5nIGZpYmVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suZV0uXG5UbyBpbnN0YWxsIGFuIGVmZmVjdCBoYW5kbGVyLCB3ZSBwdXNoIGEgbmV3IGZpYmVyIGludG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LlxuXG5XZSBoYXZlIGJhc2ljYWxseSB0aGUgZm9sbG93aW5nIHR5cGUgZm9yIHJlaWZpZWQgY29udGludWF0aW9ucyAodHlwZVxuW2NvbnRpbnVhdGlvbl0gaW4gbW9kdWxlIFtFZmZlY3RdIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTpcblxuICB0eXBlICgnYSwgJ2IpIGNvbnRpbnVhdGlvbiA9ICgnYSwgJ2IpIHN0YWNrIHJlZlxuXG4gIGFuZCAoXywgXykgc3RhY2sgPVxuICAgICAgQ29ucyA6ICgnYiAtPiB1bml0KSAqICAgICAgICAgICAgICgqIGxvdy1sZXZlbCBjb250aW51YXRpb24gKilcbiAgICAgICAgICAgICAoZXhuIC0+IHVuaXQpIGxpc3QgKiAgICAgICAoKiBleGNlcHRpb24gaGFuZGxlcnMgKilcbiAgICAgICAgICAgICAoJ2IsICdjKSBoYW5kbGVyICpcbiAgICAgICAgICAgICAoJ2EsICdiKSBzdGFja1xuICAgICAgICAgICAgIC0+ICgnYSwgJ2MpIHN0YWNrXG4gICAgfCBFbXB0eSA6ICgnYSwgJ2EpIHN0YWNrXG5cbiAgYW5kICgnYSwnYikgaGFuZGxlciA9ICAgKCogQXMgaW4gbW9kdWxlIEVmZmVjdCBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG4gICAgeyByZXRjOiAnYSAtPiAnYjtcbiAgICAgIGV4bmM6IGV4biAtPiAnYjtcbiAgICAgIGVmZmM6ICdjLidjIEVmZmVjdC50IC0+ICgoJ2MsJ2IpIGNvbnRpbnVhdGlvbiAtPiAnYikgb3B0aW9uIH1cblxuQ29udGludWF0aW9ucyBhcmUgb25lLXNob3QuIEEgY29udGludWF0aW9uIFtyZWYgRW1wdHldIGhhcyBhbHJlYWR5XG5iZWVuIHJlc3VtZWQuXG5cbkEgY29udGludWF0aW9uIGlzIGJhc2ljYWxseSBjb21wb3NlZCBvZiBhIGxpc3Qgb2YgZmliZXJzLCB3aGljaCBlYWNoXG5oYXMgaXRzIGxvdy1sZXZlbCBjb250aW51YXRpb24sIGl0cyBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kIGFcbnRyaXBsZSBvZiBoYW5kbGVycyB0byBkZWFsIHdpdGggd2hlbiB0aGUgZmliZXIgdGVybWluYXRlcyBvciBhblxuZWZmZWN0IGlzIHBlcmZvcm1lZC4gV2hlbiByZXN1bWluZyBhIGNvbnRpbnVhdGlvbiwgdGhlIGlubmVybW9zdCBmaWJlclxuaXMgcmVzdW1lZCBmaXJzdC5cblxuVGhlIGhhbmRsZXJzIGFyZSBDUFMtdHJhbnNmb3JtZWQgZnVuY3Rpb25zOiB0aGV5IGFjdHVhbGx5IHRha2UgYW5cbmFkZGl0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjdXJyZW50IGxvdy1sZXZlbCBjb250aW51YXRpb24uXG4qL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vIFRoaXMgaGFzIHRoZSBzaGFwZSB7aywgeCwgaCwgZX0gd2hlcmVcbi8vIC0gaCBpcyBhIHRyaXBsZSBvZiBoYW5kbGVycyAoc2VlIGVmZmVjdC5tbClcbi8vIC0gayBpcyB0aGUgbG93IGxldmVsIGNvbnRpbnVhdGlvblxuLy8gLSB4IGlzIHRoZSBleGNlcHRpb24gc3RhY2tcbi8vIC0gZSBpcyB0aGUgZmliZXIgc3RhY2sgb2YgdGhlIHBhcmVudCBmaWJlci5cbnZhciBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9wdXNoX3RyYXBcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9zdGFja1xuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9wdXNoX3RyYXAoaGFuZGxlcikge1xuICBjYW1sX2N1cnJlbnRfc3RhY2sueCA9IHsgaDogaGFuZGxlciwgdDogY2FtbF9jdXJyZW50X3N0YWNrLnggfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3BfdHJhcFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X3N0YWNrXG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX3BvcF90cmFwKCkge1xuICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KVxuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgdGhyb3cgeDtcbiAgICB9O1xuICB2YXIgaCA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfdW5oYW5kbGVkXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3VuaGFuZGxlZChlZmYpIHtcbiAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICB0aHJvdyBleG47XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9yZXN1bWVfc3RhY2tcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2VfY29uc3RhbnRcbi8vUmVxdWlyZXM6IGNhbWxfcG9wX2ZpYmVyLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgaykge1xuICBpZiAoIXN0YWNrKVxuICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoXG4gICAgICBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LkNvbnRpbnVhdGlvbl9hbHJlYWR5X3Jlc3VtZWRcIiksXG4gICAgKTtcbiAgaWYgKGxhc3QgPT09IDApIHtcbiAgICBsYXN0ID0gc3RhY2s7XG4gICAgLy8gUHJlIE9DYW1sIDUuMiwgbGFzdCB3YXMgbm90IHBvcHVsYXRlZC5cbiAgICB3aGlsZSAobGFzdC5lICE9PSAwKSBsYXN0ID0gbGFzdC5lO1xuICB9XG4gIGNhbWxfY3VycmVudF9zdGFjay5rID0gaztcbiAgbGFzdC5lID0gY2FtbF9jdXJyZW50X3N0YWNrO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIHN0YWNrLms7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9wX2ZpYmVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3BvcF9maWJlcigpIHtcbiAgLy8gTW92ZSB0byB0aGUgcGFyZW50IGZpYmVyLCByZXR1cm5pbmcgdGhlIHBhcmVudCdzIGxvdy1sZXZlbCBjb250aW51YXRpb25cbiAgdmFyIGMgPSBjYW1sX2N1cnJlbnRfc3RhY2suZTtcbiAgY2FtbF9jdXJyZW50X3N0YWNrLmUgPSAwO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBjO1xuICByZXR1cm4gYy5rO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfZnJlc2hfb29faWRcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKSB7XG4gIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgaWYgKGV4bikgZXhuID0gWzAsIGV4biwgZWZmXTtcbiAgZWxzZSB7XG4gICAgZXhuID0gW1xuICAgICAgMjQ4LFxuICAgICAgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksXG4gICAgICBjYW1sX2ZyZXNoX29vX2lkKDApLFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9wZXJmb3JtX2VmZmVjdChlZmYsIGswKSB7XG4gIGlmIChjYW1sX2N1cnJlbnRfc3RhY2suZSA9PT0gMCkge1xuICAgIHZhciBleG4gPSBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKTtcbiAgICB0aHJvdyBleG47XG4gIH1cbiAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0IGhhbmRsZXJcbiAgdmFyIGhhbmRsZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFszXTtcbiAgdmFyIGxhc3RfZmliZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2s7XG4gIGxhc3RfZmliZXIuayA9IGswO1xuICB2YXIgY29udCA9IFsyNDUgLypjb250aW51YXRpb24qLywgbGFzdF9maWJlciwgbGFzdF9maWJlcl07XG4gIC8vIE1vdmUgdG8gcGFyZW50IGZpYmVyIGFuZCBleGVjdXRlIHRoZSBlZmZlY3QgaGFuZGxlciB0aGVyZVxuICAvLyBUaGUgaGFuZGxlciBpcyBkZWZpbmVkIGluIFN0ZGxpYi5FZmZlY3QsIHNvIHdlIGtub3cgdGhhdCB0aGUgYXJpdHkgbWF0Y2hlc1xuICB2YXIgazEgPSBjYW1sX3BvcF9maWJlcigpO1xuICByZXR1cm4gY2FtbF9zdGFja19jaGVja19kZXB0aCgpXG4gICAgPyBjYW1sX2dldF9jcHNfZnVuKGhhbmRsZXIpKGVmZiwgY29udCwgbGFzdF9maWJlciwgazEpXG4gICAgOiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGhhbmRsZXIsIFtlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVwZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXBlcmZvcm1fZWZmZWN0KGVmZiwgY29udCwgbGFzdCwgazApIHtcbiAgaWYgKGNhbWxfY3VycmVudF9zdGFjay5lID09PSAwKSB7XG4gICAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICAgIHZhciBzdGFjayA9IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KTtcbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgazApO1xuICAgIHRocm93IGV4bjtcbiAgfVxuICAvLyBHZXQgY3VycmVudCBlZmZlY3QgaGFuZGxlclxuICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay5oWzNdO1xuICB2YXIgbGFzdF9maWJlciA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgbGFzdF9maWJlci5rID0gazA7XG4gIGxhc3QuZSA9IGxhc3RfZmliZXI7XG4gIGNvbnRbMl0gPSBsYXN0X2ZpYmVyO1xuICAvLyBNb3ZlIHRvIHBhcmVudCBmaWJlciBhbmQgZXhlY3V0ZSB0aGUgZWZmZWN0IGhhbmRsZXIgdGhlcmVcbiAgLy8gVGhlIGhhbmRsZXIgaXMgZGVmaW5lZCBpbiBTdGRsaWIuRWZmZWN0LCBzbyB3ZSBrbm93IHRoYXQgdGhlIGFyaXR5IG1hdGNoZXNcbiAgdmFyIGsxID0gY2FtbF9wb3BfZmliZXIoKTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9nZXRfY3BzX2Z1bihoYW5kbGVyKShlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxKVxuICAgIDogY2FtbF90cmFtcG9saW5lX3JldHVybihoYW5kbGVyLCBbZWZmLCBjb250LCBsYXN0X2ZpYmVyLCBrMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2dldF9jcHNfZnVuKGYpIHtcbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2Nwc19mdW5cbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfY3BzX2Z1bihmKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGdldCB0aGUgZWZmZWN0IGhhbmRsZXIuIElmIHRoZVxuICAvLyBlZmZlY3QgaGFuZGxlciBoYXMgbm8gQ1BTIGZ1bmN0aW9uLCB3ZSBrbm93IHRoYXQgd2UgY2FuIGRpcmVjdGx5XG4gIC8vIGNhbGwgdGhlIGRpcmVjdCB2ZXJzaW9uIGluc3RlYWQuXG4gIHJldHVybiBmLmNwcyA/IGYuY3BzIDogZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfY2FsbF9nZW4sIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5fY3BzLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2NhbGwoZiwgeCkge1xuICB2YXIgYXJncyA9IFt4LCBjYW1sX3BvcF9maWJlcigpXTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9jYWxsX2dlbl9jcHMoZiwgYXJncylcbiAgICA6IGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZiwgYXJncywgMCk7XG59XG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2h2YWwoeCkge1xuICAvLyBDYWxsIFtodl0gaW4gdGhlIHBhcmVudCBmaWJlclxuICB2YXIgZiA9IGNhbWxfY3VycmVudF9zdGFjay5oWzFdO1xuICByZXR1cm4gY2FtbF9hbGxvY19zdGFja19jYWxsKGYsIHgpO1xufVxuZnVuY3Rpb24gY2FtbF9hbGxvY19zdGFja19oZXhuKGUpIHtcbiAgLy8gQ2FsbCBbaHhdIGluIHRoZSBwYXJlbnQgZmliZXJcbiAgdmFyIGYgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFsyXTtcbiAgcmV0dXJuIGNhbWxfYWxsb2Nfc3RhY2tfY2FsbChmLCBlKTtcbn1cbmZ1bmN0aW9uIGNhbWxfYWxsb2Nfc3RhY2soaHYsIGh4LCBoZikge1xuICB2YXIgaGFuZGxlcnMgPSBbMCwgaHYsIGh4LCBoZl07XG4gIHJldHVybiB7XG4gICAgazogY2FtbF9hbGxvY19zdGFja19odmFsLFxuICAgIHg6IHsgaDogY2FtbF9hbGxvY19zdGFja19oZXhuLCB0OiAwIH0sXG4gICAgaDogaGFuZGxlcnMsXG4gICAgZTogMCxcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9JZjogIWVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrKF9odiwgX2h4LCBfaGYpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KSB7XG4gIHZhciBzdGFjayA9IGNvbnRbMV07XG4gIGNvbnRbMV0gPSAwO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGNcbi8vUmVxdWlyZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGMoXG4gIGNvbnQsXG4gIGh2YWwsXG4gIGhleG4sXG4gIGhlZmYsXG4pIHtcbiAgdmFyIHN0YWNrID0gY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjKGNvbnQpO1xuICBpZiAoc3RhY2sgPT09IDApIHJldHVybiBzdGFjaztcbiAgdmFyIGxhc3QgPSBjb250WzJdO1xuICBsYXN0LmhbMV0gPSBodmFsO1xuICBsYXN0LmhbMl0gPSBoZXhuO1xuICBsYXN0LmhbM10gPSBoZWZmO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NvbnRpbnVhdGlvbl9jYWxsc3RhY2tcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9jb250aW51YXRpb25fY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9uZXdcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIHsgY29uZGl0aW9uOiAxIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3dhaXRcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl93YWl0KF90LCBfbXV0ZXh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3Rcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3QoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbChfdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19lZmZlY3Rfbm90X3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy8hSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBqc29vX2VmZmVjdF9ub3Rfc3VwcG9ydGVkKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiRWZmZWN0IGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3VtZVxuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuX2NwcywgY2FtbF9jdXJyZW50X3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFja1xuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXN1bWUoZiwgYXJnLCBzdGFjaywgbGFzdCkge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgayA9IGNhbWxfcmVzdW1lX3N0YWNrKHN0YWNrLCBsYXN0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLyogTm90ZTogZiBpcyBub3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24gYnV0IGEgKGRpcmVjdC1zdHlsZSwgQ1BTKSBjbG9zdXJlIHBhaXIgKi9cbiAgICB2YXIgcmVzID0geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBbYXJnLCBrXSwgam9vX2RpcmVjdDogMCB9O1xuICAgIGRvIHtcbiAgICAgIC8qIEF2b2lkcyB0cmFtcG9saW5pbmcgdG9vIG9mdGVuIHdoaWxlIHN0aWxsIGF2b2lkaW5nIHN0YWNrIG92ZXJmbG93LiBTZWVcbiAgICAgICAgIFtjYW1sX2NhbGxiYWNrXS4gKi9cbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb29fZGlyZWN0XG4gICAgICAgICAgPyByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncylcbiAgICAgICAgICA6IGNhbWxfY2FsbF9nZW5fY3BzKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgIGpvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldLFxuICAgICAgICAgIGpvb19kaXJlY3Q6IDEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVzPy5qb29fYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Nwc19jbG9zdXJlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfY3BzX2Nsb3N1cmUoZGlyZWN0X2YsIGNwc19mKSB7XG4gIGRpcmVjdF9mLmNwcyA9IGNwc19mO1xuICByZXR1cm4gZGlyZWN0X2Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXNzdW1lX25vX3BlcmZvcm1cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vSWY6ICFkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfYXNzdW1lX25vX3BlcmZvcm0oZikge1xuICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICBhMlswXSA9IDA7XG4gIGZvciAodmFyIGkyID0gMSwgaTEgPSBpICsgMTsgaTIgPD0gbGVuOyBpMisrLCBpMSsrKSB7XG4gICAgYTJbaTJdID0gYVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfc3ViIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfc3ViXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfc3ViKGEsIGksIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9zdWIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9zdWJcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfc3ViKGEsIGksIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9zdWIoYSwgaSwgbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCxcbiAgICBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMSArIGwyIC0gMTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsXG4gICAgaiA9IDE7XG4gIGZvciAoOyBpIDwgbDE7IGkrKykgYVtpXSA9IGExW2ldO1xuICBmb3IgKDsgaSA8IGw7IGkrKywgaisrKSBhW2ldID0gYTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYXBwZW5kIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYXBwZW5kXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9hcHBlbmQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9hcHBlbmRcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICByZXR1cm4gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ibGl0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9BbGlhczogY2FtbF9hcnJheV9zZXRfZmxvYXRcbi8vQWxpYXM6IGNhbWxfZmxvYXRhcnJheV9zZXRcbi8vQWxpYXM6IGNhbWxfYXJyYXlfc2V0X2FkZHJcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0KGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCArIDFdID0gbmV3dmFsO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2FycmF5X2dldF9mbG9hdFxuLy9BbGlhczogY2FtbF9mbG9hdGFycmF5X2dldFxuLy9BbGlhczogY2FtbF9hcnJheV9nZXRfYWRkclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXggKyAxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnJheVtvZnMgKyBpICsgMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZChhcnJheSwgb2ZzLCBsZW4sIHYpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2NoZWNrX2JvdW5kX2dlblxuLy9BbGlhczogY2FtbF9jaGVja19ib3VuZF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X21ha2UgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDQpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfbWFrZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X21ha2UobGVuLCBpbml0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NyZWF0ZV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9hcnJheV9jcmVhdGVfZmxvYXQobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbikge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2UgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2VfdW5ib3hlZCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0YXJyYXlfbWFrZVxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlX3VuYm94ZWQobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2Zsb2F0YXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X21ha2Vcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZShsZW4sIGluaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDVcbnZhciBjYW1sX2RvbWFpbl9kbHMgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfc2V0KGEpIHtcbiAgY2FtbF9kb21haW5fZGxzID0gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldFxuLy9SZXF1aXJlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldChvbGQsIG4pIHtcbiAgaWYgKGNhbWxfZG9tYWluX2RscyAhPT0gb2xkKSByZXR1cm4gMDtcbiAgY2FtbF9kb21haW5fZGxzID0gbjtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfZ2V0KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9kbHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2xvYWRcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9hdG9taWNfbG9hZChyZWYpIHtcbiAgcmV0dXJuIHJlZlsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hdG9taWNfbG9hZF9maWVsZFxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2xvYWRfZmllbGQoYiwgaSkge1xuICByZXR1cm4gYltpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2Nhc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXMocmVmLCBvLCBuKSB7XG4gIGlmIChyZWZbMV0gPT09IG8pIHtcbiAgICByZWZbMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19jYXNfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXNfZmllbGQoYiwgaSwgbywgbikge1xuICBpZiAoYltpICsgMV0gPT09IG8pIHtcbiAgICBiW2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2ZldGNoX2FkZFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGQocmVmLCBpKSB7XG4gIHZhciBvbGQgPSByZWZbMV07XG4gIHJlZlsxXSArPSBpO1xuICByZXR1cm4gb2xkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGQoYiwgaSwgbikge1xuICB2YXIgb2xkID0gYltpICsgMV07XG4gIGJbaSArIDFdICs9IG47XG4gIHJldHVybiBvbGQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2V4Y2hhbmdlKHJlZiwgdikge1xuICB2YXIgciA9IHJlZlsxXTtcbiAgcmVmWzFdID0gdjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlX2ZpZWxkXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9hdG9taWNfZXhjaGFuZ2VfZmllbGQoYiwgaSwgdikge1xuICB2YXIgciA9IGJbaSArIDFdO1xuICBiW2kgKyAxXSA9IHY7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19tYWtlX2NvbnRlbmRlZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX21ha2VfY29udGVuZGVkKGEpIHtcbiAgcmV0dXJuIFswLCBhXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuXG4vL1ZlcnNpb246ID49IDUuMCwgPCA1LjJcbnZhciBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fID0gWzBdO1xuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuKF91bml0KSB7XG4gIHJldHVybiBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudChfdW5pdCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faW5kZXhcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMDNcbmZ1bmN0aW9uIGNhbWxfbWxfZG9tYWluX2luZGV4KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9pZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5faWRcbi8vVmVyc2lvbjogPj0gNVxudmFyIGNhbWxfZG9tYWluX2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4ID0gMTtcbmZ1bmN0aW9uIGNhbWxfZG9tYWluX3NwYXduKGYsIHRlcm1fc3luYykge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbiAgY2FtbF9kb21haW5faWQgPSBvbGQ7XG4gIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHRlcm1fc3luY1syXSk7XG4gIC8vVE9ETzogZml4IGV4biBjYXNlXG4gIHRlcm1fc3luY1sxXSA9IFswLCBbMCwgcmVzXV07XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG52YXIgY2FtbF9kb21haW5fbGF0ZXN0X2lkeCA9IDE7XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9zcGF3bihmLCBtdXRleCkge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIF9yZXMgPSBjYW1sX2NhbGxiYWNrKGYsIFswXSk7XG4gIGNhbWxfZG9tYWluX2lkID0gb2xkO1xuICBjYW1sX21sX211dGV4X3VubG9jayhtdXRleCk7XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faWRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5faWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfZG9tYWluX2lkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fY3B1X3JlbGF4KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX2ludDMyX2Zvcm1hdFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZm9ybWF0XG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT09IFwiJWRcIilcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiICsgaSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgaWYgKGYuc2lnbmVkY29udikge1xuICAgICAgZi5zaWduID0gLTE7XG4gICAgICBpID0gLWk7XG4gICAgfSBlbHNlIGkgPj4+PSAwO1xuICB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0KG4sIFwiMFwiKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Uocykge1xuICB2YXIgaSA9IDAsXG4gICAgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLFxuICAgIGJhc2UgPSAxMCxcbiAgICBzaWduID0gMSxcbiAgICBzaWduZWRuZXNzID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkpIHtcbiAgICAgIGNhc2UgNDU6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgICAgY2FzZSAxMjA6XG4gICAgICBjYXNlIDg4OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTE6XG4gICAgICBjYXNlIDc5OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDk4OlxuICAgICAgY2FzZSA2NjpcbiAgICAgICAgc2lnbmVkbmVzcyA9IDA7XG4gICAgICAgIGJhc2UgPSAyO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTc6XG4gICAgICBjYXNlIDg1OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZSwgc2lnbmVkbmVzc107XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IGNhbWxfaW50MzJfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlKHMpO1xuICB2YXIgaSA9IHJbMF0sXG4gICAgc2lnbiA9IHJbMV0sXG4gICAgYmFzZSA9IHJbMl0sXG4gICAgc2lnbmVkbmVzcyA9IHJbM107XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSBpIDwgbGVuID8gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA6IDA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmIChzaWduZWRuZXNzICYmIChyZXMgfCAwKSAhPT0gcmVzKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfbXVsXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9tdWxcbi8vQWxpYXM6ICVpbnRfbXVsXG5mdW5jdGlvbiBjYW1sX211bChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX2RpdlxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZGl2XG4vL0FsaWFzOiAlaW50X2RpdlxuZnVuY3Rpb24gY2FtbF9kaXYoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4gKHggLyB5KSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX21vZFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfbW9kXG4vL0FsaWFzOiAlaW50X21vZFxuZnVuY3Rpb24gY2FtbF9tb2QoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4geCAlIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNiBjb25zdFxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoeCAmIDB4MDBmZikgPDwgOCkgfCAoKHggJiAweGZmMDApID4+IDgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwIGNvbnN0XG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoXG4gICAgKCh4ICYgMHgwMDAwMDBmZikgPDwgMjQpIHxcbiAgICAoKHggJiAweDAwMDBmZjAwKSA8PCA4KSB8XG4gICAgKCh4ICYgMHgwMGZmMDAwMCkgPj4+IDgpIHxcbiAgICAoKHggJiAweGZmMDAwMDAwKSA+Pj4gMjQpXG4gICk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsIGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTEgfCAwKTtcbiAgZCA9IChkIDw8IDE1KSB8IChkID4+PiAoMzIgLSAxNSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9IChoIDw8IDEzKSB8IChoID4+PiAoMzIgLSAxMykpOyAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpIHwgMCkgKyAoMHhlNjU0NmI2NCB8IDApKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsKGgsIDB4ODVlYmNhNmIgfCAwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsKGgsIDB4YzJiMmFlMzUgfCAwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0KGhhc2gsIHYwKSB7XG4gIHZhciBpNjQgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodjApO1xuICB2YXIgbCA9IGNhbWxfaW50NjRfbG8zMihpNjQpO1xuICB2YXIgaCA9IGNhbWxfaW50NjRfaGkzMihpNjQpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGggJiAweDdmZjAwMDAwKSA9PT0gMHg3ZmYwMDAwMCAmJiAobCB8IChoICYgMHhmZmZmZikpICE9PSAwKSB7XG4gICAgaCA9IDB4N2ZmMDAwMDA7XG4gICAgbCA9IDB4MDAwMDAwMDE7XG4gIH0gZWxzZSBpZiAoaCA9PT0gKDB4ODAwMDAwMDAgfCAwKSAmJiBsID09PSAwKSB7XG4gICAgLyogTm9ybWFsaXplIC0wIGludG8gKzAgKi9cbiAgICAvLyBUaGlzIGNvZGUgcGF0aCBpcyBub3QgdXNlZCBieSBjYW1sX2hhc2ggYmVjYXVzZSAwIGFuZCAtMCBsb29rXG4gICAgLy8gbGlrZSBpbnRlZ2Vyc1xuICAgIGggPSAwO1xuICB9XG4gIGhhc2ggPSBjYW1sX2hhc2hfbWl4X2ludChoYXNoLCBsKTtcbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGgpO1xuICByZXR1cm4gaGFzaDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCxcbiAgICBpLFxuICAgIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9XG4gICAgICBzLmNoYXJDb2RlQXQoaSkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICAgIGNhc2UgMzpcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2O1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgY2FzZSAyOlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgdyB8PSBzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsXG4gICAgaSxcbiAgICB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldIHwgKHNbaSArIDFdIDw8IDgpIHwgKHNbaSArIDJdIDw8IDE2KSB8IChzW2kgKyAzXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgICBjYXNlIDM6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3ID0gc1tpICsgMl0gPDwgMTY7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDI6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3IHw9IHNbaSArIDFdIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHNbaV07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpO1xuICAvKiBBUlJBWSAqLyBlbHNlIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07XG4gIHJkID0gMDtcbiAgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2Py5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYgKFxuICAgICAgICBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiZcbiAgICAgICAgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2hcbiAgICAgICkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGhoKTtcbiAgICAgICAgbnVtLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHZbMF0gPT09ICh2WzBdIHwgMCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgICBjYXNlIDI0ODpcbiAgICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgICAgbnVtLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUwOlxuICAgICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHYpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodiB8IDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdiArIHYgKyAxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCB2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNmZmZmZmZmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdikge1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzZmZmZmZmZjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSkge1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpXG4gICAgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSlcbiAgICByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhWzBdID09PSBhWzBdID4+PiAwICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuIHRhZyA9PT0gMjU0ID8gMCA6IHRhZztcbiAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcilcbiAgICByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYT8uY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhPy5jb21wYXJlKVxuICAgIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpIHtcbiAgcmV0dXJuIChcbiAgICBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmVcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYgKGNvbXApIHtcbiAgICB2YXIgeCA9IHN3YXAgPiAwID8gY29tcChjdXN0b20sIG51bSwgdG90YWwpIDogY29tcChudW0sIGN1c3RvbSwgdG90YWwpO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNOYU4oeCkpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt4KSkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZiAoKHggfCAwKSAhPT0gMCkgcmV0dXJuIHggfCAwOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvciAoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZiAodGFnX2EgPT09IDI1MCkge1xuICAgICAgICBhID0gYVsxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYgKHRhZ19iID09PSAyNTApIHtcbiAgICAgICAgYiA9IGJbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmICh0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYgKHRhZ19hID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19iID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ19iID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19hID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWdfYSA8IHRhZ19iID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgLy8gdGFnX2EgPSB0YWdfYlxuICAgICAgc3dpdGNoICh0YWdfYSkge1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pIHwgMDtcbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYikgfCAwO1xuICAgICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGluIGNhbWxfY29tcGFyZV92YWxfdGFnXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgICAgICAgXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgICBpZiAoY29tcCAhPT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jYW1sX2N1c3RvbSA8IGIuY2FtbF9jdXN0b20gPyAtMSA6IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgICAgdmFyIHggPSBjb21wKGEsIGIsIHRvdGFsKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCA/IC0xIDogeDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09ICh4IHwgMCkpIHtcbiAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHggfCAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLCB0b3RhbCk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSkge1xuICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAtMSA6IHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4ICE9PSAoeCB8IDApKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4IHwgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgICBhID0gK2E7XG4gICAgICAgICAgYiA9ICtiO1xuICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYSkpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYikpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBMYXp5X3RhZyBvciBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfY29tcGFyZVxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZShhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiAxO1xufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA9PT0gMCk7XG59XG5cbi8vIE1heSByYWlzZVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCh4LCB5KSB7XG4gIHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCwgeSwgZmFsc2UpICE9PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA+PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPiAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA8PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPCAwKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4XG4vL1ZlcnNpb246ID49IDUuMVxudmFyIGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4ID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3JlZ2lzdGVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9ldmVudF9pbmRleFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZWdpc3RlcihldmVudF9uYW1lLCBldmVudF90YWcsIGV2ZW50X3R5cGUpIHtcbiAgY2FtbF9jdXN0b21fZXZlbnRfaW5kZXggKz0gMTtcbiAgcmV0dXJuIFswLCBjYW1sX2N1c3RvbV9ldmVudF9pbmRleCwgZXZlbnRfbmFtZSwgZXZlbnRfdHlwZSwgZXZlbnRfdGFnXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlKF9ldmVudCwgX2V2ZW50X2NvbnRlbnQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZXNvbHZlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3Jlc29sdmUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3N0YXJ0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfc3RhcnRcbi8vVmVyc2lvbjogPj0gNS4wLCA8IDUuMlxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcGF1c2Vcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19wYXVzZVxuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19yZXN1bWVcbi8vVmVyc2lvbjogPj01LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3Jlc3VtZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcmVzdW1lXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19yZXN1bWUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3IoX3RhcmdldCkge1xuICByZXR1cm4ge307XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfZnJlZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2ZyZWVfY3Vyc29yKF9jdXJzb3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfcmVhZF9wb2xsXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19yZWFkX3BvbGwoX2N1cnNvciwgX2NhbGxiYWNrcywgX251bSkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoIGNvbnN0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogenN0ZF9kZWNvbXByZXNzXG4vL1ZlcnNpb246ID49IDUuMVxudmFyIHpzdGRfZGVjb21wcmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG4gIHZhciBhYiA9IEFycmF5QnVmZmVyLFxuICAgIHU4ID0gVWludDhBcnJheSxcbiAgICB1MTYgPSBVaW50MTZBcnJheSxcbiAgICBpMTYgPSBJbnQxNkFycmF5LFxuICAgIGkzMiA9IEludDMyQXJyYXk7XG4gIHZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuc2xpY2UpIHJldHVybiB1OC5wcm90b3R5cGUuc2xpY2UuY2FsbCh2LCBzLCBlKTtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKSBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aCkgZSA9IHYubGVuZ3RoO1xuICAgIHZhciBuID0gbmV3IHU4KGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbiAgfTtcbiAgdmFyIGZpbGwgPSBmdW5jdGlvbiAodiwgbiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuZmlsbCkgcmV0dXJuIHU4LnByb3RvdHlwZS5maWxsLmNhbGwodiwgbiwgcywgZSk7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMCkgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpIGUgPSB2Lmxlbmd0aDtcbiAgICBmb3IgKDsgcyA8IGU7ICsrcykgdltzXSA9IG47XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHZhciBjcHcgPSBmdW5jdGlvbiAodiwgdCwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuY29weVdpdGhpbilcbiAgICAgIHJldHVybiB1OC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKHYsIHQsIHMsIGUpO1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKSBlID0gdi5sZW5ndGg7XG4gICAgd2hpbGUgKHMgPCBlKSB7XG4gICAgICB2W3QrK10gPSB2W3MrK107XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICAgKi9cbiAgLy8gZXJyb3IgY29kZXNcbiAgdmFyIGVjID0gW1xuICAgIFwiaW52YWxpZCB6c3RkIGRhdGFcIixcbiAgICBcIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQilcIixcbiAgICBcImludmFsaWQgYmxvY2sgdHlwZVwiLFxuICAgIFwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoXCIsXG4gICAgXCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixcbiAgICBcInVuZXhwZWN0ZWQgRU9GXCIsXG4gIF07XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoIW50KSB0aHJvdyBlO1xuICAgIHJldHVybiBlO1xuICB9O1xuICB2YXIgcmIgPSBmdW5jdGlvbiAoZCwgYiwgbikge1xuICAgIHZhciBpID0gMCxcbiAgICAgIG8gPSAwO1xuICAgIGZvciAoOyBpIDwgbjsgKytpKSBvIHw9IGRbYisrXSA8PCAoaSA8PCAzKTtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgdmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7XG4gIH07XG4gIC8vIHJlYWQgWnN0YW5kYXJkIGZyYW1lIGhlYWRlclxuICB2YXIgcnpmaCA9IGZ1bmN0aW9uIChkYXQsIHcpIHtcbiAgICB2YXIgbjMgPSBkYXRbMF0gfCAoZGF0WzFdIDw8IDgpIHwgKGRhdFsyXSA8PCAxNik7XG4gICAgaWYgKG4zID09PSAweDJmYjUyOCAmJiBkYXRbM10gPT09IDI1Mykge1xuICAgICAgLy8gWnN0YW5kYXJkXG4gICAgICB2YXIgZmxnID0gZGF0WzRdO1xuICAgICAgLy8gICAgc2luZ2xlIHNlZ21lbnQgICAgICAgY2hlY2tzdW0gICAgICAgICAgICAgZGljdCBmbGFnICAgICBmcmFtZSBjb250ZW50IGZsYWdcbiAgICAgIHZhciBzcyA9IChmbGcgPj4gNSkgJiAxLFxuICAgICAgICBjYyA9IChmbGcgPj4gMikgJiAxLFxuICAgICAgICBkZiA9IGZsZyAmIDMsXG4gICAgICAgIGZjZiA9IGZsZyA+PiA2O1xuICAgICAgaWYgKGZsZyAmIDgpIGVycigwKTtcbiAgICAgIC8vIGJ5dGVcbiAgICAgIHZhciBidCA9IDYgLSBzcztcbiAgICAgIC8vIGRpY3QgYnl0ZXNcbiAgICAgIHZhciBkYiA9IGRmID09PSAzID8gNCA6IGRmO1xuICAgICAgLy8gZGljdGlvbmFyeSBpZFxuICAgICAgdmFyIGRpID0gcmIoZGF0LCBidCwgZGIpO1xuICAgICAgYnQgKz0gZGI7XG4gICAgICAvLyBmcmFtZSBzaXplIGJ5dGVzXG4gICAgICB2YXIgZnNiID0gZmNmID8gMSA8PCBmY2YgOiBzcztcbiAgICAgIC8vIGZyYW1lIHNvdXJjZSBzaXplXG4gICAgICB2YXIgZnNzID0gcmIoZGF0LCBidCwgZnNiKSArIChmY2YgPT09IDEgJiYgMjU2KTtcbiAgICAgIC8vIHdpbmRvdyBzaXplXG4gICAgICB2YXIgd3MgPSBmc3M7XG4gICAgICBpZiAoIXNzKSB7XG4gICAgICAgIC8vIHdpbmRvdyBkZXNjcmlwdG9yXG4gICAgICAgIHZhciB3YiA9IDEgPDwgKDEwICsgKGRhdFs1XSA+PiAzKSk7XG4gICAgICAgIHdzID0gd2IgKyAod2IgPj4gMykgKiAoZGF0WzVdICYgNyk7XG4gICAgICB9XG4gICAgICBpZiAod3MgPiAyMTQ1Mzg2NDk2KSBlcnIoMSk7XG4gICAgICB2YXIgYnVmID0gbmV3IHU4KCh3ID09PSAxID8gZnNzIHx8IHdzIDogdyA/IDAgOiB3cykgKyAxMik7XG4gICAgICAoYnVmWzBdID0gMSksIChidWZbNF0gPSA0KSwgKGJ1Zls4XSA9IDgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYjogYnQgKyBmc2IsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGQ6IGRpLFxuICAgICAgICB3OiB3ICYmIHcgIT09IDEgPyB3IDogYnVmLnN1YmFycmF5KDEyKSxcbiAgICAgICAgZTogd3MsXG4gICAgICAgIG86IG5ldyBpMzIoYnVmLmJ1ZmZlciwgMCwgMyksXG4gICAgICAgIHU6IGZzcyxcbiAgICAgICAgYzogY2MsXG4gICAgICAgIG06IE1hdGgubWluKDEzMTA3Miwgd3MpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCgobjMgPj4gNCkgfCAoZGF0WzNdIDw8IDIwKSkgPT09IDB4MTg0ZDJhNSkge1xuICAgICAgLy8gc2tpcHBhYmxlXG4gICAgICByZXR1cm4gYjQoZGF0LCA0KSArIDg7XG4gICAgfVxuICAgIGVycigwKTtcbiAgfTtcbiAgLy8gbW9zdCBzaWduaWZpY2FudCBiaXQgZm9yIG5vbnplcm9cbiAgdmFyIG1zYiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgYml0cyA9IDA7XG4gICAgZm9yICg7IDEgPDwgYml0cyA8PSB2YWw7ICsrYml0cyk7XG4gICAgcmV0dXJuIGJpdHMgLSAxO1xuICB9O1xuICAvLyByZWFkIGZpbml0ZSBzdGF0ZSBlbnRyb3B5XG4gIHZhciByZnNlID0gZnVuY3Rpb24gKGRhdCwgYnQsIG1hbCkge1xuICAgIC8vIHRhYmxlIHBvc1xuICAgIHZhciB0cG9zID0gKGJ0IDw8IDMpICsgNDtcbiAgICAvLyBhY2N1cmFjeSBsb2dcbiAgICB2YXIgYWwgPSAoZGF0W2J0XSAmIDE1KSArIDU7XG4gICAgaWYgKGFsID4gbWFsKSBlcnIoMyk7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzeiA9IDEgPDwgYWw7XG4gICAgLy8gcHJvYmFiaWxpdGllcyBzeW1ib2xzICByZXBlYXQgICBpbmRleCAgIGhpZ2ggdGhyZXNob2xkXG4gICAgdmFyIHByb2JzID0gc3osXG4gICAgICBzeW0gPSAtMSxcbiAgICAgIHJlID0gLTEsXG4gICAgICBpID0gLTEsXG4gICAgICBodCA9IHN6O1xuICAgIC8vIG9wdGltaXphdGlvbjogc2luZ2xlIGFsbG9jYXRpb24gaXMgbXVjaCBmYXN0ZXJcbiAgICB2YXIgYnVmID0gbmV3IGFiKDUxMiArIChzeiA8PCAyKSk7XG4gICAgdmFyIGZyZXEgPSBuZXcgaTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICAvLyBzYW1lIHZpZXcgYXMgZnJlcVxuICAgIHZhciBkc3RhdGUgPSBuZXcgdTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICB2YXIgbnN0YXRlID0gbmV3IHUxNihidWYsIDUxMiwgc3opO1xuICAgIHZhciBiYjEgPSA1MTIgKyAoc3ogPDwgMSk7XG4gICAgdmFyIHN5bXMgPSBuZXcgdTgoYnVmLCBiYjEsIHN6KTtcbiAgICB2YXIgbmJpdHMgPSBuZXcgdTgoYnVmLCBiYjEgKyBzeik7XG4gICAgd2hpbGUgKHN5bSA8IDI1NSAmJiBwcm9icyA+IDApIHtcbiAgICAgIHZhciBiaXRzID0gbXNiKHByb2JzICsgMSk7XG4gICAgICB2YXIgY2J0ID0gdHBvcyA+PiAzO1xuICAgICAgLy8gbWFza1xuICAgICAgdmFyIG1zayA9ICgxIDw8IChiaXRzICsgMSkpIC0gMTtcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICh0cG9zICYgNykpICZcbiAgICAgICAgbXNrO1xuICAgICAgLy8gbWFzayAoMSBmZXdlciBiaXQpXG4gICAgICB2YXIgbXNrMWZiID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgLy8gbWF4IHNtYWxsIHZhbHVlXG4gICAgICB2YXIgbXN2ID0gbXNrIC0gcHJvYnMgLSAxO1xuICAgICAgLy8gc21hbGwgdmFsdWVcbiAgICAgIHZhciBzdmFsID0gdmFsICYgbXNrMWZiO1xuICAgICAgaWYgKHN2YWwgPCBtc3YpICh0cG9zICs9IGJpdHMpLCAodmFsID0gc3ZhbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHBvcyArPSBiaXRzICsgMTtcbiAgICAgICAgaWYgKHZhbCA+IG1zazFmYikgdmFsIC09IG1zdjtcbiAgICAgIH1cbiAgICAgIGZyZXFbKytzeW1dID0gLS12YWw7XG4gICAgICBpZiAodmFsID09PSAtMSkge1xuICAgICAgICBwcm9icyArPSB2YWw7XG4gICAgICAgIHN5bXNbLS1odF0gPSBzeW07XG4gICAgICB9IGVsc2UgcHJvYnMgLT0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIHJlcGVhdCBieXRlXG4gICAgICAgICAgdmFyIHJidCA9IHRwb3MgPj4gMztcbiAgICAgICAgICByZSA9ICgoZGF0W3JidF0gfCAoZGF0W3JidCArIDFdIDw8IDgpKSA+PiAodHBvcyAmIDcpKSAmIDM7XG4gICAgICAgICAgdHBvcyArPSAyO1xuICAgICAgICAgIHN5bSArPSByZTtcbiAgICAgICAgfSB3aGlsZSAocmUgPT09IDMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3ltID4gMjU1IHx8IHByb2JzKSBlcnIoMCk7XG4gICAgdmFyIHN5bXBvcyA9IDA7XG4gICAgLy8gc3ltIHN0ZXAgKGNvcHJpbWUgd2l0aCBzeiAtIGZvcm11bGEgZnJvbSB6c3RkIHNvdXJjZSlcbiAgICB2YXIgc3N0ZXAgPSAoc3ogPj4gMSkgKyAoc3ogPj4gMykgKyAzO1xuICAgIC8vIHN5bSBtYXNrXG4gICAgdmFyIHNtYXNrID0gc3ogLSAxO1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDw9IHN5bTsgKytzKSB7XG4gICAgICB2YXIgc2YgPSBmcmVxW3NdO1xuICAgICAgaWYgKHNmIDwgMSkge1xuICAgICAgICBkc3RhdGVbc10gPSAtc2Y7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIHR3byBsb29wcyBpbiB6c3RkIHRvIGF2b2lkIGJyYW5jaGluZywgYnV0IGFzIEpTIGlzIGhpZ2hlci1sZXZlbCB0aGF0IGlzIHVubmVjZXNzYXJ5XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2Y7ICsraSkge1xuICAgICAgICBzeW1zW3N5bXBvc10gPSBzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgc3ltcG9zID0gKHN5bXBvcyArIHNzdGVwKSAmIHNtYXNrO1xuICAgICAgICB9IHdoaWxlIChzeW1wb3MgPj0gaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBzcHJlYWRpbmcgc3ltYm9scywgc2hvdWxkIGJlIHplcm8gYWdhaW5cbiAgICBpZiAoc3ltcG9zKSBlcnIoMCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN6OyArK2kpIHtcbiAgICAgIC8vIG5leHQgc3RhdGVcbiAgICAgIHZhciBucyA9IGRzdGF0ZVtzeW1zW2ldXSsrO1xuICAgICAgLy8gbnVtIGJpdHNcbiAgICAgIHZhciBuYiA9IChuYml0c1tpXSA9IGFsIC0gbXNiKG5zKSk7XG4gICAgICBuc3RhdGVbaV0gPSAobnMgPDwgbmIpIC0gc3o7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAodHBvcyArIDcpID4+IDMsXG4gICAgICB7XG4gICAgICAgIGI6IGFsLFxuICAgICAgICBzOiBzeW1zLFxuICAgICAgICBuOiBuYml0cyxcbiAgICAgICAgdDogbnN0YXRlLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICAvLyByZWFkIGh1ZmZtYW5cbiAgdmFyIHJodSA9IGZ1bmN0aW9uIChkYXQsIGJ0KSB7XG4gICAgLy8gIGluZGV4ICB3ZWlnaHQgY291bnRcbiAgICB2YXIgaSA9IDAsXG4gICAgICB3YyA9IC0xO1xuICAgIC8vICAgIGJ1ZmZlciAgICAgICAgICAgICBoZWFkZXIgYnl0ZVxuICAgIHZhciBidWYgPSBuZXcgdTgoMjkyKSxcbiAgICAgIGhiID0gZGF0W2J0XTtcbiAgICAvLyBodWZmbWFuIHdlaWdodHNcbiAgICB2YXIgaHcgPSBidWYuc3ViYXJyYXkoMCwgMjU2KTtcbiAgICAvLyByYW5rIGNvdW50XG4gICAgdmFyIHJjID0gYnVmLnN1YmFycmF5KDI1NiwgMjY4KTtcbiAgICAvLyByYW5rIGluZGV4XG4gICAgdmFyIHJpID0gbmV3IHUxNihidWYuYnVmZmVyLCAyNjgpO1xuICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgYnQgaXMgMSBsZXNzIHRoYW4gZXhwZWN0ZWRcbiAgICBpZiAoaGIgPCAxMjgpIHtcbiAgICAgIC8vIGVuZCBieXRlLCBmc2UgZGVjb2RlIHRhYmxlXG4gICAgICB2YXIgX2EgPSByZnNlKGRhdCwgYnQgKyAxLCA2KSxcbiAgICAgICAgZWJ0ID0gX2FbMF0sXG4gICAgICAgIGZkdCA9IF9hWzFdO1xuICAgICAgYnQgKz0gaGI7XG4gICAgICB2YXIgZXBvcyA9IGVidCA8PCAzO1xuICAgICAgLy8gbGFzdCBieXRlXG4gICAgICB2YXIgbGIgPSBkYXRbYnRdO1xuICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgLy8gIHN0YXRlMSAgIHN0YXRlMiAgIHN0YXRlMSBiaXRzICAgc3RhdGUyIGJpdHNcbiAgICAgIHZhciBzdDEgPSAwLFxuICAgICAgICBzdDIgPSAwLFxuICAgICAgICBidHIxID0gZmR0LmIsXG4gICAgICAgIGJ0cjIgPSBidHIxO1xuICAgICAgLy8gZnNlIHBvc1xuICAgICAgLy8gcHJlLWluY3JlbWVudCB0byBhY2NvdW50IGZvciBvcmlnaW5hbCBkZWZpY2l0IG9mIDFcbiAgICAgIHZhciBmcG9zID0gKCsrYnQgPDwgMykgLSA4ICsgbXNiKGxiKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgZnBvcyAtPSBidHIxO1xuICAgICAgICBpZiAoZnBvcyA8IGVwb3MpIGJyZWFrO1xuICAgICAgICB2YXIgY2J0ID0gZnBvcyA+PiAzO1xuICAgICAgICBzdDEgKz1cbiAgICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKGZwb3MgJiA3KSkgJiAoKDEgPDwgYnRyMSkgLSAxKTtcbiAgICAgICAgaHdbKyt3Y10gPSBmZHQuc1tzdDFdO1xuICAgICAgICBmcG9zIC09IGJ0cjI7XG4gICAgICAgIGlmIChmcG9zIDwgZXBvcykgYnJlYWs7XG4gICAgICAgIGNidCA9IGZwb3MgPj4gMztcbiAgICAgICAgc3QyICs9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChmcG9zICYgNykpICYgKCgxIDw8IGJ0cjIpIC0gMSk7XG4gICAgICAgIGh3Wysrd2NdID0gZmR0LnNbc3QyXTtcbiAgICAgICAgYnRyMSA9IGZkdC5uW3N0MV07XG4gICAgICAgIHN0MSA9IGZkdC50W3N0MV07XG4gICAgICAgIGJ0cjIgPSBmZHQubltzdDJdO1xuICAgICAgICBzdDIgPSBmZHQudFtzdDJdO1xuICAgICAgfVxuICAgICAgaWYgKCsrd2MgPiAyNTUpIGVycigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2MgPSBoYiAtIDEyNztcbiAgICAgIGZvciAoOyBpIDwgd2M7IGkgKz0gMikge1xuICAgICAgICB2YXIgYnl0ZSA9IGRhdFsrK2J0XTtcbiAgICAgICAgaHdbaV0gPSBieXRlID4+IDQ7XG4gICAgICAgIGh3W2kgKyAxXSA9IGJ5dGUgJiAxNTtcbiAgICAgIH1cbiAgICAgICsrYnQ7XG4gICAgfVxuICAgIC8vIHdlaWdodCBleHBvbmVudGlhbCBzdW1cbiAgICB2YXIgd2VzID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIHd0ID0gaHdbaV07XG4gICAgICAvLyBiaXRzIG11c3QgYmUgYXQgbW9zdCAxMSwgc2FtZSBhcyB3ZWlnaHRcbiAgICAgIGlmICh3dCA+IDExKSBlcnIoMCk7XG4gICAgICB3ZXMgKz0gd3QgJiYgMSA8PCAod3QgLSAxKTtcbiAgICB9XG4gICAgLy8gbWF4IGJpdHNcbiAgICB2YXIgbWIgPSBtc2Iod2VzKSArIDE7XG4gICAgLy8gdGFibGUgc2l6ZVxuICAgIHZhciB0cyA9IDEgPDwgbWI7XG4gICAgLy8gcmVtYWluaW5nIHN1bVxuICAgIHZhciByZW0gPSB0cyAtIHdlcztcbiAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBpZiAocmVtICYgKHJlbSAtIDEpKSBlcnIoMCk7XG4gICAgaHdbd2MrK10gPSBtc2IocmVtKSArIDE7XG4gICAgZm9yIChpID0gMDsgaSA8IHdjOyArK2kpIHtcbiAgICAgIHZhciB3dCA9IGh3W2ldO1xuICAgICAgKytyY1soaHdbaV0gPSB3dCAmJiBtYiArIDEgLSB3dCldO1xuICAgIH1cbiAgICAvLyBodWYgYnVmXG4gICAgdmFyIGhidWYgPSBuZXcgdTgodHMgPDwgMSk7XG4gICAgLy8gICAgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICBudW0gYml0c1xuICAgIHZhciBzeW1zID0gaGJ1Zi5zdWJhcnJheSgwLCB0cyksXG4gICAgICBuYiA9IGhidWYuc3ViYXJyYXkodHMpO1xuICAgIHJpW21iXSA9IDA7XG4gICAgZm9yIChpID0gbWI7IGkgPiAwOyAtLWkpIHtcbiAgICAgIHZhciBwdiA9IHJpW2ldO1xuICAgICAgZmlsbChuYiwgaSwgcHYsIChyaVtpIC0gMV0gPSBwdiArIHJjW2ldICogKDEgPDwgKG1iIC0gaSkpKSk7XG4gICAgfVxuICAgIGlmIChyaVswXSAhPT0gdHMpIGVycigwKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIGJpdHMgPSBod1tpXTtcbiAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgIHZhciBjb2RlID0gcmlbYml0c107XG4gICAgICAgIGZpbGwoc3ltcywgaSwgY29kZSwgKHJpW2JpdHNdID0gY29kZSArICgxIDw8IChtYiAtIGJpdHMpKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgYnQsXG4gICAgICB7XG4gICAgICAgIG46IG5iLFxuICAgICAgICBiOiBtYixcbiAgICAgICAgczogc3ltcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgLy8gVGFibGVzIGdlbmVyYXRlZCB1c2luZyB0aGlzOlxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovYTk3OTQ1MmQ0MzU1OTkyY2JmOGYyNTdjYmZmYzllZGRcbiAgLy8gZGVmYXVsdCBsaXRlcmFsIGxlbmd0aCB0YWJsZVxuICB2YXIgZGxsdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICA4MSwgMTYsIDk5LCAxNDAsIDQ5LCAxOTgsIDI0LCA5OSwgMTIsIDMzLCAxOTYsIDI0LCA5OSwgMTAyLCAxMDIsIDEzNCwgNzAsXG4gICAgICAxNDYsIDQsXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG1hdGNoIGxlbmd0aCB0YWJsZVxuICB2YXIgZG1sdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICAzMywgMjAsIDE5NiwgMjQsIDk5LCAxNDAsIDMzLCAxMzIsIDE2LCA2NiwgOCwgMzMsIDEzMiwgMTYsIDY2LCA4LCAzMywgNjgsXG4gICAgICA2OCwgNjgsIDY4LCA2OCwgNjgsIDY4LCA2OCwgMzYsIDksXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG9mZnNldCBjb2RlIHRhYmxlXG4gIHZhciBkb2N0ID0gLyojX19QVVJFX18gKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbMzIsIDEzMiwgMTYsIDY2LCAxMDIsIDcwLCA2OCwgNjgsIDY4LCA2OCwgMzYsIDczLCAyXSksXG4gICAgMCxcbiAgICA1LFxuICApWzFdO1xuICAvLyBiaXRzIHRvIGJhc2VsaW5lXG4gIHZhciBiMmJsID0gZnVuY3Rpb24gKGIsIHMpIHtcbiAgICB2YXIgbGVuID0gYi5sZW5ndGgsXG4gICAgICBibCA9IG5ldyBpMzIobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBibFtpXSA9IHM7XG4gICAgICBzICs9IDEgPDwgYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJsO1xuICB9O1xuICAvLyBsaXRlcmFsIGxlbmd0aCBiaXRzXG4gIHZhciBsbGIgPSAvKiNfX1BVUkVfXyAqLyBuZXcgdTgoXG4gICAgLyojX19QVVJFX18gKi8gbmV3IGkzMihbXG4gICAgICAwLCAwLCAwLCAwLCAxNjg0MzAwOSwgNTA1Mjg3NzAsIDEzNDY3ODAyMCwgMjAyMDUwMDU3LCAyNjk0MjIwOTMsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgMzYsXG4gICk7XG4gIC8vIGxpdGVyYWwgbGVuZ3RoIGJhc2VsaW5lXG4gIHZhciBsbGJsID0gLyojX19QVVJFX18gKi8gYjJibChsbGIsIDApO1xuICAvLyBtYXRjaCBsZW5ndGggYml0c1xuICB2YXIgbWxiID0gLyojX19QVVJFX18gKi8gbmV3IHU4KFxuICAgIC8qI19fUFVSRV9fICovIG5ldyBpMzIoW1xuICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NDMwMDksIDUwNTI4NzcwLCAxMTc3NjkyMjAsIDE4NTIwNzA0OCxcbiAgICAgIDI1MjU3OTA4NCwgMTYsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgNTMsXG4gICk7XG4gIC8vIG1hdGNoIGxlbmd0aCBiYXNlbGluZVxuICB2YXIgbWxibCA9IC8qI19fUFVSRV9fICovIGIyYmwobWxiLCAzKTtcbiAgLy8gZGVjb2RlIGh1ZmZtYW4gc3RyZWFtXG4gIHZhciBkaHUgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGxlbiA9IGRhdC5sZW5ndGgsXG4gICAgICBzcyA9IG91dC5sZW5ndGgsXG4gICAgICBsYiA9IGRhdFtsZW4gLSAxXSxcbiAgICAgIG1zayA9ICgxIDw8IGh1LmIpIC0gMSxcbiAgICAgIGViID0gLWh1LmI7XG4gICAgaWYgKCFsYikgZXJyKDApO1xuICAgIHZhciBzdCA9IDAsXG4gICAgICBidHIgPSBodS5iLFxuICAgICAgcG9zID0gKGxlbiA8PCAzKSAtIDggKyBtc2IobGIpIC0gYnRyLFxuICAgICAgaSA9IC0xO1xuICAgIHdoaWxlIChwb3MgPiBlYiAmJiBpIDwgc3MpIHtcbiAgICAgIHZhciBjYnQgPSBwb3MgPj4gMztcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpIHwgKGRhdFtjYnQgKyAyXSA8PCAxNikpID4+IChwb3MgJiA3KTtcbiAgICAgIHN0ID0gKChzdCA8PCBidHIpIHwgdmFsKSAmIG1zaztcbiAgICAgIG91dFsrK2ldID0gaHUuc1tzdF07XG4gICAgICBwb3MgLT0gYnRyID0gaHUubltzdF07XG4gICAgfVxuICAgIGlmIChwb3MgIT09IGViIHx8IGkgKyAxICE9PSBzcykgZXJyKDApO1xuICB9O1xuICAvLyBkZWNvZGUgaHVmZm1hbiBzdHJlYW0gNHhcbiAgLy8gVE9ETzogdXNlIHdvcmtlcnMgdG8gcGFyYWxsZWxpemVcbiAgdmFyIGRodTQgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGJ0ID0gNjtcbiAgICB2YXIgc3MgPSBvdXQubGVuZ3RoLFxuICAgICAgc3oxID0gKHNzICsgMykgPj4gMixcbiAgICAgIHN6MiA9IHN6MSA8PCAxLFxuICAgICAgc3ozID0gc3oxICsgc3oyO1xuICAgIGRodShcbiAgICAgIGRhdC5zdWJhcnJheShidCwgKGJ0ICs9IGRhdFswXSB8IChkYXRbMV0gPDwgOCkpKSxcbiAgICAgIG91dC5zdWJhcnJheSgwLCBzejEpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbMl0gfCAoZGF0WzNdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oxLCBzejIpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbNF0gfCAoZGF0WzVdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oyLCBzejMpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoZGF0LnN1YmFycmF5KGJ0KSwgb3V0LnN1YmFycmF5KHN6MyksIGh1KTtcbiAgfTtcbiAgLy8gcmVhZCBac3RhbmRhcmQgYmxvY2tcbiAgdmFyIHJ6YiA9IGZ1bmN0aW9uIChkYXQsIHN0LCBvdXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJ0ID0gc3QuYjtcbiAgICAvLyAgICBieXRlIDAgICAgICAgIGJsb2NrIHR5cGVcbiAgICB2YXIgYjAgPSBkYXRbYnRdLFxuICAgICAgYnR5cGUgPSAoYjAgPj4gMSkgJiAzO1xuICAgIHN0LmwgPSBiMCAmIDE7XG4gICAgdmFyIHN6ID0gKGIwID4+IDMpIHwgKGRhdFtidCArIDFdIDw8IDUpIHwgKGRhdFtidCArIDJdIDw8IDEzKTtcbiAgICAvLyBlbmQgYnl0ZSBmb3IgYmxvY2tcbiAgICB2YXIgZWJ0ID0gKGJ0ICs9IDMpICsgc3o7XG4gICAgaWYgKGJ0eXBlID09PSAxKSB7XG4gICAgICBpZiAoYnQgPj0gZGF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3QuYiA9IGJ0ICsgMTtcbiAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgZmlsbChvdXQsIGRhdFtidF0sIHN0LnksIChzdC55ICs9IHN6KSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsbChuZXcgdTgoc3opLCBkYXRbYnRdKTtcbiAgICB9XG4gICAgaWYgKGVidCA+IGRhdC5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoYnR5cGUgPT09IDApIHtcbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICBpZiAob3V0KSB7XG4gICAgICAgIG91dC5zZXQoZGF0LnN1YmFycmF5KGJ0LCBlYnQpLCBzdC55KTtcbiAgICAgICAgc3QueSArPSBzejtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGMoZGF0LCBidCwgZWJ0KTtcbiAgICB9XG4gICAgaWYgKGJ0eXBlID09PSAyKSB7XG4gICAgICAvLyAgICBieXRlIDMgICAgICAgIGxpdCBidHlwZSAgICAgc2l6ZSBmb3JtYXRcbiAgICAgIHZhciBiMyA9IGRhdFtidF0sXG4gICAgICAgIGxidCA9IGIzICYgMyxcbiAgICAgICAgc2YgPSAoYjMgPj4gMikgJiAzO1xuICAgICAgLy8gbGl0IHNyYyBzaXplICBsaXQgY21wIHN6IDQgc3RyZWFtc1xuICAgICAgdmFyIGxzcyA9IGIzID4+IDQsXG4gICAgICAgIGxjcyA9IDAsXG4gICAgICAgIHM0ID0gMDtcbiAgICAgIGlmIChsYnQgPCAyKSB7XG4gICAgICAgIGlmIChzZiAmIDEpIGxzcyB8PSAoZGF0WysrYnRdIDw8IDQpIHwgKHNmICYgMiAmJiBkYXRbKytidF0gPDwgMTIpO1xuICAgICAgICBlbHNlIGxzcyA9IGIzID4+IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHNmO1xuICAgICAgICBpZiAoc2YgPCAyKVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSAmIDYzKSA8PCA0KSxcbiAgICAgICAgICAgIChsY3MgPSAoZGF0W2J0XSA+PiA2KSB8IChkYXRbKytidF0gPDwgMikpO1xuICAgICAgICBlbHNlIGlmIChzZiA9PT0gMilcbiAgICAgICAgICAobHNzIHw9IChkYXRbKytidF0gPDwgNCkgfCAoKGRhdFsrK2J0XSAmIDMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gMikgfCAoZGF0WysrYnRdIDw8IDYpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSA8PCA0KSB8ICgoZGF0WysrYnRdICYgNjMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gNikgfCAoZGF0WysrYnRdIDw8IDIpIHwgKGRhdFsrK2J0XSA8PCAxMCkpO1xuICAgICAgfVxuICAgICAgKytidDtcbiAgICAgIC8vIGFkZCBsaXRlcmFscyB0byBlbmQgLSBjYW4gbmV2ZXIgb3ZlcmxhcCB3aXRoIGJhY2tyZWZlcmVuY2VzIGJlY2F1c2UgdW51c2VkIGxpdGVyYWxzIGFsd2F5cyBhcHBlbmRlZFxuICAgICAgdmFyIGJ1ZiA9IG91dCA/IG91dC5zdWJhcnJheShzdC55LCBzdC55ICsgc3QubSkgOiBuZXcgdTgoc3QubSk7XG4gICAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgbGl0ZXJhbHNcbiAgICAgIHZhciBzcGwgPSBidWYubGVuZ3RoIC0gbHNzO1xuICAgICAgaWYgKGxidCA9PT0gMCkgYnVmLnNldChkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsc3MpKSwgc3BsKTtcbiAgICAgIGVsc2UgaWYgKGxidCA9PT0gMSkgZmlsbChidWYsIGRhdFtidCsrXSwgc3BsKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBodWZmbWFuIHRhYmxlXG4gICAgICAgIHZhciBodSA9IHN0Lmg7XG4gICAgICAgIGlmIChsYnQgPT09IDIpIHtcbiAgICAgICAgICB2YXIgaHVkID0gcmh1KGRhdCwgYnQpO1xuICAgICAgICAgIC8vIHN1YnRyYWN0IGRlc2NyaXB0aW9uIGxlbmd0aFxuICAgICAgICAgIGxjcyArPSBidCAtIChidCA9IGh1ZFswXSk7XG4gICAgICAgICAgc3QuaCA9IGh1ID0gaHVkWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCFodSkgZXJyKDApO1xuICAgICAgICAoczQgPyBkaHU0IDogZGh1KShkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsY3MpKSwgYnVmLnN1YmFycmF5KHNwbCksIGh1KTtcbiAgICAgIH1cbiAgICAgIC8vIG51bSBzZXF1ZW5jZXNcbiAgICAgIHZhciBucyA9IGRhdFtidCsrXTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBpZiAobnMgPT09IDI1NSkgbnMgPSAoZGF0W2J0KytdIHwgKGRhdFtidCsrXSA8PCA4KSkgKyAweDdmMDA7XG4gICAgICAgIGVsc2UgaWYgKG5zID4gMTI3KSBucyA9ICgobnMgLSAxMjgpIDw8IDgpIHwgZGF0W2J0KytdO1xuICAgICAgICAvLyBzeW1ib2wgY29tcHJlc3Npb24gbW9kZXNcbiAgICAgICAgdmFyIHNjbSA9IGRhdFtidCsrXTtcbiAgICAgICAgaWYgKHNjbSAmIDMpIGVycigwKTtcbiAgICAgICAgdmFyIGR0cyA9IFtkbWx0LCBkb2N0LCBkbGx0XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPiAtMTsgLS1pKSB7XG4gICAgICAgICAgdmFyIG1kID0gKHNjbSA+PiAoKGkgPDwgMSkgKyAyKSkgJiAzO1xuICAgICAgICAgIGlmIChtZCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmxlIGJ1ZlxuICAgICAgICAgICAgdmFyIHJidWYgPSBuZXcgdTgoWzAsIDAsIGRhdFtidCsrXV0pO1xuICAgICAgICAgICAgZHRzW2ldID0ge1xuICAgICAgICAgICAgICBzOiByYnVmLnN1YmFycmF5KDIsIDMpLFxuICAgICAgICAgICAgICBuOiByYnVmLnN1YmFycmF5KDAsIDEpLFxuICAgICAgICAgICAgICB0OiBuZXcgdTE2KHJidWYuYnVmZmVyLCAwLCAxKSxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMikge1xuICAgICAgICAgICAgLy8gYWNjdXJhY3kgbG9nIDggZm9yIG9mZnNldHMsIDkgZm9yIG90aGVyc1xuICAgICAgICAgICAgKF9hID0gcmZzZShkYXQsIGJ0LCA5IC0gKGkgJiAxKSkpLCAoYnQgPSBfYVswXSksIChkdHNbaV0gPSBfYVsxXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKCFzdC50KSBlcnIoMCk7XG4gICAgICAgICAgICBkdHNbaV0gPSBzdC50W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX2IgPSAoc3QudCA9IGR0cyksXG4gICAgICAgICAgbWx0ID0gX2JbMF0sXG4gICAgICAgICAgb2N0ID0gX2JbMV0sXG4gICAgICAgICAgbGx0ID0gX2JbMl07XG4gICAgICAgIHZhciBsYiA9IGRhdFtlYnQgLSAxXTtcbiAgICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgICB2YXIgc3BvcyA9IChlYnQgPDwgMykgLSA4ICsgbXNiKGxiKSAtIGxsdC5iLFxuICAgICAgICAgIGNidCA9IHNwb3MgPj4gMyxcbiAgICAgICAgICBvdWJ0ID0gMDtcbiAgICAgICAgdmFyIGxzdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IGxsdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBvY3QuYikgPj4gMztcbiAgICAgICAgdmFyIG9zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG9jdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbHQuYikgPj4gMztcbiAgICAgICAgdmFyIG1zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG1sdC5iKSAtIDEpO1xuICAgICAgICBmb3IgKCsrbnM7IC0tbnM7ICkge1xuICAgICAgICAgIHZhciBsbGMgPSBsbHQuc1tsc3RdO1xuICAgICAgICAgIHZhciBsYnRyID0gbGx0Lm5bbHN0XTtcbiAgICAgICAgICB2YXIgbWxjID0gbWx0LnNbbXN0XTtcbiAgICAgICAgICB2YXIgbWJ0ciA9IG1sdC5uW21zdF07XG4gICAgICAgICAgdmFyIG9mYyA9IG9jdC5zW29zdF07XG4gICAgICAgICAgdmFyIG9idHIgPSBvY3Qubltvc3RdO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IG9mYykgPj4gMztcbiAgICAgICAgICB2YXIgb2ZwID0gMSA8PCBvZmM7XG4gICAgICAgICAgdmFyIG9mZiA9XG4gICAgICAgICAgICBvZnAgK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICAgKGRhdFtjYnQgKyAyXSA8PCAxNikgfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDNdIDw8IDI0KSkgPj4+XG4gICAgICAgICAgICAgIChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKG9mcCAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbGJbbWxjXSkgPj4gMztcbiAgICAgICAgICB2YXIgbWwgPVxuICAgICAgICAgICAgbWxibFttbGNdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICAgICAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBtbGJbbWxjXSkgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gbGxiW2xsY10pID4+IDM7XG4gICAgICAgICAgdmFyIGxsID1cbiAgICAgICAgICAgIGxsYmxbbGxjXSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkgfCAoZGF0W2NidCArIDJdIDw8IDE2KSkgPj5cbiAgICAgICAgICAgICAgKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbGxiW2xsY10pIC0gMSkpO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IGxidHIpID4+IDM7XG4gICAgICAgICAgbHN0ID1cbiAgICAgICAgICAgIGxsdC50W2xzdF0gK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpKSA+PiAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBsYnRyKSAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtYnRyKSA+PiAzO1xuICAgICAgICAgIG1zdCA9XG4gICAgICAgICAgICBtbHQudFttc3RdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbWJ0cikgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gb2J0cikgPj4gMztcbiAgICAgICAgICBvc3QgPVxuICAgICAgICAgICAgb2N0LnRbb3N0XSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKCgxIDw8IG9idHIpIC0gMSkpO1xuICAgICAgICAgIGlmIChvZmYgPiAzKSB7XG4gICAgICAgICAgICBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgIHN0Lm9bMV0gPSBzdC5vWzBdO1xuICAgICAgICAgICAgc3Qub1swXSA9IG9mZiAtPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gb2ZmIC0gKGxsICE9PSAwKTtcbiAgICAgICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgICAgb2ZmID0gaWR4ID09PSAzID8gc3Qub1swXSAtIDEgOiBzdC5vW2lkeF07XG4gICAgICAgICAgICAgIGlmIChpZHggPiAxKSBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgICAgc3Qub1sxXSA9IHN0Lm9bMF07XG4gICAgICAgICAgICAgIHN0Lm9bMF0gPSBvZmY7XG4gICAgICAgICAgICB9IGVsc2Ugb2ZmID0gc3Qub1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbDsgKytpKSB7XG4gICAgICAgICAgICBidWZbb3VidCArIGldID0gYnVmW3NwbCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICAob3VidCArPSBsbCksIChzcGwgKz0gbGwpO1xuICAgICAgICAgIHZhciBzdGluID0gb3VidCAtIG9mZjtcbiAgICAgICAgICBpZiAoc3RpbiA8IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAtc3RpbjtcbiAgICAgICAgICAgIHZhciBicyA9IHN0LmUgKyBzdGluO1xuICAgICAgICAgICAgaWYgKGxlbiA+IG1sKSBsZW4gPSBtbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgYnVmW291YnQgKyBpXSA9IHN0LndbYnMgKyBpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvdWJ0ICs9IGxlbiksIChtbCAtPSBsZW4pLCAoc3RpbiA9IDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvdWJ0ICsgaV0gPSBidWZbc3RpbiArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdWJ0ICs9IG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdWJ0ICE9PSBzcGwpIHtcbiAgICAgICAgICB3aGlsZSAoc3BsIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmW291YnQrK10gPSBidWZbc3BsKytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIG91YnQgPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAob3V0KSBzdC55ICs9IG91YnQ7XG4gICAgICAgIGVsc2UgYnVmID0gc2xjKGJ1ZiwgMCwgb3VidCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgc3QueSArPSBsc3M7XG4gICAgICAgICAgaWYgKHNwbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsc3M7ICsraSkge1xuICAgICAgICAgICAgICBidWZbaV0gPSBidWZbc3BsICsgaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwbCkgYnVmID0gc2xjKGJ1Ziwgc3BsKTtcbiAgICAgIH1cbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBlcnIoMik7XG4gIH07XG4gIC8vIGNvbmNhdFxuICB2YXIgY2N0ID0gZnVuY3Rpb24gKGJ1ZnMsIG9sKSB7XG4gICAgaWYgKGJ1ZnMubGVuZ3RoID09PSAxKSByZXR1cm4gYnVmc1swXTtcbiAgICB2YXIgYnVmID0gbmV3IHU4KG9sKTtcbiAgICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBidWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2hrID0gYnVmc1tpXTtcbiAgICAgIGJ1Zi5zZXQoY2hrLCBiKTtcbiAgICAgIGIgKz0gY2hrLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBac3RhbmRhcmQgZGF0YVxuICAgKiBAcGFyYW0gZGF0IFRoZSBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSBidWYgVGhlIG91dHB1dCBidWZmZXIuIElmIHVuc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZVxuICAgKiAgICAgICAgICAgIGV4YWN0bHkgZW5vdWdoIG1lbW9yeSB0byBmaXQgdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB5b3VyXG4gICAqICAgICAgICAgICAgZGF0YSBoYXMgbXVsdGlwbGUgZnJhbWVzIGFuZCB5b3Uga25vdyB0aGUgb3V0cHV0IHNpemUsIHNwZWNpZnlpbmdcbiAgICogICAgICAgICAgICBpdCB3aWxsIHlpZWxkIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBkYXRhXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb21wcmVzcyhkYXQsIGJ1Zikge1xuICAgIHZhciBidCA9IDAsXG4gICAgICBidWZzID0gW10sXG4gICAgICBuYiA9ICshYnVmLFxuICAgICAgb2wgPSAwO1xuICAgIHdoaWxlIChkYXQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3QgPSByemZoKGRhdCwgbmIgfHwgYnVmKTtcbiAgICAgIGlmICh0eXBlb2Ygc3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG5iKSB7XG4gICAgICAgICAgYnVmID0gbnVsbDtcbiAgICAgICAgICBpZiAoc3Qudy5sZW5ndGggPT09IHN0LnUpIHtcbiAgICAgICAgICAgIGJ1ZnMucHVzaCgoYnVmID0gc3QudykpO1xuICAgICAgICAgICAgb2wgKz0gc3QudTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgICAgc3QuZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCFzdC5sKSB7XG4gICAgICAgICAgdmFyIGJsayA9IHJ6YihkYXQsIHN0LCBidWYpO1xuICAgICAgICAgIGlmICghYmxrKSBlcnIoNSk7XG4gICAgICAgICAgaWYgKGJ1Zikgc3QuZSA9IHN0Lnk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWZzLnB1c2goYmxrKTtcbiAgICAgICAgICAgIG9sICs9IGJsay5sZW5ndGg7XG4gICAgICAgICAgICBjcHcoc3QudywgMCwgYmxrLmxlbmd0aCk7XG4gICAgICAgICAgICBzdC53LnNldChibGssIHN0LncubGVuZ3RoIC0gYmxrLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ0ID0gc3QuYiArIHN0LmMgKiA0O1xuICAgICAgfSBlbHNlIGJ0ID0gc3Q7XG4gICAgICBkYXQgPSBkYXQuc3ViYXJyYXkoYnQpO1xuICAgIH1cbiAgICByZXR1cm4gY2N0KGJ1ZnMsIG9sKTtcbiAgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0gbnVsbDtcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4wXG4vL1ZlcnNpb246IDwgNS4xLjFcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xudmFyIGNhbWxfZGVjb21wcmVzc19pbnB1dCA9IHpzdGRfZGVjb21wcmVzcztcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4xXG4vL1ZlcnNpb246IDwgNS4yLjBcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSBudWxsO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vVmVyc2lvbjogPj0gNS4yXG4vL1JlcXVpcmVzOiB6c3RkX2RlY29tcHJlc3NcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSB6c3RkX2RlY29tcHJlc3M7XG5cbi8vUHJvdmlkZXM6IGNhbWxfenN0ZF9pbml0aWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xuLy9WZXJzaW9uOiA+PSA1LjEuMVxuZnVuY3Rpb24gY2FtbF96c3RkX2luaXRpYWxpemUoX3VuaXQpIHtcbiAgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0genN0ZF9kZWNvbXByZXNzO1xuICByZXR1cm4gMTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMztcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMjtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX25vbmVcbnZhciBjYW1sX2VwaGVfbm9uZSA9IHsgY2FtbF9lcGhlX25vbmU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfZGF0YV9vcHRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgdmFyIG9sZCA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB2IGluc3RhbmNlb2YgT2JqZWN0KSB2ID0gbmV3IGdsb2JhbFRoaXMuV2Vha1JlZih2KTtcbiAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gdjtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHgpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NyZWF0ZShuKSB7XG4gIHJldHVybiBjYW1sX3dlYWtfY3JlYXRlKG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfd2Vha19jcmVhdGUobikge1xuICB2YXIgYWxlbiA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgdmFyIHggPSBuZXcgQXJyYXkoYWxlbik7XG4gIHhbMF0gPSAyNTE7XG4gIHhbMV0gPSBcImNhbWxfZXBoZV9saXN0X2hlYWRcIjtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhbGVuOyBpKyspIHtcbiAgICB4W2ldID0gY2FtbF9lcGhlX25vbmU7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfa2V5LCBjYW1sX2VwaGVfdW5zZXRfa2V5XG5mdW5jdGlvbiBjYW1sX3dlYWtfc2V0KHgsIGksIHYpIHtcbiAgaWYgKHYgPT09IDApIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9rZXkoeCwgaSwgdlsxXSk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfZ2V0XG5cbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfa2V5KHgsIGkpIHtcbiAgdmFyIHdlYWsgPSB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV07XG4gIGlmICh3ZWFrID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGlmIChnbG9iYWxUaGlzLldlYWtSZWYgJiYgd2VhayBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuV2Vha1JlZikge1xuICAgIHdlYWsgPSB3ZWFrLmRlcmVmKCk7XG4gICAgaWYgKHdlYWsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gY2FtbF9lcGhlX25vbmU7XG4gICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWzAsIHdlYWtdO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2dldF9rZXksY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuLy9BbGlhczogY2FtbF93ZWFrX2dldF9jb3B5XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5KHgsIGkpIHtcbiAgdmFyIHkgPSBjYW1sX2VwaGVfZ2V0X2tleSh4LCBpKTtcbiAgaWYgKHkgPT09IDApIHJldHVybiB5O1xuICB2YXIgeiA9IHlbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfa2V5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfY2hlY2tcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19rZXkoeCwgaSkge1xuICB2YXIgd2VhayA9IHhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbiAgaWYgKHdlYWsgPT09IGNhbWxfZXBoZV9ub25lKSByZXR1cm4gMDtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB3ZWFrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgd2VhayA9IHdlYWsuZGVyZWYoKTtcbiAgICBpZiAod2VhayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfYmxpdF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9BbGlhczogY2FtbF93ZWFrX2JsaXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2tleShhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIHZhciBvbGQgPSBjYW1sX2VwaGVfZ2V0X2RhdGEoYTEpO1xuICAvLyBtaW51cyBvbmUgYmVjYXVzZSBjYW1sX2FycmF5X2JsaXQgd29ya3Mgb24gb2NhbWwgYXJyYXlcbiAgY2FtbF9hcnJheV9ibGl0KFxuICAgIGExLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTEgLSAxLFxuICAgIGEyLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTIgLSAxLFxuICAgIGxlbixcbiAgKTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdChhMiwgb2xkKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YSwgY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuZnVuY3Rpb24gY2FtbF9lcGhlX2JsaXRfZGF0YShzcmMsIGRzdCkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHNyYyk7XG4gIGNhbWxfZXBoZV9zZXRfZGF0YV9vcHQoZHN0LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXQsIGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfbm9uZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpIHtcbiAgdmFyIGRhdGEgPSB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF07XG4gIGlmIChkYXRhID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGZvciAodmFyIGkgPSBjYW1sX2VwaGVfa2V5X29mZnNldDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoZ2xvYmFsVGhpcy5XZWFrTWFwKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLmdldChrKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbMCwgZGF0YV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkoeCkge1xuICB2YXIgciA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKHIgPT09IDApIHJldHVybiAwO1xuICB2YXIgeiA9IHJbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldCwgY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0geC5sZW5ndGggLSAxOyBpID49IGNhbWxfZXBoZV9rZXlfb2Zmc2V0OyBpLS0pIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnbG9iYWxUaGlzLldlYWtNYXApIHtcbiAgICAgICAgZGF0YSA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKS5zZXQoaywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0KHgsIGRhdGFfb3B0KSB7XG4gIGlmIChkYXRhX29wdCA9PT0gMCkgY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGFfb3B0WzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfZGF0YSh4KSB7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NoZWNrX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NoZWNrX2RhdGEoeCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGRhdGEgPT09IDApIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcihfdW5pdCkge1xuICAvL2F2YWlsYWJsZSB3aXRoIFtub2RlIC0tZXhwb3NlLWdjXVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZ2MgPT09IFwiZnVuY3Rpb25cIikgZ2xvYmFsVGhpcy5nYyh0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKF91bml0KSB7XG4gIC8vYXZhaWxhYmxlIHdpdGggW25vZGUgLS1leHBvc2UtZ2NdXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5nYyA9PT0gXCJmdW5jdGlvblwiKSBnbG9iYWxUaGlzLmdjKCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoX3VuaXQpIHtcbiAgLy9hdmFpbGFibGUgd2l0aCBbbm9kZSAtLWV4cG9zZS1nY11cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmdjID09PSBcImZ1bmN0aW9uXCIpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbihfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIFsyNTQsIDAsIDAsIDBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19xdWlja19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3F1aWNrX3N0YXQoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG4vL1JlcXVpcmVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc3RhdCh1bml0KSB7XG4gIHJldHVybiBjYW1sX2djX3F1aWNrX3N0YXQodW5pdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc2V0XG5mdW5jdGlvbiBjYW1sX2djX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19nZXRcbmZ1bmN0aW9uIGNhbWxfZ2NfZ2V0KF91bml0KSB7XG4gIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXIoX2YsIF94KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlXG52YXIgYWxsX2ZpbmFsaXplcnMgPSBuZXcgZ2xvYmFsVGhpcy5TZXQoKTtcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUoY2IsIGEpIHtcbiAgaWYgKGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHZhciB4ID0gbmV3IGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkoZnVuY3Rpb24gKHgpIHtcbiAgICAgIGFsbF9maW5hbGl6ZXJzLmRlbGV0ZSh4KTtcbiAgICAgIGNiKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHgucmVnaXN0ZXIoYSwgeCk7XG4gICAgYWxsX2ZpbmFsaXplcnMuYWRkKHgpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlbGVhc2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVsZWFzZShfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQoX3JhdGUsIF9zdGFja19zaXplLCBfdHJhY2tlcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2ZfZGlzY2FyZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9kaXNjYXJkKF90KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V2ZW50bG9nX3Jlc3VtZVxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19yZXN1bWUoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2Vcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yX3NsaWNlXG5mdW5jdGlvbiBjYW1sX2djX21ham9yX3NsaWNlKF93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9idWNrZXRcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2J1Y2tldChfbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG4vL1ZlcnNpb246IDwgNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQoX24pIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID0ge1xuICAgIGp1c3RpZnk6IFwiK1wiLFxuICAgIHNpZ25zdHlsZTogXCItXCIsXG4gICAgZmlsbGVyOiBcIiBcIixcbiAgICBhbHRlcm5hdGU6IGZhbHNlLFxuICAgIGJhc2U6IDAsXG4gICAgc2lnbmVkY29udjogZmFsc2UsXG4gICAgd2lkdGg6IDAsXG4gICAgdXBwZXJjYXNlOiBmYWxzZSxcbiAgICBzaWduOiAxLFxuICAgIHByZWM6IC0xLFxuICAgIGNvbnY6IFwiZlwiLFxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgZi5qdXN0aWZ5ID0gXCItXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIitcIjpcbiAgICAgIGNhc2UgXCIgXCI6XG4gICAgICAgIGYuc2lnbnN0eWxlID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOlxuICAgICAgICBmLmZpbGxlciA9IFwiMFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMVwiOlxuICAgICAgY2FzZSBcIjJcIjpcbiAgICAgIGNhc2UgXCIzXCI6XG4gICAgICBjYXNlIFwiNFwiOlxuICAgICAgY2FzZSBcIjVcIjpcbiAgICAgIGNhc2UgXCI2XCI6XG4gICAgICBjYXNlIFwiN1wiOlxuICAgICAgY2FzZSBcIjhcIjpcbiAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgIGYud2lkdGggPSAwO1xuICAgICAgICB3aGlsZSAoKChjID0gZm10LmNoYXJDb2RlQXQoaSkgLSA0OCksIGMgPj0gMCAmJiBjIDw9IDkpKSB7XG4gICAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBmLnByZWMgPSAwO1xuICAgICAgICBpKys7XG4gICAgICAgIHdoaWxlICgoKGMgPSBmbXQuY2hhckNvZGVBdChpKSAtIDQ4KSwgYyA+PSAwICYmIGMgPD0gOSkpIHtcbiAgICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICBmLmJhc2UgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9PSBcIi1cIikpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT09IFwiK1wiICYmIGYuZmlsbGVyID09PSBcIiBcIilcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gXCIgXCI7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9IFwiLVwiO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9PSBcIi1cIikgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT09IDgpIGJ1ZmZlciArPSBcIjBcIjtcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZSA/IFwiMFhcIiA6IFwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCIrXCIgJiYgZi5maWxsZXIgPT09IFwiMFwiKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIjBcIjtcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCItXCIpIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIiBcIjtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBIdWdvIEhldXphcmRcblxuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVcbnZhciBjYW1sX2dyX3N0YXRlO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYgKGNhbWxfZ3Jfc3RhdGUpIHtcbiAgICByZXR1cm4gY2FtbF9ncl9zdGF0ZTtcbiAgfVxuICB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoW1xuICAgIDAsXG4gICAgY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiTm90IGluaXRpYWxpemVkXCIpLFxuICBdKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGUgPSBjdHg7XG4gIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbykge1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiICsgbmFtZSArIFwiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmICghKGluZm8gPT09IFwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gXCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYgKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKTtcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdyA/IE51bWJlci5wYXJzZUludCh3KSA6IDIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiICsgdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoID8gTnVtYmVyLnBhcnNlSW50KGgpIDogMjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiICsgaCk7XG5cbiAgdmFyIHdpbiA9IGdsb2JhbFRoaXMub3BlbihcImFib3V0OmJsYW5rXCIsIHRhcmdldCwgc3BlY3Muam9pbihcIixcIikpO1xuICBpZiAoIXdpbikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpO1xuICB9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsIHcsIGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCkge1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsIGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLCBjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJib3R0b21cIjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcywgdywgaCkge1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGxpbmVfd2lkdGg6IDEsXG4gICAgZm9udDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZTogMjYsXG4gICAgY29sb3I6IDB4MDAwMDAwLFxuICAgIHRpdGxlOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpLFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KSByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmIChzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgaWYgKHcgIT09IHMuY2FudmFzLndpZHRoKSBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIGlmIChoICE9PSBzLmNhbnZhcy5oZWlnaHQpIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHMuY2FudmFzLndpZHRoLCBzLmNhbnZhcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gXCJcIiArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSBcIjBcIiArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gICAgZyA9IChjb2xvciA+PiA4KSAmIDB4ZmYsXG4gICAgYiA9IChjb2xvciA+PiAwKSAmIDB4ZmY7XG4gIHMuY29sb3IgPSBjb2xvcjtcbiAgdmFyIGNfc3RyID0gXCIjXCIgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgsIHkpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsIDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIChkWzFdID1cbiAgICAoY29sb3IgPj4gOCkgJlxuICAgIDB4ZmYpLCAvL2dcbiAgICAoZFsyXSA9IChjb2xvciA+PiAwKSAmIDB4ZmYpOyAvL2JcbiAgZFszXSA9IDB4ZmY7IC8vYVxuICBzLnggPSB4O1xuICBzLnkgPSB5O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLCB4LCBzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbSA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgcy5oZWlnaHQgLSB5LCAxLCAxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54ID0geDtcbiAgcy55ID0geTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngsIHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LCBzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueCA9IHg7XG4gIHMueSA9IHk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LCB5LCB3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCwgcy5oZWlnaHQgLSB5LCB3LCAtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsIGN4LCBjeSwgcnksIHJ4LCBhMSwgYTIpIHtcbiAgd2hpbGUgKGExID4gYTIpIGEyICs9IDM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLFxuICAgIHhQb3MsXG4gICAgeVBvcyxcbiAgICB4UG9zX3ByZXYsXG4gICAgeVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCArIHJ5KSAvIDIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9ICgoYTIgLSBhMSkgKiBNYXRoLlBJKSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IG51bTsgaisrKSB7XG4gICAgeFBvcyA9XG4gICAgICBjeCAtXG4gICAgICByeCAqIE1hdGguc2luKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnkgKiBNYXRoLmNvcyhpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9XG4gICAgICBjeSArXG4gICAgICByeSAqIE1hdGguY29zKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnggKiBNYXRoLnNpbihpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYgIT09IHhQb3MgfHwgeVBvc19wcmV2ICE9PSB5UG9zKSB7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXYgPSB4UG9zO1xuICAgIHlQb3NfcHJldiA9IHlQb3M7XG4gICAgaSAtPSBkZWx0YTsgLy9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LCB5LCByeCwgcnksIGExLCBhMikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCwgeCwgcy5oZWlnaHQgLSB5LCByeCwgcnksIGExLCBhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gdztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCwgeSwgdywgaCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LCBzLmhlaWdodCAtIHksIHcsIC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLCBzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLCBzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSwgcy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgsIHksIHJ4LCByeSwgYTEsIGEyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LCB4LCBzLmhlaWdodCAtIHksIHJ4LCByeSwgYTEsIGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIsIHMueCwgcy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpIHtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cikge1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsIHcsIHMudGV4dF9zaXplXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodywgaCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgIHZhciBjID0gYXJyW2kgKyAxXVtqICsgMV07XG4gICAgICB2YXIgbyA9IGkgKiAodyAqIDQpICsgaiAqIDQ7XG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAoYyA+PiAxNikgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IChjID4+IDgpICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAoYyA+PiAwKSAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKSB7XG4gIHZhciBkYXRhID0gWzBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltLmhlaWdodDsgaSsrKSB7XG4gICAgZGF0YVtpICsgMV0gPSBbMF07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbS53aWR0aDsgaisrKSB7XG4gICAgICB2YXIgbyA9IGkgKiAoaW0ud2lkdGggKiA0KSArIGogKiA0LFxuICAgICAgICByID0gaW0uZGF0YVtvICsgMF0sXG4gICAgICAgIGcgPSBpbS5kYXRhW28gKyAxXSxcbiAgICAgICAgYiA9IGltLmRhdGFbbyArIDJdO1xuICAgICAgZGF0YVtpICsgMV1baiArIDFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSwgeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmICghaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwgMCwgMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGdsb2JhbFRoaXMuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCB4LCBzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICAgICAgaW0uaW1hZ2UgPSBpbWFnZTtcbiAgICB9O1xuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSwgeCwgcy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3JlYXRlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jcmVhdGVfaW1hZ2UoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgsIHkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9ibGl0X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9ibGl0X2ltYWdlKGltLCB4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltMiA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoXG4gICAgeCxcbiAgICBzLmhlaWdodCAtIGltLmhlaWdodCAtIHksXG4gICAgaW0ud2lkdGgsXG4gICAgaW0uaGVpZ2h0LFxuICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSArIDFdID0gaW0yLmRhdGFbaSArIDFdO1xuICAgIGltLmRhdGFbaSArIDJdID0gaW0yLmRhdGFbaSArIDJdO1xuICAgIGltLmRhdGFbaSArIDNdID0gaW0yLmRhdGFbaSArIDNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2FpdF9ldmVudFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl93YWl0X2V2ZW50KF9ldmwpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9zeW5jaHJvbml6ZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3JlbWVtYmVyX21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVtZW1iZXJfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChfYSkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl93aW5kb3dfaWQgbm90IEltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX29wZW5fc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fc3Vid2luZG93KF9hLCBfYiwgX2MsIF9kKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KF9hKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VzY2FwZSBjb25zdCAoY29uc3QpXG52YXIgY2FtbF9qc19yZWdleHBzID0geyBhbXA6IC8mL2csIGx0OiAvPC9nLCBxdW90OiAvXCIvZywgYWxsOiAvWyY8XCJdLyB9O1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VzY2FwZShzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvO1xuICBpZiAocy5tYXRjaChlbnRpdHkpKSB7XG4gICAgdmFyIHN0cixcbiAgICAgIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICB0ZW1wLmlubmVySFRNTCA9IHM7XG4gICAgc3RyID0gdGVtcC50ZXh0Q29udGVudCB8fCB0ZW1wLmlubmVyVGV4dDtcbiAgICB0ZW1wID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUoKSB7XG4gIHZhciBjID0gY29uc29sZTtcbiAgdmFyIG0gPSBbXG4gICAgXCJsb2dcIixcbiAgICBcImRlYnVnXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJ3YXJuXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcnhtbFwiLFxuICAgIFwidHJhY2VcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cENvbGxhcHNlZFwiLFxuICAgIFwiZ3JvdXBFbmRcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVFbmRcIixcbiAgXTtcbiAgZnVuY3Rpb24gZigpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dID0gZjtcbiAgcmV0dXJuIGM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlKF91bml0KSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiWE1MSHR0cFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfSBjYXRjaCB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkZhaWxlZCB0byBjcmVhdGUgWE1MSHR0cFJlcXVlc3RcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZiAoZXhuLmpzX2Vycm9yKSB7XG4gICAgcmV0dXJuIGV4bi5qc19lcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNikgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYyxcbiAgICBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBsZXhidWZbbGV4X2J1ZmZlcl07XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlIC0gMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKSB7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT09IDApIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZSBjID0gMjU2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChidWZmZXIsIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09PSBzdGF0ZSkgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PT0gLTEpIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChkc3QgPT09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGkrKztcbiAgICBpZiAoc3JjID09PSAweGZmKSBtZW1bZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlIG1lbVtkc3QgKyAxXSA9IG1lbVtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpKys7XG4gICAgaWYgKGRzdCA9PT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChzcmMgPT09IDB4ZmYpIG1lbVtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2UgbWVtW2RzdCArIDFdID0gbWVtW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5KHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbClcbiAgICB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLFxuICAgIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGxleGJ1ZltsZXhfYnVmZmVyXTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvciAoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZSAtIDE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSkge1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09PSAwKSByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2UgYyA9IDI1NjtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQoYnVmZmVyLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT09IHN0YXRlKSBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2Ugc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09PSAtMSkgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSxcbiAgICAgICAgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbShcbiAgICAgICAgICB0YmwubGV4X2NvZGUsXG4gICAgICAgICAgcGNfb2ZmLFxuICAgICAgICAgIGxleGJ1ZltsZXhfbWVtXSxcbiAgICAgICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSxcbiAgICAgICAgKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfbHhtX01cbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fTSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZDEzNDI1NDNkZTgyZWY5NVwiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX2RhYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fZGFiYSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZGFiYTBiNmViMDkzMjJlM1wiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX25leHQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3hvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbXVsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9NXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9kYWJhXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfbHhtX25leHQodikge1xuICBmdW5jdGlvbiBzaGlmdF9sKHgsIGspIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0KHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIHNoaWZ0X3IoeCwgaykge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIG9yKGEsIGIpIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9vcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3hvcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X2FkZChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X211bChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiByb3RsKHgsIGspIHtcbiAgICByZXR1cm4gb3Ioc2hpZnRfbCh4LCBrKSwgc2hpZnRfcih4LCA2NCAtIGspKTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoYSwgaSkge1xuICAgIHJldHVybiBjYW1sX2JhX2dldF8xKGEsIGkpO1xuICB9XG4gIGZ1bmN0aW9uIHNldChhLCBpLCB4KSB7XG4gICAgcmV0dXJuIGNhbWxfYmFfc2V0XzEoYSwgaSwgeCk7XG4gIH1cbiAgdmFyIE0gPSBjYW1sX2x4bV9NO1xuICB2YXIgZGFiYSA9IGNhbWxfbHhtX2RhYmE7XG4gIHZhciB6LCBxMCwgcTE7XG4gIHZhciBzdCA9IHY7XG4gIHZhciBhID0gZ2V0KHN0LCAwKTtcbiAgdmFyIHMgPSBnZXQoc3QsIDEpO1xuICB2YXIgeDAgPSBnZXQoc3QsIDIpO1xuICB2YXIgeDEgPSBnZXQoc3QsIDMpO1xuICAvKiBDb21iaW5pbmcgb3BlcmF0aW9uICovXG4gIHogPSBhZGQocywgeDApO1xuICAvKiBNaXhpbmcgZnVuY3Rpb24gKi9cbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IHhvcih6LCBzaGlmdF9yKHosIDMyKSk7XG4gIC8qIExDRyB1cGRhdGUgKi9cbiAgc2V0KHN0LCAxLCBhZGQobXVsKHMsIE0pLCBhKSk7XG4gIC8qIFhCRyB1cGRhdGUgKi9cbiAgdmFyIHEwID0geDA7XG4gIHZhciBxMSA9IHgxO1xuICBxMSA9IHhvcihxMSwgcTApO1xuICBxMCA9IHJvdGwocTAsIDI0KTtcbiAgcTAgPSB4b3IoeG9yKHEwLCBxMSksIHNoaWZ0X2wocTEsIDE2KSk7XG4gIHExID0gcm90bChxMSwgMzcpO1xuICBzZXQoc3QsIDIsIHEwKTtcbiAgc2V0KHN0LCAzLCBxMSk7XG4gIC8qIFJldHVybiByZXN1bHQgKi9cbiAgcmV0dXJuIHo7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlcl90cmFjZVxudmFyIGNhbWxfcGFyc2VyX3RyYWNlID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5LCBjYW1sX3BhcnNlcl90cmFjZSxjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpIHtcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICB2YXIgdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIHZhciB0YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBmdW5jdGlvbiBsb2coeCkge1xuICAgIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4ICsgXCJcXG5cIik7XG4gICAgY2FtbF9tbF9vdXRwdXQoY2FtbF9zeXNfZmRzWzJdLmNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuX25hbWUobmFtZXMsIG51bWJlcikge1xuICAgIHZhciBzdHIgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lcyk7XG4gICAgaWYgKHN0clswXSA9PT0gXCJcXHgwMFwiKSByZXR1cm4gXCI8dW5rbm93biB0b2tlbj5cIjtcbiAgICByZXR1cm4gc3RyLnNwbGl0KFwiXFx4MDBcIilbbnVtYmVyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByaW50X3Rva2VuKHN0YXRlLCB0b2spIHtcbiAgICB2YXIgdG9rZW4sIGtpbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbl9uYW1lKHRhYmxlc1t0YmxfbmFtZXNfYmxvY2tdLCB0b2tbMF0pO1xuICAgICAgaWYgKHR5cGVvZiB0b2tbMV0gPT09IFwibnVtYmVyXCIpIGtpbmQgPSBcIlwiICsgdG9rWzFdO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHRva1sxXSA9PT0gXCJzdHJpbmdcIikga2luZCA9IHRva1sxXTtcbiAgICAgIGVsc2UgaWYgKHRva1sxXSBpbnN0YW5jZW9mIE1sQnl0ZXMpIGtpbmQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRva1sxXSk7XG4gICAgICBlbHNlIGtpbmQgPSBcIl9cIjtcbiAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogcmVhZCB0b2tlbiBcIiArIHRva2VuICsgXCIoXCIgKyBraW5kICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHRva2VuX25hbWUodGFibGVzW3RibF9uYW1lc19jb25zdF0sIHRvayk7XG4gICAgICBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlYWQgdG9rZW4gXCIgKyB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLFxuICAgIG4sXG4gICAgbjEsXG4gICAgbjIsXG4gICAgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgdGhlX2xvb3A6IGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAwOiAvL1NUQVJUOlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDY6IC8vbG9vcDpcbiAgICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgICBpZiAobiAhPT0gMCkge1xuICAgICAgICAgIGNtZCA9IHJlZHVjZTtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHtcbiAgICAgICAgICBjbWQgPSB0ZXN0c2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgICBjYXNlIDE6IC8vVE9LRU5fUkVBRDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgcHJpbnRfdG9rZW4oc3RhdGUsIGFyZyk7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDc6IC8vdGVzdHNoaWZ0OlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuMSAhPT0gMCAmJlxuICAgICAgICAgIG4yID49IDAgJiZcbiAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09PSBlbnZbZW52X2N1cnJfY2hhcl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kID0gc2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG4xICE9PSAwICYmXG4gICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT09IGVudltlbnZfY3Vycl9jaGFyXVxuICAgICAgICApIHtcbiAgICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgICBjbWQgPSByZWR1Y2U7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICAgIGNhc2UgNTogLy9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gRVJSQ09ERVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiUmVjb3ZlcmluZyBpbiBzdGF0ZSBcIiArIHN0YXRlMSk7XG4gICAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHRoZV9sb29wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJEaXNjYXJkaW5nIHN0YXRlIFwiICsgc3RhdGUxKTtcbiAgICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiTm8gbW9yZSBzdGF0ZXMgdG8gZGlzY2FyZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7IC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiRGlzY2FyZGluZyBsYXN0IHRva2VuIHJlYWRcIik7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgICAgY21kID0gbG9vcDtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gVW5yZWFjaGFibGVcbiAgICAgIGNhc2UgODogLy9zaGlmdDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgY2FzZSA5OiAvL3NoaWZ0X3JlY292ZXI6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKVxuICAgICAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogc2hpZnQgdG8gc3RhdGUgXCIgKyB0YWJsZXMudGFibGVbbjJdKTtcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBzcCsrO1xuICAgICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgICAgY2FzZSAyOiAvL1NUQUNLU19HUk9XTl8xOlxuICAgICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcblxuICAgICAgY2FzZSAxMDogLy9yZWR1Y2U6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlZHVjZSBieSBydWxlIFwiICsgbik7XG4gICAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICBuMiA+PSAwICYmXG4gICAgICAgICAgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gc3RhdGUxXG4gICAgICAgIClcbiAgICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGVsc2Ugc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICAgIGJyZWFrIHRoZV9sb29wO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgICBjYXNlIDM6IC8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICAgIGNhc2UgNDogLy9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZXJfdHJhY2VcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZShib29sKSB7XG4gIHZhciBvbGRmbGFnID0gY2FtbF9wYXJzZXJfdHJhY2U7XG4gIGNhbWxfcGFyc2VyX3RyYWNlID0gYm9vbDtcbiAgcmV0dXJuIG9sZGZsYWc7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBIdWdvIEhldXphcmRcbi8vIENvcHlyaWdodCAoQykgMjAyMCAtIFNoYWNoYXIgSXR6aGFreVxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2Jsb2IvNC4wNy9vdGhlcmxpYnMvc3RyL3N0cnN0dWJzLmNcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2NvcS9qc2NvcS9ibG9iL3Y4LjExL2NvcS1qcy9qc19zdHViL3N0ci5qc1xuXG4vL1Byb3ZpZGVzOiByZV9tYXRjaFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZ2V0XG5cbnZhciByZV9tYXRjaCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZV93b3JkX2xldHRlcnMgPSBbXG4gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiAweDAwLTB4MUY6IG5vbmUgKi8sIDB4MDAsIDB4MDAsIDB4ZmYsXG4gICAgMHgwMyAvKiAweDIwLTB4M0Y6IGRpZ2l0cyAwLTkgKi8sIDB4ZmUsIDB4ZmYsIDB4ZmYsXG4gICAgMHg4NyAvKiAweDQwLTB4NUY6IEEgdG8gWiwgXyAqLywgMHhmZSwgMHhmZiwgMHhmZixcbiAgICAweDA3IC8qIDB4NjAtMHg3RjogYSB0byB6ICovLCAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4ODAtMHg5Rjogbm9uZSAqLyxcbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4QTAtMHhCRjogbm9uZSAqLywgMHhmZiwgMHhmZiwgMHg3ZixcbiAgICAweGZmIC8qIDB4QzAtMHhERjogTGF0aW4tMSBhY2NlbnRlZCB1cHBlcmNhc2UgKi8sIDB4ZmYsIDB4ZmYsIDB4N2YsXG4gICAgMHhmZiAvKiAweEUwLTB4RkY6IExhdGluLTEgYWNjZW50ZWQgbG93ZXJjYXNlICovLFxuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsXG4gICAgQ0hBUk5PUk06IDEsXG4gICAgU1RSSU5HOiAyLFxuICAgIFNUUklOR05PUk06IDMsXG4gICAgQ0hBUkNMQVNTOiA0LFxuICAgIEJPTDogNSxcbiAgICBFT0w6IDYsXG4gICAgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LFxuICAgIEVOREdST1VQOiA5LFxuICAgIFJFRkdST1VQOiAxMCxcbiAgICBBQ0NFUFQ6IDExLFxuICAgIFNJTVBMRU9QVDogMTIsXG4gICAgU0lNUExFU1RBUjogMTMsXG4gICAgU0lNUExFUExVUzogMTQsXG4gICAgR09UTzogMTUsXG4gICAgUFVTSEJBQ0s6IDE2LFxuICAgIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzX3dvcmRfbGV0dGVyKGMpIHtcbiAgICByZXR1cm4gKHJlX3dvcmRfbGV0dGVyc1tjID4+IDNdID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLCBpKSB7XG4gICAgcmV0dXJuIChjYW1sX3N0cmluZ19nZXQocywgaSA+PiAzKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcbiAgICB2YXIgcHJvZyA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsxXSksXG4gICAgICBjcG9vbCA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICBub3JtdGFibGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgIG51bWdyb3VwcyA9IHJlWzRdIHwgMCxcbiAgICAgIG51bXJlZ2lzdGVycyA9IHJlWzVdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgcXVpdCA9IGZhbHNlLFxuICAgICAgc3RhY2sgPSBbXSxcbiAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgcmVfcmVnaXN0ZXIgPSBuZXcgQXJyYXkobnVtcmVnaXN0ZXJzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBncm91cHNbaV0gPSB7IHN0YXJ0OiAtMSwgZW5kOiAtMSB9O1xuICAgIH1cbiAgICBncm91cHNbMF0uc3RhcnQgPSBwb3M7XG5cbiAgICB2YXIgYmFja3RyYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS51bmRvKSB7XG4gICAgICAgICAgaXRlbS51bmRvLm9ialtpdGVtLnVuZG8ucHJvcF0gPSBpdGVtLnVuZG8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3MpIHtcbiAgICAgICAgICBwYyA9IGl0ZW0ucG9zLnBjO1xuICAgICAgICAgIHBvcyA9IGl0ZW0ucG9zLnR4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1aXQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzdGFjay5wdXNoKGl0ZW0pO1xuICAgIH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGggKiAyKTtcbiAgICAgIHJlc3VsdFswXSA9IDA7IC8vIHRhZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGcgPSBncm91cHNbaV07XG4gICAgICAgIGlmIChnLnN0YXJ0IDwgMCB8fCBnLmVuZCA8IDApIHtcbiAgICAgICAgICBnLnN0YXJ0ID0gZy5lbmQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbMiAqIGkgKyAxXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyICogaSArIDEgKyAxXSA9IGcuZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdmFyIHByZWZpeF9tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwYXJ0aWFsKSByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgIH07XG5cbiAgICAvKiBNYWluIERGQSBpbnRlcnByZXRlciBsb29wICovXG4gICAgd2hpbGUgKCFxdWl0KSB7XG4gICAgICB2YXIgb3AgPSBwcm9nW3BjXSAmIDB4ZmYsXG4gICAgICAgIHNhcmcgPSBwcm9nW3BjXSA+PiA4LFxuICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgIGMgPSBzW3Bvc10sXG4gICAgICAgIGdyb3VwO1xuXG4gICAgICBwYysrO1xuXG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gdWFyZykgcG9zKys7XG4gICAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIQVJOT1JNOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09IGFyZy5jaGFyQ29kZUF0KGkpKSBjID0gc1srK3Bvc107XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm10YWJsZS5jaGFyQ29kZUF0KGMpID09PSBhcmcuY2hhckNvZGVBdChpKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICAgIGlmIChwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICAgIGlmIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuV09SREJPVU5EQVJZOlxuICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzWzBdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9PSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkJFR0dST1VQOlxuICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICAgIHB1c2goeyB1bmRvOiB7IG9iajogZ3JvdXAsIHByb3A6IFwic3RhcnRcIiwgdmFsdWU6IGdyb3VwLnN0YXJ0IH0gfSk7XG4gICAgICAgICAgZ3JvdXAuc3RhcnQgPSBwb3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgICBwdXNoKHsgdW5kbzogeyBvYmo6IGdyb3VwLCBwcm9wOiBcImVuZFwiLCB2YWx1ZTogZ3JvdXAuZW5kIH0gfSk7XG4gICAgICAgICAgZ3JvdXAuZW5kID0gcG9zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgICAgaWYgKGdyb3VwLnN0YXJ0IDwgMCB8fCBncm91cC5lbmQgPCAwKSB7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNbaV0gIT09IHNbcG9zXSkge1xuICAgICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFUExVUzpcbiAgICAgICAgICBpZiAocG9zID09PSBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgICAgfSBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICAgIHJldHVybiBhY2NlcHQoKTtcbiAgICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgICBwdXNoKHsgcG9zOiB7IHBjOiBwYyArIHNhcmcsIHR4dDogcG9zIH0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TRVRNQVJLOlxuICAgICAgICAgIHB1c2goe1xuICAgICAgICAgICAgdW5kbzogeyBvYmo6IHJlX3JlZ2lzdGVyLCBwcm9wOiB1YXJnLCB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ10gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIRUNLUFJPR1JFU1M6XG4gICAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19nZXRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9mb3J3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKTtcbiAgdmFyIHN0YXJ0Y2hhcnMgPSByZVs2XSB8IDA7XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIGlmIChzdGFydGNoYXJzID49IDApIHtcbiAgICBzdGFydGNoYXJzID0gcmVbMl1bc3RhcnRjaGFycyArIDFdO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zIDwgbGVuICYmXG4gICAgICAgIGNhbWxfc3RyaW5nX2dldChzdGFydGNoYXJzLCBjYW1sX3N0cmluZ19nZXQocywgcG9zKSkgPT09IDBcbiAgICAgIClcbiAgICAgICAgcG9zKys7XG4gICAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgcG9zKys7XG4gICAgfSB3aGlsZSAocG9zIDw9IGxlbik7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcysrO1xuICAgIH0gd2hpbGUgKHBvcyA8PSBsZW4pO1xuICB9XG4gIHJldHVybiBbMF07IC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuZnVuY3Rpb24gcmVfc2VhcmNoX2JhY2t3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIik7XG4gIHZhciBzdGFydGNoYXJzID0gcmVbNl0gfCAwO1xuICBpZiAoc3RhcnRjaGFycyA+PSAwKSB7XG4gICAgc3RhcnRjaGFycyA9IHJlWzJdW3N0YXJ0Y2hhcnMgKyAxXTtcbiAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zID4gMCAmJlxuICAgICAgICBwb3MgPCBsZW4gJiZcbiAgICAgICAgY2FtbF9zdHJpbmdfZ2V0KHN0YXJ0Y2hhcnMsIGNhbWxfc3RyaW5nX2dldChzLCBwb3MpKSA9PT0gMFxuICAgICAgKVxuICAgICAgICBwb3MtLTtcbiAgICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBwb3MtLTtcbiAgICB9IHdoaWxlIChwb3MgPj0gMCk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcy0tO1xuICAgIH0gd2hpbGUgKHBvcyA+PSAwKTtcbiAgfVxuICByZXR1cm4gWzBdOyAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUsIHMsIHBvcykge1xuICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3BhcnRpYWxfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfcGFydGlhbF9tYXRjaChyZSwgcywgcG9zKSB7XG4gIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCwgZ3JvdXBzLCBvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlIChuIDwgbGVuKSB7XG4gICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICBpZiAoY3VyICE9PSBcIlxcXFxcIikge1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG4gPT09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2ggKGN1cikge1xuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgIGNhc2UgXCI2XCI6XG4gICAgICAgIGNhc2UgXCI3XCI6XG4gICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgICAgaWYgKGMgKiAyID49IGdyb3Vwcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMik7XG4gICAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMiArIDEpO1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IHJlZmVyZW5jZSB0byB1bm1hdGNoZWQgZ3JvdXBcIik7XG4gICAgICAgICAgcmVzICs9IG9yaWcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzICs9IFwiXFxcXFwiICsgY3VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpO1xufVxuIl0sIm5hbWVzIjpbImNzdF9PdXRfb2ZfbWVtb3J5IiwiY3N0X1N5c19lcnJvciIsImNzdF9GYWlsdXJlIiwiY3N0X0ludmFsaWRfYXJndW1lbnQiLCJjc3RfRW5kX29mX2ZpbGUiLCJjc3RfRGl2aXNpb25fYnlfemVybyIsImNzdF9Ob3RfZm91bmQiLCJjc3RfTWF0Y2hfZmFpbHVyZSIsImNzdF9TdGFja19vdmVyZmxvdyIsImNzdF9TeXNfYmxvY2tlZF9pbyIsImNzdF9Bc3NlcnRfZmFpbHVyZSIsImNzdF9VbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7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O0FBQUE7QUFBQTtBQUFBLFdBR3FCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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Q0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTyxhQTdFRixDQThFTjtBQUFBLE9BbkdzQjtBQUFBLE9BQUQ7QUFB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0p6YUE7QUFBQSxPQUFBQSxvQkFBQTtBQUFBO0FBQUEsT0FBQUMsZ0JBQUE7QUFBQTtBQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBLE9BQUFDLHVCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLGtCQUFBO0FBQUE7QUFBQSxPQUFBQyx1QkFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxnQkFBQTtBQUFBO0FBQUEsT0FBQUMsb0JBQUE7QUFBQTtBQUFBLE9BQUFDLHFCQUFBO0FBQUE7QUFBQSxPQUFBQyxxQkFBQTtBQUFBO0FBQUEsT0FBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsaUNBQUEiLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOF19fSx7Im9mZnNldCI6eyJsaW5lIjo5MzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJlcmFzZV9yZWwiLCJwYXJhbSIsInJlc3QiLCJ0eSIsInR5MSIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInByZWMiLCJpY29udiIsImZjb252Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwiY291bnRlciIsImlnbiIsImYiLCJhcml0eSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxJQytnQlEsOEJBa0NZO0FBQUEsSUFsQ1o7QUFBQTtBQUFBLFdBQUFDLE9BQUEsVUFLSSwyQkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBTHBCLFVBT00sNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQVB0QixVQVNHLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FUbkIsVUFXSyw2QkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBWHJCLFVBZVMsNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWZ6QixVQWFLLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FickIsVUFpQkssNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWpCckIsVUFtQkksNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQW5CcEIsVUFBQUMsS0FBQTtBQUFBLE9BcUJlLGlDQUFjO0FBQUE7QUFBQSxXQUFBRCxTQXJCN0IsVUFBQUUsTUFBQTtBQUFBLE9BdUJ1Qix1Q0FBYztBQUFBO0FBQUEsV0FBQUYsU0F2QnJDLFVBeUJLLDhCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUF6QnJCLFVBMkJLLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUEzQnJCLFVBNkJHLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUE3Qm5CLFVBK0JNLCtCQUFnQjtBQUFBLG1CQUFBQSxVQS9CdEIsVUFpQ2Ms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QUEsT0F3RGUsa0RBQW9CO0FBQUE7QUFBQSxXQUFBbEIsVUF4RG5DLFNBOEJOLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUE5QmhCLFNBQUFtQixXQUFBLFNBQUFDLFlBQUE7QUFBQSxPQTZDdUIsMkRBQW9CO0FBQUE7QUFBQSxXQUFBcEIsVUE3QzNDLFNBQUFxQixVQUFBO0FBQUEsT0ErQ2MsK0NBQW9CO0FBQUE7QUFBQSxXQUFBckIsVUEvQ2xDLFNBaURFLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUFqRHhCLFNBQUFzQixNQUFBO0FBQUEsT0FtRE8sMkNBQW9CO0FBQUE7QUFBQSxXQUFBdEIsVUFuRDNCLFNBQUF1QixJQUFBLFNBQUFDLFFBQUE7QUFBQSxPQTRCSyxnREFBb0I7QUFBQTtBQUFBLEdBK0JsQztBQUFBLEdEanJCUiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjk0ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkbGliLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GOF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgaDEgOjogW10gLT4gaDEgOjogbDJcbiAgfCBoMSA6OiBoMiA6OiBbXSAtPiBoMSA6OiBoMiA6OiBsMlxuICB8IGgxIDo6IGgyIDo6IGgzIDo6IHRsIC0+IGgxIDo6IGgyIDo6IGgzIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxuKCogZm9yIGF0X2V4aXQgKilcbnR5cGUgJ2EgYXRvbWljX3RcbmV4dGVybmFsIGF0b21pY19tYWtlIDogJ2EgLT4gJ2EgYXRvbWljX3QgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCBhdG9taWNfZ2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgPSBcIiVhdG9taWNfbG9hZFwiXG5leHRlcm5hbCBhdG9taWNfY29tcGFyZV9hbmRfc2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgLT4gJ2EgLT4gYm9vbFxuICA9IFwiJWF0b21pY19jYXNcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IGF0b21pY19tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gYXRvbWljX21ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2RvbWFpbl9sb2NhbF9hdF9leGl0ID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgKCFkb19kb21haW5fbG9jYWxfYXRfZXhpdCkgKCk7XG4gIChhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICAgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICAgID0gQ29tcGxleFxubW9kdWxlIENvbmRpdGlvbiAgICAgID0gQ29uZGl0aW9uXG5tb2R1bGUgRGlnZXN0ICAgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBEb21haW4gICAgICAgICA9IERvbWFpblxubW9kdWxlIER5bmFycmF5ICAgICAgID0gRHluYXJyYXlcbm1vZHVsZSBFZmZlY3QgICAgICAgICA9IEVmZmVjdFxubW9kdWxlIEVpdGhlciAgICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgICA9IEdjXG5tb2R1bGUgSGFzaHRibCAgICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBNdXRleCAgICAgICAgICA9IE11dGV4XG5tb2R1bGUgTmF0aXZlaW50ICAgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICAgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQcmludGV4YyAgICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZW1hcGhvcmUgICAgICA9IFNlbWFwaG9yZVxubW9kdWxlIFNlcSAgICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJpbmcgICAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyAgID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgICAgPSBTeXNcbm1vZHVsZSBUeXBlICAgICAgICAgICA9IFR5cGVcbm1vZHVsZSBVY2hhciAgICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgICAgPSBXZWFrXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2NhcyIsImNhbWxfYXRvbWljX2xvYWQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9mbHVzaCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb25jYXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX29wZW4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiSW52YWxpZF9hcmd1bWVudCIsIkZhaWx1cmUiLCJNYXRjaF9mYWlsdXJlIiwiQXNzZXJ0X2ZhaWx1cmUiLCJOb3RfZm91bmQiLCJPdXRfb2ZfbWVtb3J5IiwiU3RhY2tfb3ZlcmZsb3ciLCJTeXNfZXJyb3IiLCJFbmRfb2ZfZmlsZSIsIkRpdmlzaW9uX2J5X3plcm8iLCJTeXNfYmxvY2tlZF9pbyIsIlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJFeGl0IiwibWluIiwieCIsInkiLCJtYXgiLCJhYnMiLCJsbm90IiwiY2hhcl9vZl9pbnQiLCJuIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsInBhcmFtIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwiZXhuIiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJzMSIsImwiLCJpIiwibWF0Y2giLCJzdHJpbmdfb2ZfZmxvYXQiLCJmbG9hdF9vZl9zdHJpbmdfb3B0Iiwic3ltYm9sIiwibDEiLCJsMiIsImgxIiwiaDIiLCJ0bCIsImgzIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsIm1vZGUiLCJwZXJtIiwibmFtZSIsImMiLCJvcGVuX291dCIsIm9wZW5fb3V0X2JpbiIsImZsdXNoX2FsbCIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsInYiLCJjbG9zZV9vdXQiLCJjbG9zZV9vdXRfbm9lcnIiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJvcGVuX2luX2JpbiIsImlucHV0IiwiaWMiLCJ1bnNhZmVfcmVhbGx5X2lucHV0IiwiciIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwicG9zIiwiaGQiLCJhY2N1IiwiYmVnIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN0ciIsInN0cjIiLCJmbXQyIiwic3RyMSIsImZtdDEiLCJzMiIsImV4aXRfZnVuY3Rpb24iLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4iLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19kb21haW5fbG9jYWxfYXRfZXhpdCIsImRvX2F0X2V4aXQiLCJleGl0IiwicmV0Y29kZSIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHFCQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJrQi9EIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6OTk1NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zeXMubWwuaW4iXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBAY29uZmlndXJlX2lucHV0QCAqKVxuIzMgXCJzeXMubWwuaW5cIlxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGJhY2tlbmRfdHlwZSA9XG4gIHwgTmF0aXZlXG4gIHwgQnl0ZWNvZGVcbiAgfCBPdGhlciBvZiBzdHJpbmdcbigqIFN5c3RlbSBpbnRlcmZhY2UgKilcblxuZXh0ZXJuYWwgZ2V0X2NvbmZpZzogdW5pdCAtPiBzdHJpbmcgKiBpbnQgKiBib29sID0gXCJjYW1sX3N5c19nZXRfY29uZmlnXCJcbmV4dGVybmFsIGdldF9leGVjdXRhYmxlX25hbWUgOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lXCJcbmV4dGVybmFsIGFyZ3YgOiBzdHJpbmcgYXJyYXkgPSBcIiVzeXNfYXJndlwiXG5leHRlcm5hbCBiaWdfZW5kaWFuIDogdW5pdCAtPiBib29sID0gXCIlYmlnX2VuZGlhblwiXG5leHRlcm5hbCB3b3JkX3NpemUgOiB1bml0IC0+IGludCA9IFwiJXdvcmRfc2l6ZVwiXG5leHRlcm5hbCBpbnRfc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlaW50X3NpemVcIlxuZXh0ZXJuYWwgbWF4X3dvc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlbWF4X3dvc2l6ZVwiXG5leHRlcm5hbCB1bml4IDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX3VuaXhcIlxuZXh0ZXJuYWwgd2luMzIgOiB1bml0IC0+IGJvb2wgPSBcIiVvc3R5cGVfd2luMzJcIlxuZXh0ZXJuYWwgY3lnd2luIDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX2N5Z3dpblwiXG5leHRlcm5hbCBnZXRfYmFja2VuZF90eXBlIDogdW5pdCAtPiBiYWNrZW5kX3R5cGUgPSBcIiViYWNrZW5kX3R5cGVcIlxuXG5sZXQgZXhlY3V0YWJsZV9uYW1lID0gZ2V0X2V4ZWN1dGFibGVfbmFtZSgpXG5sZXQgKG9zX3R5cGUsIF8sIF8pID0gZ2V0X2NvbmZpZygpXG5sZXQgYmFja2VuZF90eXBlID0gZ2V0X2JhY2tlbmRfdHlwZSAoKVxubGV0IGJpZ19lbmRpYW4gPSBiaWdfZW5kaWFuICgpXG5sZXQgd29yZF9zaXplID0gd29yZF9zaXplICgpXG5sZXQgaW50X3NpemUgPSBpbnRfc2l6ZSAoKVxubGV0IHVuaXggPSB1bml4ICgpXG5sZXQgd2luMzIgPSB3aW4zMiAoKVxubGV0IGN5Z3dpbiA9IGN5Z3dpbiAoKVxubGV0IG1heF9hcnJheV9sZW5ndGggPSBtYXhfd29zaXplICgpXG5sZXQgbWF4X2Zsb2F0YXJyYXlfbGVuZ3RoID0gbWF4X2FycmF5X2xlbmd0aCAvICg2NCAvIHdvcmRfc2l6ZSlcbmxldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMVxuZXh0ZXJuYWwgcnVudGltZV92YXJpYW50IDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfcnVudGltZV92YXJpYW50XCJcbmV4dGVybmFsIHJ1bnRpbWVfcGFyYW1ldGVycyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1wiXG5cbmV4dGVybmFsIGZpbGVfZXhpc3RzOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfZmlsZV9leGlzdHNcIlxuZXh0ZXJuYWwgaXNfZGlyZWN0b3J5IDogc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3lzX2lzX2RpcmVjdG9yeVwiXG5leHRlcm5hbCBpc19yZWd1bGFyX2ZpbGUgOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXCJcbmV4dGVybmFsIHJlbW92ZTogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbW92ZVwiXG5leHRlcm5hbCByZW5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbmFtZVwiXG5leHRlcm5hbCBnZXRlbnY6IHN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfc3lzX2dldGVudlwiXG5cbmxldCBnZXRlbnZfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChnZXRlbnYgcylcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5leHRlcm5hbCBjb21tYW5kOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFwiXG5leHRlcm5hbCB0aW1lOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9zeXNfdGltZVwiIFwiY2FtbF9zeXNfdGltZV91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGNoZGlyOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2hkaXJcIlxuZXh0ZXJuYWwgbWtkaXI6IHN0cmluZyAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfbWtkaXJcIlxuZXh0ZXJuYWwgcm1kaXI6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3N5c19ybWRpclwiXG5leHRlcm5hbCBnZXRjd2Q6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3N5c19nZXRjd2RcIlxuZXh0ZXJuYWwgcmVhZGRpciA6IHN0cmluZyAtPiBzdHJpbmcgYXJyYXkgPSBcImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XCJcblxubGV0IGludGVyYWN0aXZlID0gcmVmIGZhbHNlXG5cbnR5cGUgc2lnbmFsX2JlaGF2aW9yID1cbiAgICBTaWduYWxfZGVmYXVsdFxuICB8IFNpZ25hbF9pZ25vcmVcbiAgfCBTaWduYWxfaGFuZGxlIG9mIChpbnQgLT4gdW5pdClcblxuZXh0ZXJuYWwgc2lnbmFsIDogaW50IC0+IHNpZ25hbF9iZWhhdmlvciAtPiBzaWduYWxfYmVoYXZpb3JcbiAgICAgICAgICAgICAgICA9IFwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyXCJcblxubGV0IHNldF9zaWduYWwgc2lnX251bSBzaWdfYmVoID0gaWdub3JlKHNpZ25hbCBzaWdfbnVtIHNpZ19iZWgpXG5cbmxldCBzaWdhYnJ0ID0gLTFcbmxldCBzaWdhbHJtID0gLTJcbmxldCBzaWdmcGUgPSAtM1xubGV0IHNpZ2h1cCA9IC00XG5sZXQgc2lnaWxsID0gLTVcbmxldCBzaWdpbnQgPSAtNlxubGV0IHNpZ2tpbGwgPSAtN1xubGV0IHNpZ3BpcGUgPSAtOFxubGV0IHNpZ3F1aXQgPSAtOVxubGV0IHNpZ3NlZ3YgPSAtMTBcbmxldCBzaWd0ZXJtID0gLTExXG5sZXQgc2lndXNyMSA9IC0xMlxubGV0IHNpZ3VzcjIgPSAtMTNcbmxldCBzaWdjaGxkID0gLTE0XG5sZXQgc2lnY29udCA9IC0xNVxubGV0IHNpZ3N0b3AgPSAtMTZcbmxldCBzaWd0c3RwID0gLTE3XG5sZXQgc2lndHRpbiA9IC0xOFxubGV0IHNpZ3R0b3UgPSAtMTlcbmxldCBzaWd2dGFscm0gPSAtMjBcbmxldCBzaWdwcm9mID0gLTIxXG5sZXQgc2lnYnVzID0gLTIyXG5sZXQgc2lncG9sbCA9IC0yM1xubGV0IHNpZ3N5cyA9IC0yNFxubGV0IHNpZ3RyYXAgPSAtMjVcbmxldCBzaWd1cmcgPSAtMjZcbmxldCBzaWd4Y3B1ID0gLTI3XG5sZXQgc2lneGZzeiA9IC0yOFxuXG5leGNlcHRpb24gQnJlYWtcblxubGV0IGNhdGNoX2JyZWFrIG9uID1cbiAgaWYgb24gdGhlblxuICAgIHNldF9zaWduYWwgc2lnaW50IChTaWduYWxfaGFuZGxlKGZ1biBfIC0+IHJhaXNlIEJyZWFrKSlcbiAgZWxzZVxuICAgIHNldF9zaWduYWwgc2lnaW50IFNpZ25hbF9kZWZhdWx0XG5cblxuZXh0ZXJuYWwgZW5hYmxlX3J1bnRpbWVfd2FybmluZ3M6IGJvb2wgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1wiXG5leHRlcm5hbCBydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQ6IHVuaXQgLT4gYm9vbCA9XG4gIFwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcIlxuXG4oKiBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgZm91bmQgaW4gZmlsZSAuLi9WRVJTSU9OICopXG5cbmxldCBvY2FtbF92ZXJzaW9uID0gXCJAVkVSU0lPTkBcIlxuXG5sZXQgZGV2ZWxvcG1lbnRfdmVyc2lvbiA9IEBPQ0FNTF9ERVZFTE9QTUVOVF9WRVJTSU9OQFxuXG50eXBlIGV4dHJhX3ByZWZpeCA9IFBsdXMgfCBUaWxkZVxuXG50eXBlIGV4dHJhX2luZm8gPSBleHRyYV9wcmVmaXggKiBzdHJpbmdcblxudHlwZSBvY2FtbF9yZWxlYXNlX2luZm8gPSB7XG4gIG1ham9yIDogaW50O1xuICBtaW5vciA6IGludDtcbiAgcGF0Y2hsZXZlbCA6IGludDtcbiAgZXh0cmEgOiBleHRyYV9pbmZvIG9wdGlvblxufVxuXG5sZXQgb2NhbWxfcmVsZWFzZSA9IHtcbiAgbWFqb3IgPSBAT0NBTUxfVkVSU0lPTl9NQUpPUkA7XG4gIG1pbm9yID0gQE9DQU1MX1ZFUlNJT05fTUlOT1JAO1xuICBwYXRjaGxldmVsID0gQE9DQU1MX1ZFUlNJT05fUEFUQ0hMRVZFTEA7XG4gIGV4dHJhID0gQE9DQU1MX1JFTEVBU0VfRVhUUkFAXG59XG5cbigqIE9wdGltaXphdGlvbiAqKVxuXG5leHRlcm5hbCBvcGFxdWVfaWRlbnRpdHkgOiAnYSAtPiAnYSA9IFwiJW9wYXF1ZVwiXG5cbm1vZHVsZSBJbW1lZGlhdGU2NCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBOb25faW1tZWRpYXRlID0gc2lnXG4gICAgdHlwZSB0XG4gIGVuZFxuICBtb2R1bGUgdHlwZSBJbW1lZGlhdGUgPSBzaWdcbiAgICB0eXBlIHQgW0BAaW1tZWRpYXRlXVxuICBlbmRcblxuICBtb2R1bGUgTWFrZShJbW1lZGlhdGUgOiBJbW1lZGlhdGUpKE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlKSA9IHN0cnVjdFxuICAgIHR5cGUgdCBbQEBpbW1lZGlhdGU2NF1cbiAgICB0eXBlICdhIHJlcHIgPVxuICAgICAgfCBJbW1lZGlhdGUgOiBJbW1lZGlhdGUudCByZXByXG4gICAgICB8IE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlLnQgcmVwclxuICAgIGV4dGVybmFsIG1hZ2ljIDogXyByZXByIC0+IHQgcmVwciA9IFwiJWlkZW50aXR5XCJcbiAgICBsZXQgcmVwciA9XG4gICAgICBpZiB3b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIG1hZ2ljIEltbWVkaWF0ZVxuICAgICAgZWxzZVxuICAgICAgICBtYWdpYyBOb25faW1tZWRpYXRlXG4gIGVuZFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJTdGRsaWIiLCJleGVjdXRhYmxlX25hbWUiLCJvc190eXBlIiwidW5peCIsIndpbjMyIiwiY3lnd2luIiwibWF4X2FycmF5X2xlbmd0aCIsIm1heF9mbG9hdGFycmF5X2xlbmd0aCIsIm1heF9zdHJpbmdfbGVuZ3RoIiwiZ2V0ZW52X29wdCIsInMiLCJleG4iLCJzZXRfc2lnbmFsIiwic2lnX251bSIsInNpZ19iZWgiLCJCcmVhayIsImNhdGNoX2JyZWFrIiwib24iLCJNYWtlIiwiSW1tZWRpYXRlIiwiTm9uX2ltbWVkaWF0ZSIsIlN0ZGxpYl9TeXMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkNtQ3NCO0FBQUEsSUFBQUMsVUFDQTtBQUFBLElBQUFDLE9BQVk7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElBdUJoQyxZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQzRFg7QUFBQSwyQkM0RG9CO0FBQUEsS0Q1RHBCO0FBQUE7QUFBQSxHQzREd0I7QUFBQSxZQUFBQyxXQUFBQyxTQUFBQyxTQXFCdUM7QUFBQSxPQUFBQyxRQTdDN0I7QUFBQSxZQUFBQyxZQUFBQyxJQStFaEMsaUJBR2tDO0FBQUEsWUFBQUMsS0FBQUMsV0FBQUMsZUFzRDVCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQXhJMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwQ2xDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAwNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb2JqLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQzXG5cbmxldCBmb3JjaW5nX3RhZyA9IDI0NFxubGV0IGNvbnRfdGFnID0gMjQ1XG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCJcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX29ial90YWciLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TeXMiLCJpc19ibG9jayIsImEiLCJkb3VibGVfZmllbGQiLCJ4IiwiaSIsInNldF9kb3VibGVfZmllbGQiLCJ2Iiwib2ZfdmFsIiwic2xvdCIsImNzdF9PYmpfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwibmFtZSIsImlkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibCIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwiZSIsIm8iLCJtc2ciLCJnZXRfa2V5IiwiZ2V0X2tleV9jb3B5Iiwic2V0X2tleSIsInVuc2V0X2tleSIsImNoZWNrX2tleSIsImJsaXRfa2V5IiwiZTEiLCJvMSIsImUyIiwibzIiLCJTdGRsaWJfT2JqIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLFNBQUFDLEdDeUJrQyxtQ0FBYztBQUFBLFlBQUFDLGFBQUFDLEdBQUFDLEdBU1Isb0NBQXFDO0FBQUEsWUFBQUMsaUJBQUFGLEdBQUFDLEdBQUFFO0FBQUFBLElBRTNFO0FBQUEsSUFBdUM7QUFBQTtBQUFBLFlBQUFDLE9BQUFKO0FBQUFBO0FBQUFBLEtBQUFLO0FBQUFBLE9Bd0NoQztBQUFBLFVBQWdCO0FBQUE7QUFBQSxLQUFBQyxnQ0Q1RXpCO0FBQUE7QUFBQTtBQUFBLEtDZ0ZTLHFCQUFtQixnQ0FBQUMsT0FBeUM7QUFBQSxTQUFBQSxPQUMxRDtBQUFBO0FBQUEsSUFFRjtBQUFBO0FBQUEsY0FDRSxtREFBdUM7QUFBQTtBQUFBLFlBQUFBLEtBQUFGLE1BR3BCO0FBQUEsWUFBQUcsR0FBQUgsTUFHQTtBQUFBLE9BQUFJLGtCRDFGOUI7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBLElDd0dJO0FBQUEsY0FDRTtBQUFBLElBQ0Ysa0NBQVE7QUFBQTtBQUFBLFlBQUFDLE9BQUFaLEdBRUssd0JBQWdDO0FBQUEsWUFBQWEsd0JBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFHN0Msb0JBQXNCLG1CQUF0QjtBQUFBLGVBQ0UsNkJBQWU7QUFBQTtBQUFBLFlBQUFDLFFBQUFILEdBQUFDO0FBQUFBLElBSWpCO0FBQUEsSUFDQSxzQ0FBVztBQUFBO0FBQUEsWUFBQUcsYUFBQUosR0FBQUM7QUFBQUEsSUFJWDtBQUFBLElBQ0EsMkNBQWdCO0FBQUE7QUFBQSxZQUFBSSxRQUFBTCxHQUFBQyxHQUFBZjtBQUFBQSxJQUloQjtBQUFBLElBQ0EseUNBQWE7QUFBQTtBQUFBLFlBQUFvQixVQUFBTixHQUFBQztBQUFBQSxJQUliO0FBQUEsSUFDQSx3Q0FBYTtBQUFBO0FBQUEsWUFBQU0sVUFBQVAsR0FBQUM7QUFBQUEsSUFJYjtBQUFBLElBQ0Esd0NBQWE7QUFBQTtBQUFBLFlBQUFPLFNBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFmO0FBQUFBLElBTWI7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQix5Q0FDTjtBQUFBO0FBQUEsVUFFaEI7QUFBQSxjQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsSUFEQSxxREFDcUM7QUFBQTtBQUFBO0FBQUEsSUFBQWdCO0FBQUFBLE1EbEo5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMTcyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2F0b21pYy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICBTdGVwaGVuIERvbGFuLCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTctMjAxOCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBtYWtlIDogJ2EgLT4gJ2EgdCA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsIG1ha2VfY29udGVuZGVkIDogJ2EgLT4gJ2EgdCA9IFwiY2FtbF9hdG9taWNfbWFrZV9jb250ZW5kZWRcIlxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiAnYSA9IFwiJWF0b21pY19sb2FkXCJcbmV4dGVybmFsIGV4Y2hhbmdlIDogJ2EgdCAtPiAnYSAtPiAnYSA9IFwiJWF0b21pY19leGNoYW5nZVwiXG5leHRlcm5hbCBjb21wYXJlX2FuZF9zZXQgOiAnYSB0IC0+ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVhdG9taWNfY2FzXCJcbmV4dGVybmFsIGZldGNoX2FuZF9hZGQgOiBpbnQgdCAtPiBpbnQgLT4gaW50ID0gXCIlYXRvbWljX2ZldGNoX2FkZFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxubGV0IHNldCByIHggPSBpZ25vcmUgKGV4Y2hhbmdlIHIgeClcbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2V4Y2hhbmdlIiwiY2FtbF9hdG9taWNfZmV0Y2hfYWRkIiwic2V0IiwiciIsIngiLCJpbmNyIiwiZGVjciIsIlN0ZGxpYl9BdG9taWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDd0JjLHFDQUFxQjtBQUFBLFlBQUFDLEtBQUFGLEdBQ3RCLHNDQUEwQjtBQUFBLFlBQUFHLEtBQUFILEdBQzFCLHVDQUE2QjtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUQxQjFDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAyMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbigqIFt1cGRhdGVfdG9fZm9yY2luZyBibGtdIHRyaWVzIHRvIHVwZGF0ZSBhIFtibGtdIHdpdGggW2xhenlfdGFnXSB0b1xuICAgW2ZvcmNpbmdfdGFnXSB1c2luZyBjb21wYXJlLWFuZC1zd2FwIChDQVMpLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGUgaGVhZGVyIHdvcmQgYnkgYSBjb25jdXJyZW50IEdDIHRocmVhZC4gUmV0dXJucyBbMF0gaWYgdGhlXG4gICBDQVMgaXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIENBUyBmYWlscywgdGhlbiB0aGUgdGFnIHdhcyBvYnNlcnZlZCB0byBiZVxuICAgc29tZXRoaW5nIG90aGVyIHRoYW4gW2xhenlfdGFnXSBkdWUgdG8gYSBjb25jdXJyZW50IG11dGF0b3IuIEluIHRoaXMgY2FzZSxcbiAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIFsxXS4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3JjaW5nIDogT2JqLnQgLT4gaW50ID1cbiAgXCJjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcIiBbQEBub2FsbG9jXVxuXG4oKiBbcmVzZXRfdG9fbGF6eSBibGtdIGV4cGVjdHMgW2Jsa10gdG8gYmUgYSBsYXp5IG9iamVjdCB3aXRoIFtPYmouZm9yY2luZ190YWddXG4gICBhbmQgdXBkYXRlcyB0aGUgdGFnIHRvIFtPYmoubGF6eV90YWddLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGlzIG9iamVjdCdzIGhlYWRlciBieSBhIGNvbmN1cnJlbnQgR0MgdGhyZWFkLiAqKVxuZXh0ZXJuYWwgcmVzZXRfdG9fbGF6eSA6IE9iai50IC0+IHVuaXQgPSBcImNhbWxfbGF6eV9yZXNldF90b19sYXp5XCIgW0BAbm9hbGxvY11cblxuKCogW3VwZGF0ZV90b19mb3J3YXJkIGJsa10gZXhwZWN0cyBbYmxrXSB0byBiZSBhIGxhenkgb2JqZWN0IHdpdGhcbiAgIFtPYmouZm9yY2luZ190YWddIGFuZCB1cGRhdGVzIHRoZSB0YWcgdG8gW09iai5mb3J3YXJkX3RhZ10sIHRha2luZyBjYXJlIHRvXG4gICBoYW5kbGUgY29uY3VycmVudCBtYXJraW5nIG9mIHRoaXMgb2JqZWN0J3MgaGVhZGVyIGJ5IGEgY29uY3VycmVudCBHQyB0aHJlYWQuXG4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3J3YXJkIDogT2JqLnQgLT4gdW5pdCA9XG4gIFwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXCIgW0BAbm9hbGxvY11cblxuKCogQXNzdW1lcyBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGZvcmNpbmcgKilcbmxldCBkb19mb3JjZV9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciByZXN1bHQpO1xuICAgIHVwZGF0ZV90b19mb3J3YXJkIGI7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByZXNldF90b19sYXp5IGI7XG4gICAgcmFpc2UgZVxuXG4oKiBBc3N1bWVzIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgZm9yY2luZyAqKVxubGV0IGRvX2ZvcmNlX3ZhbF9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBPYmouc2V0X2ZpZWxkIGIgMCAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgdXBkYXRlX3RvX2ZvcndhcmQgYjtcbiAgcmVzdWx0XG5cbigqIENhbGxlZCBieSBbZm9yY2VfZ2VuXSAqKVxubGV0IGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgKCogV2UgZXhwZWN0IHRoZSB0YWcgdG8gYmUgW2xhenlfdGFnXSwgYnV0IG1heSBiZSBvdGhlciB0YWdzIGR1ZSB0b1xuICAgICBjb25jdXJyZW50IGZvcmNpbmcgb2YgbGF6eSB2YWx1ZXMuICopXG4gIG1hdGNoIHVwZGF0ZV90b19mb3JjaW5nIChPYmoucmVwciBibGspIHdpdGhcbiAgfCAwIHdoZW4gb25seV92YWwgLT4gZG9fZm9yY2VfdmFsX2Jsb2NrIGJsa1xuICB8IDAgLT4gZG9fZm9yY2VfYmxvY2sgYmxrXG4gIHwgXyAtPiByYWlzZSBVbmRlZmluZWRcblxuKCogdXNlZCBpbiB0aGUgJWxhenlfZm9yY2UgcHJpbWl0aXZlICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayBibGsgPSBmb3JjZV9nZW5fbGF6eV9ibG9jayB+b25seV92YWw6ZmFsc2UgYmxrXG5cbigqIFtmb3JjZV9nZW4gfm9ubHlfdmFsOmZhbHNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzXG4gICBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZSB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHNcbiAgIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmwgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcbmxldCBmb3JjZV9nZW4gfm9ubHlfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdCBjb3VsZCBoYXZlIGJlZW5cbiAgICAgICBzaG9ydGN1dCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgaGVyZSBhdCB0aGUgbW9tZW50IHNpbmNlXG4gICAgICAgW09iai50YWddIGlzIG5vdCBzaW1wbGlmaWVkIGJ5IHRoZSBjb21waWxlciwgYW5kIEdQUiM3MTMgYWxzb1xuICAgICAgIGVuc3VyZXMgdGhhdCBubyB2YWx1ZSB3aWxsIGJlIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcuXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICAoKiBTVEFSVCBubyBzYWZlIHBvaW50cy4gSWYgYSBHQyBvY2N1cnMgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IFt4XSBtYXkgYmVcbiAgICAgc2hvcnQtY2lyY3VpdGVkLCBhbmQgZ2V0dGluZyB0aGUgZmlyc3QgZmllbGQgb2YgW3hdIHdvdWxkIGdldCB1cyB0aGUgd3JvbmdcbiAgICAgdmFsdWUuIEx1Y2tpbHksIHRoZSBjb21waWxlciBkb2VzIG5vdCBpbnNlcnQgR0Mgc2FmZSBwb2ludHMgYXQgdGhpcyBwbGFjZSxcbiAgICAgc28gaXQgaXMgb2suICopXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlblxuICAgIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpXG4gICgqIEVORCBubyBzYWZlIHBvaW50cyAqKVxuICBlbHNlIGlmIHQgPSBPYmouZm9yY2luZ190YWcgdGhlbiByYWlzZSBVbmRlZmluZWRcbiAgZWxzZSBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCBsenZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWJfT2JqIiwiVW5kZWZpbmVkIiwiZm9yY2VfZ2VuX2xhenlfYmxvY2siLCJvbmx5X3ZhbCIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJlIiwicGFyYW0iLCJmb3JjZV9sYXp5X2Jsb2NrIiwiZm9yY2VfZ2VuIiwibHp2IiwidCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxVQUFBQztBQUFBQSxJQ3VFUTtBQUFBLEtBR0M7QUFBQSxJQUZFO0FBQUEsU0FBQUMsWUFaYztBQUFBLEtBQ3ZCO0FBQUEsU0FBQUMsV0FDYTtBQUFBLEtBQ2I7QUFBQSxLQUNBO0FBQUEsS0FBbUI7QUFBQTtBQUFBLFFBQUFELFVBbkJJO0FBQUEsSUFDdkI7QUFBQSxJQUErQjtBQUFBLFNBQUFDLFNBRWhCO0FBQUEsS0FDYjtBQUFBLEtBQ0E7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSURsREo7QUFBQSxLQ3FESSxrQkFBQUMsT0FBdUMsd0NBQU87QUFBQSxLQUM5QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBb0JLO0FBQUEsWUFBQUMsaUJBQUFMLEtBR0csbUNBQXdDO0FBQUEsWUFBQU0sVUFBQVAsVUFBQVE7QUFBQUEsUUFBQUMsSUFxQnpEO0FBQUEsSUFDUix5QkFDMEI7QUFBQSxJQUVyQix3QkFBNEI7QUFBQSxJQUM1QixtQ0FDQSxtQ0FBa0M7QUFBQTtBQUFBLEdEeEd6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMjU4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2xhenkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5sZXQgZm9yY2VfdmFsIGwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX2dlbiB+b25seV92YWw6dHJ1ZSBsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8XG4gICAgIHQgPSBPYmouZm9yY2luZ190YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX29ial90YWciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJDYW1saW50ZXJuYWxMYXp5IiwiU3RkbGliX09iaiIsIlVuZGVmaW5lZCIsImZvcmNlX3ZhbCIsImwiLCJmcm9tX2Z1biIsIngiLCJmcm9tX3ZhbCIsInYiLCJ0IiwiaXNfdmFsIiwibWFwIiwicGFyYW0iLCJtYXBfdmFsIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSx5QkFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsVUFBQUMsR0N1RGtCLDJDQUEyQztBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFTLElBR25EO0FBQUEsSUFDUjtBQUFBLElBQThCO0FBQUEsR0FDVjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLElBR1o7QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBLEtBSUc7QUFBQSxJQUgrQyx3Q0FJL0M7QUFBQTtBQUFBLFlBQUFDLE9BQUFOO0FBQUFBLFFBQUEsSUFFcUI7QUFBQSx3Q0FBb0I7QUFBQSxHQUFnQjtBQUFBLFlBQUFPLElBQUFkLEdBQUFTO0FBQUFBLElBRzVEO0FBQUEscUJBQUFNO0FBQUFBLGlCQUFBLElEMUVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNDMEVFO0FBQUEsR0FBa0I7QUFBQSxZQUFBQyxRQUFBaEIsR0FBQVM7QUFBQUEsSUFHZjtBQUFBLEtBRUU7QUFBQSxzQkFBQU07QUFBQUEsa0JBQUEsSUQvRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUMrRU87QUFBQSxZQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFTLE9BQWEsU0FBYixpQkFDUztBQUFBO0FBQUEsR0QvRXpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAzMzksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc2VxLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgZmluZF9pbmRleCBwIHhzID1cbiAgbGV0IHJlYyBhdXggaSB4cyA9IG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5vbmVcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBpZiBwIHggdGhlbiBTb21lIGkgZWxzZSBhdXggKGkrMSkgeHMgaW5cbiAgYXV4IDAgeHNcblxubGV0IHJlYyBmaW5kX21hcCBmIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOb25lXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgZmluZF9tYXAgZiB4c1xuICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+XG4gICAgICAgICAgcmVzdWx0XG5cbmxldCBmaW5kX21hcGkgZiB4cyA9XG4gIGxldCByZWMgYXV4IGkgeHMgPSBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGF1eCAoaSsxKSB4c1xuICAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICAgIHJlc3VsdCBpblxuICBhdXggMCB4c1xuXG4oKiBbaXRlcjJdLCBbZm9sZF9sZWZ0Ml0sIFtmb3JfYWxsMl0sIFtleGlzdHMyXSwgW21hcDJdLCBbemlwXSB3b3JrIGFsc28gaW5cbiAgIHRoZSBjYXNlIHdoZXJlIHRoZSB0d28gc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMuIFRoZXkgc3RvcCBhcyBzb29uXG4gICBhcyBvbmUgc2VxdWVuY2UgaXMgZXhoYXVzdGVkLiBUaGVpciBiZWhhdmlvciBpcyBzbGlnaHRseSBhc3ltbWV0cmljOiB3aGVuXG4gICBbeHNdIGlzIGVtcHR5LCB0aGV5IGRvIG5vdCBmb3JjZSBbeXNdOyBob3dldmVyLCB3aGVuIFt5c10gaXMgZW1wdHksIFt4c10gaXNcbiAgIGZvcmNlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gYXBwbGljYXRpb24gW3hzKCldIHR1cm5zIG91dFxuICAgdG8gYmUgdXNlbGVzcy4gKilcblxubGV0IHJlYyBpdGVyMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICAoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgpXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5O1xuICAgICAgICAgIGl0ZXIyIGYgeHMgeXNcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgYWNjdVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGFjY3VcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgeCB5IGluXG4gICAgICAgICAgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXNcblxubGV0IHJlYyBmb3JfYWxsMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSAmJiBmb3JfYWxsMiBmIHhzIHlzXG5cbmxldCByZWMgZXhpc3RzMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBmYWxzZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5IHx8IGV4aXN0czIgZiB4cyB5c1xuXG5sZXQgcmVjIGVxdWFsIGVxIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgZXEgeCB5ICYmIGVxdWFsIGVxIHhzIHlzXG4gIHwgTmlsLCBDb25zIChfLCBfKVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgIGZhbHNlXG5cbmxldCByZWMgY29tcGFyZSBjbXAgeHMgeXMgPVxuICBtYXRjaCB4cygpLCB5cygpIHdpdGhcbiAgfCBOaWwsIE5pbCAtPlxuICAgICAgMFxuICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4IHkgaW5cbiAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZSBjb21wYXJlIGNtcCB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXykgLT5cbiAgICAgIC0xXG4gIHwgQ29ucyAoXywgXyksIE5pbCAtPlxuICAgICAgKzFcblxuXG5cbigqIFtpbml0X2F1eCBmIGkgal0gaXMgdGhlIHNlcXVlbmNlIFtmIGksIC4uLiwgZiAoai0xKV0uICopXG5cbmxldCByZWMgaW5pdF9hdXggZiBpIGogKCkgPVxuICBpZiBpIDwgaiB0aGVuIGJlZ2luXG4gICAgQ29ucyAoZiBpLCBpbml0X2F1eCBmIChpICsgMSkgailcbiAgZW5kXG4gIGVsc2VcbiAgICBOaWxcblxubGV0IGluaXQgbiBmID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU2VxLmluaXRcIlxuICBlbHNlXG4gICAgaW5pdF9hdXggZiAwIG5cblxubGV0IHJlYyByZXBlYXQgeCAoKSA9XG4gIENvbnMgKHgsIHJlcGVhdCB4KVxuXG5sZXQgcmVjIGZvcmV2ZXIgZiAoKSA9XG4gIENvbnMgKGYoKSwgZm9yZXZlciBmKVxuXG4oKiBUaGlzIHByZWxpbWluYXJ5IGRlZmluaXRpb24gb2YgW2N5Y2xlXSByZXF1aXJlcyB0aGUgc2VxdWVuY2UgW3hzXVxuICAgdG8gYmUgbm9uZW1wdHkuIEFwcGx5aW5nIGl0IHRvIGFuIGVtcHR5IHNlcXVlbmNlIHdvdWxkIHByb2R1Y2UgYVxuICAgc2VxdWVuY2UgdGhhdCBkaXZlcmdlcyB3aGVuIGl0IGlzIGZvcmNlZC4gKilcblxubGV0IHJlYyBjeWNsZV9ub25lbXB0eSB4cyAoKSA9XG4gIGFwcGVuZCB4cyAoY3ljbGVfbm9uZW1wdHkgeHMpICgpXG5cbigqIFtjeWNsZSB4c10gY2hlY2tzIHdoZXRoZXIgW3hzXSBpcyBlbXB0eSBhbmQsIGlmIHNvLCByZXR1cm5zIGFuIGVtcHR5XG4gICBzZXF1ZW5jZS4gT3RoZXJ3aXNlLCBbY3ljbGUgeHNdIHByb2R1Y2VzIG9uZSBjb3B5IG9mIFt4c10gZm9sbG93ZWRcbiAgIHdpdGggdGhlIGluZmluaXRlIHNlcXVlbmNlIFtjeWNsZV9ub25lbXB0eSB4c10uIFRodXMsIHRoZSBub25lbXB0aW5lc3NcbiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBqdXN0IG9uY2UuICopXG5cbmxldCBjeWNsZSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMnKSAtPlxuICAgICAgQ29ucyAoeCwgYXBwZW5kIHhzJyAoY3ljbGVfbm9uZW1wdHkgeHMpKVxuXG4oKiBbaXRlcmF0ZTEgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW2YgeCwgZiAoZiB4KSwgLi4uXS5cbiAgIEl0IGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKGl0ZXJhdGUgZiB4KV0uXG4gICBbaXRlcmF0ZTFdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0uICopXG5cbmxldCByZWMgaXRlcmF0ZTEgZiB4ICgpID1cbiAgbGV0IHkgPSBmIHggaW5cbiAgQ29ucyAoeSwgaXRlcmF0ZTEgZiB5KVxuXG4oKiBbaXRlcmF0ZSBmIHhdIGlzIHRoZSBzZXF1ZW5jZSBbeCwgZiB4LCAuLi5dLiAqKVxuXG4oKiBUaGUgcmVhc29uIHdoeSB3ZSBnaXZlIHRoaXMgc2xpZ2h0bHkgaW5kaXJlY3QgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0sXG4gICBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIG5haXZlIGRlZmluaXRpb24gdGhhdCBtYXkgY29tZSB0byBtaW5kLCBpcyB0aGF0XG4gICB3ZSBhcmUgY2FyZWZ1bCB0byBhdm9pZCBldmFsdWF0aW5nIFtmIHhdIHVudGlsIHRoaXMgZnVuY3Rpb24gY2FsbCBpc1xuICAgYWN0dWFsbHkgbmVjZXNzYXJ5LiBUaGUgbmFpdmUgZGVmaW5pdGlvbiAobm90IHNob3duIGhlcmUpIGNvbXB1dGVzIHRoZVxuICAgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBzZXF1ZW5jZSwgW2YgeF0sIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzXG4gICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICopXG5cbmxldCBpdGVyYXRlIGYgeCA9XG4gIGNvbnMgeCAoaXRlcmF0ZTEgZiB4KVxuXG5cblxubGV0IHJlYyBtYXBpX2F1eCBmIGkgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoZiBpIHgsIG1hcGlfYXV4IGYgKGkrMSkgeHMpXG5cbmxldFtAaW5saW5lXSBtYXBpIGYgeHMgPVxuICBtYXBpX2F1eCBmIDAgeHNcblxuKCogW3RhaWxfc2NhbiBmIHMgeHNdIGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKHNjYW4gZiBzIHhzKV0uXG4gICBbdGFpbF9zY2FuXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW3NjYW5dLiAqKVxuXG4oKiBUaGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW3NjYW5dIGlzIG1lYW50IHRvIGF2b2lkIGNvbXB1dGluZ1xuICAgZWxlbWVudHMgdG9vIGVhcmx5OyBzZWUgdGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgW2l0ZXJhdGUxXSBhbmQgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIHRhaWxfc2NhbiBmIHMgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbGV0IHMgPSBmIHMgeCBpblxuICAgICAgQ29ucyAocywgdGFpbF9zY2FuIGYgcyB4cylcblxubGV0IHNjYW4gZiBzIHhzID1cbiAgY29ucyBzICh0YWlsX3NjYW4gZiBzIHhzKVxuXG4oKiBbdGFrZV0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW3Rha2UgMCB4c10gcmV0dXJucyBbZW1wdHldXG4gICBpbW1lZGlhdGVseSwgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCByZWMgdGFrZV9hdXggbiB4cyA9XG4gIGlmIG4gPSAwIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgIENvbnMgKHgsIHRha2VfYXV4IChuLTEpIHhzKVxuXG5sZXQgdGFrZSBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS50YWtlXCI7XG4gIHRha2VfYXV4IG4geHNcblxuKCogW2ZvcmNlX2Ryb3AgbiB4c10gaXMgZXF1aXZhbGVudCB0byBbZHJvcCBuIHhzICgpXS5cbiAgIFtmb3JjZV9kcm9wIG4geHNdIHJlcXVpcmVzIFtuID4gMF0uXG4gICBbZm9yY2VfZHJvcF0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtkcm9wXS4gKilcblxubGV0IHJlYyBmb3JjZV9kcm9wIG4geHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKF8sIHhzKSAtPlxuICAgICAgbGV0IG4gPSBuIC0gMSBpblxuICAgICAgaWYgbiA9IDAgdGhlblxuICAgICAgICB4cygpXG4gICAgICBlbHNlXG4gICAgICAgIGZvcmNlX2Ryb3AgbiB4c1xuXG4oKiBbZHJvcF0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW2Ryb3AgMCB4c10gcmV0dXJucyBbeHNdIGltbWVkaWF0ZWx5LFxuICAgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCBkcm9wIG4geHMgPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiU2VxLmRyb3BcIlxuICBlbHNlIGlmIG4gPSAwIHRoZW5cbiAgICB4c1xuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBmb3JjZV9kcm9wIG4geHNcblxubGV0IHJlYyB0YWtlX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgaWYgcCB4IHRoZW4gQ29ucyAoeCwgdGFrZV93aGlsZSBwIHhzKSBlbHNlIE5pbFxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIGFzIG5vZGUgLT5cbiAgICAgIGlmIHAgeCB0aGVuIGRyb3Bfd2hpbGUgcCB4cyAoKSBlbHNlIG5vZGVcblxubGV0IHJlYyBncm91cCBlcSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBDb25zIChjb25zIHggKHRha2Vfd2hpbGUgKGVxIHgpIHhzKSwgZ3JvdXAgZXEgKGRyb3Bfd2hpbGUgKGVxIHgpIHhzKSlcblxuZXhjZXB0aW9uIEZvcmNlZF90d2ljZVxuXG5tb2R1bGUgU3VzcGVuc2lvbiA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egc3VzcGVuc2lvbiA9XG4gICAgdW5pdCAtPiAnYVxuXG4gICgqIENvbnZlcnNpb25zLiAqKVxuXG4gIGxldCB0b19sYXp5IDogJ2Egc3VzcGVuc2lvbiAtPiAnYSBMYXp5LnQgPVxuICAgIExhenkuZnJvbV9mdW5cbiAgICAoKiBmdW4gcyAtPiBsYXp5IChzKCkpICopXG5cbiAgbGV0IGZyb21fbGF6eSAocyA6ICdhIExhenkudCkgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmdW4gKCkgLT4gTGF6eS5mb3JjZSBzXG5cbiAgKCogW21lbW9pemVdIHR1cm5zIGFuIGFyYml0cmFyeSBzdXNwZW5zaW9uIGludG8gYSBwZXJzaXN0ZW50IHN1c3BlbnNpb24uICopXG5cbiAgbGV0IG1lbW9pemUgKHMgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGZyb21fbGF6eSAodG9fbGF6eSBzKVxuXG4gICgqIFtmYWlsdXJlXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBmYWlscyB3aGVuIGZvcmNlZC4gKilcblxuICBsZXQgZmFpbHVyZSA6IF8gc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBBIHN1c3BlbnNpb24gY3JlYXRlZCBieSBbb25jZV0gaGFzIGJlZW4gZm9yY2VkIHR3aWNlLiAqKVxuICAgICAgcmFpc2UgRm9yY2VkX3R3aWNlXG5cbiAgKCogSWYgW2ZdIGlzIGEgc3VzcGVuc2lvbiwgdGhlbiBbb25jZSBmXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBjYW4gYmUgZm9yY2VkXG4gICAgIGF0IG1vc3Qgb25jZS4gSWYgaXQgaXMgZm9yY2VkIG1vcmUgdGhhbiBvbmNlLCB0aGVuIFtGb3JjZWRfdHdpY2VdIGlzXG4gICAgIHJhaXNlZC4gKilcblxuICBsZXQgb25jZSAoZiA6ICdhIHN1c3BlbnNpb24pIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgbGV0IGFjdGlvbiA9IEF0b21pYy5tYWtlIGYgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgICgqIEdldCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IHN0b3JlZCBpbiBbYWN0aW9uXSwgYW5kIHdyaXRlIHRoZVxuICAgICAgICAgZnVuY3Rpb24gW2ZhaWx1cmVdIGluIGl0cyBwbGFjZSwgc28gdGhlIG5leHQgYWNjZXNzIHdpbGwgcmVzdWx0XG4gICAgICAgICBpbiBhIGNhbGwgdG8gW2ZhaWx1cmUoKV0uICopXG4gICAgICBsZXQgZiA9IEF0b21pYy5leGNoYW5nZSBhY3Rpb24gZmFpbHVyZSBpblxuICAgICAgZigpXG5cbmVuZCAoKiBTdXNwZW5zaW9uICopXG5cbmxldCByZWMgbWVtb2l6ZSB4cyA9XG4gIFN1c3BlbnNpb24ubWVtb2l6ZSAoZnVuICgpIC0+XG4gICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgQ29ucyAoeCwgbWVtb2l6ZSB4cylcbiAgKVxuXG5sZXQgcmVjIG9uY2UgeHMgPVxuICBTdXNwZW5zaW9uLm9uY2UgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG9uY2UgeHMpXG4gIClcblxuXG5sZXQgcmVjIHppcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKCh4LCB5KSwgemlwIHhzIHlzKVxuXG5sZXQgcmVjIG1hcDIgZiB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKGYgeCB5LCBtYXAyIGYgeHMgeXMpXG5cbmxldCByZWMgaW50ZXJsZWF2ZSB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgeXMoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoeCwgaW50ZXJsZWF2ZSB5cyB4cylcblxuKCogW3NvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIChjb25zIHggeHMpIHlzXS5cblxuICAgW3NvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIHhzIChjb25zIHkgeXMpXS5cblxuICAgW3NvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSAoY29ucyB5IHlzKV0uXG5cbiAgIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBidWlsZGluZyBibG9ja3MgaW4gdGhlIGRlZmluaXRpb25cbiAgIG9mIFtzb3J0ZWRfbWVyZ2VdLiAqKVxuXG5sZXQgcmVjIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzICgpID1cbiAgbWF0Y2ggeXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh4LCB4cylcbiAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMXIgY21wIHhzIHkgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIENvbnMgKHksIHlzKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzXG5cbmFuZCBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXMgPVxuICBpZiBjbXAgeCB5IDw9IDAgdGhlblxuICAgIENvbnMgKHgsIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzKVxuICBlbHNlXG4gICAgQ29ucyAoeSwgc29ydGVkX21lcmdlMWwgY21wIHggeHMgeXMpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgY21wIHhzIHlzICgpID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IE5pbCwgY1xuICAgIHwgYywgTmlsIC0+XG4gICAgICAgIGNcbiAgICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5cbmxldCByZWMgbWFwX2ZzdCB4eXMgKCkgPVxuICBtYXRjaCB4eXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICgoeCwgXyksIHh5cykgLT5cbiAgICAgIENvbnMgKHgsIG1hcF9mc3QgeHlzKVxuXG5sZXQgcmVjIG1hcF9zbmQgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKF8sIHkpLCB4eXMpIC0+XG4gICAgICBDb25zICh5LCBtYXBfc25kIHh5cylcblxubGV0IHVuemlwIHh5cyA9XG4gIG1hcF9mc3QgeHlzLCBtYXBfc25kIHh5c1xuXG5sZXQgc3BsaXQgPVxuICB1bnppcFxuXG4oKiBbZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgIFtmaWx0ZXJfbWFwIEVpdGhlci5maW5kX2xlZnQgKG1hcCBmIHhzKV0uICopXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRWl0aGVyLkxlZnQgeSAtPlxuICAgICAgICAgIENvbnMgKHksIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzKVxuICAgICAgfCBFaXRoZXIuUmlnaHQgXyAtPlxuICAgICAgICAgIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMgKClcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IHogLT5cbiAgICAgICAgICBDb25zICh6LCBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMpXG5cbmxldCBwYXJ0aXRpb25fbWFwIGYgeHMgPVxuICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyxcbiAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzXG5cbmxldCBwYXJ0aXRpb24gcCB4cyA9XG4gIGZpbHRlciBwIHhzLCBmaWx0ZXIgKGZ1biB4IC0+IG5vdCAocCB4KSkgeHNcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW3BlZWwgeHNzXSBpcyBhIHBhaXIgb2ZcbiAgIHRoZSBmaXJzdCBjb2x1bW4gKGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMpIGFuZCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZVxuICAgbWF0cml4IChhIHNlcXVlbmNlIG9mIHNob3J0ZXIgcm93cykuIFRoZXNlIHR3byBzZXF1ZW5jZXMgaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBUaGUgcm93cyBvZiB0aGUgbWF0cml4IFt4c3NdIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBBbiBlbXB0eSByb3cgaXMgaWdub3JlZC4gKilcblxuKCogQmVjYXVzZSBbcGVlbF0gdXNlcyBbdW56aXBdLCBpdHMgYXJndW1lbnQgbXVzdCBiZSBwZXJzaXN0ZW50LiBUaGUgc2FtZVxuICAgcmVtYXJrIGFwcGxpZXMgdG8gW3RyYW5zcG9zZV0sIFtkaWFnb25hbHNdLCBbcHJvZHVjdF0sIGV0Yy4gKilcblxubGV0IHBlZWwgeHNzID1cbiAgdW56aXAgKGZpbHRlcl9tYXAgdW5jb25zIHhzcylcblxubGV0IHJlYyB0cmFuc3Bvc2UgeHNzICgpID1cbiAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgeHNzIGluXG4gIGlmIGlzX2VtcHR5IGhlYWRzIHRoZW4gYmVnaW5cbiAgICBhc3NlcnQgKGlzX2VtcHR5IHRhaWxzKTtcbiAgICBOaWxcbiAgZW5kXG4gIGVsc2VcbiAgICBDb25zIChoZWFkcywgdHJhbnNwb3NlIHRhaWxzKVxuXG4oKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gW2RpYWdvbmFsc10gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsIFtyZW1haW5kZXJzXSxcbiAgIHdoaWNoIGNvbnRhaW5zIHRoZSByZW1haW5kZXJzIG9mIHRoZSByb3dzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAgIGRpc2NvdmVyZWQuICopXG5cbmxldCByZWMgZGlhZ29uYWxzIHJlbWFpbmRlcnMgeHNzICgpID1cbiAgbWF0Y2ggeHNzKCkgd2l0aFxuICB8IENvbnMgKHhzLCB4c3MpIC0+XG4gICAgICBiZWdpbiBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgbm9uZW1wdHkgcm93IFt4IDo6IHhzXS4gVGh1cywgdGhlIG5leHQgZGlhZ29uYWxcbiAgICAgICAgICAgICBpcyBbeCA6OiBoZWFkc106IHRoaXMgZGlhZ29uYWwgYmVnaW5zIHdpdGggW3hdIGFuZCBjb250aW51ZXMgd2l0aFxuICAgICAgICAgICAgIHRoZSBmaXJzdCBlbGVtZW50IG9mIGV2ZXJ5IHJvdyBpbiBbcmVtYWluZGVyc10uIEluIHRoZSByZWN1cnNpdmVcbiAgICAgICAgICAgICBjYWxsLCB0aGUgYXJndW1lbnQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIFt4cyA6OlxuICAgICAgICAgICAgIHRhaWxzXSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3csIFt4c10sXG4gICAgICAgICAgICAgYW5kIHRoYXQgd2Uga2VlcCB0aGUgdGFpbHMgb2YgdGhlIHByZS1leGlzdGluZyByZW1haW5pbmcgcm93cy4gKilcbiAgICAgICAgICBsZXQgaGVhZHMsIHRhaWxzID0gcGVlbCByZW1haW5kZXJzIGluXG4gICAgICAgICAgQ29ucyAoY29ucyB4IGhlYWRzLCBkaWFnb25hbHMgKGNvbnMgeHMgdGFpbHMpIHhzcylcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgZW1wdHkgcm93LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlhZ29uYWwgaXNcbiAgICAgICAgICAgICBqdXN0IFtoZWFkc10sIGFuZCBbcmVtYWluZGVyc10gaXMgaW5zdGFudGlhdGVkIHdpdGgganVzdCBbdGFpbHNdLFxuICAgICAgICAgICAgIGFzIHdlIGRvIG5vdCBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3cuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGhlYWRzLCBkaWFnb25hbHMgdGFpbHMgeHNzKVxuICAgICAgZW5kXG4gIHwgTmlsIC0+XG4gICAgICAoKiBUaGVyZSBhcmUgbm8gbW9yZSByb3dzIHRvIGJlIGRpc2NvdmVyZWQuIFRoZXJlIHJlbWFpbnMgdG8gZXhoYXVzdFxuICAgICAgICAgdGhlIHJlbWFpbmluZyByb3dzLiAqKVxuICAgICAgdHJhbnNwb3NlIHJlbWFpbmRlcnMgKClcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW2RpYWdvbmFscyB4c3NdIGlzXG4gICB0aGUgc2VxdWVuY2Ugb2YgaXRzIGRpYWdvbmFscy5cblxuICAgVGhlIGZpcnN0IGRpYWdvbmFsIGNvbnRhaW5zIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBmaXJzdCByb3cuIFRoZSBzZWNvbmQgZGlhZ29uYWwgY29udGFpbnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBzZWNvbmQgcm93IGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHJvdzsgYW5kIHNvIG9uLlxuICAgVGhpcyBraW5kIG9mIGRpYWdvbmFsIGlzIGluIGZhY3Qgc29tZXRpbWVzIGtub3duIGFzIGFuIGFudGlkaWFnb25hbC5cblxuICAgLSBFdmVyeSBkaWFnb25hbCBpcyBhIGZpbml0ZSBzZXF1ZW5jZS5cbiAgIC0gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaW5pdGUgKGluIGVpdGhlciBkaXJlY3Rpb24pLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIG11c3QgYmUgcGVyc2lzdGVudC4gKilcblxubGV0IGRpYWdvbmFscyB4c3MgPVxuICBkaWFnb25hbHMgZW1wdHkgeHNzXG5cbmxldCBtYXBfcHJvZHVjdCBmIHhzIHlzID1cbiAgY29uY2F0IChkaWFnb25hbHMgKFxuICAgIG1hcCAoZnVuIHggLT5cbiAgICAgIG1hcCAoZnVuIHkgLT5cbiAgICAgICAgZiB4IHlcbiAgICAgICkgeXNcbiAgICApIHhzXG4gICkpXG5cbmxldCBwcm9kdWN0IHhzIHlzID1cbiAgbWFwX3Byb2R1Y3QgKGZ1biB4IHkgLT4gKHgsIHkpKSB4cyB5c1xuXG5sZXQgb2ZfZGlzcGVuc2VyIGl0ID1cbiAgbGV0IHJlYyBjICgpID1cbiAgICBtYXRjaCBpdCgpIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgTmlsXG4gICAgfCBTb21lIHggLT5cbiAgICAgICAgQ29ucyAoeCwgYylcbiAgaW5cbiAgY1xuXG5sZXQgdG9fZGlzcGVuc2VyIHhzID1cbiAgbGV0IHMgPSByZWYgeHMgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggKCFzKSgpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgcyA6PSB4cztcbiAgICAgICAgU29tZSB4XG5cblxuXG5sZXQgcmVjIGludHMgaSAoKSA9XG4gIENvbnMgKGksIGludHMgKGkgKyAxKSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQXRvbWljIiwiQ2FtbGludGVybmFsTGF6eSIsIlN0ZGxpYiIsIlN0ZGxpYl9MYXp5IiwiZW1wdHkiLCJwYXJhbSIsInJldHVybiQiLCJ4IiwiY29ucyIsIm5leHQiLCJhcHBlbmQiLCJzZXExIiwic2VxMiIsIm1hdGNoIiwibWFwIiwic2VxIiwiZmlsdGVyX21hcCIsInkiLCJmaWx0ZXIiLCJjb25jYXQiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsIml0ZXIiLCJ1bmZvbGQiLCJ1IiwiaXNfZW1wdHkiLCJ4cyIsInVuY29ucyIsImxlbmd0aCIsImFjY3UiLCJpdGVyaSIsImkiLCJmb2xkX2xlZnRpIiwiZm9yX2FsbCIsInAiLCJleGlzdHMiLCJmaW5kIiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwicmVzdWx0IiwiZmluZF9tYXBpIiwiaXRlcjIiLCJ5cyIsImZvbGRfbGVmdDIiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJlcXVhbCIsImVxIiwiY29tcGFyZSIsImNtcCIsImMiLCJpbml0X2F1eCIsImoiLCJpbml0IiwibiIsInJlcGVhdCIsImZvcmV2ZXIiLCJjeWNsZV9ub25lbXB0eSIsImN5Y2xlIiwiaXRlcmF0ZTEiLCJpdGVyYXRlIiwibWFwaV9hdXgiLCJtYXBpIiwidGFpbF9zY2FuIiwicyIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJGb3JjZWRfdHdpY2UiLCJ0b19sYXp5IiwiZmFpbHVyZSIsIm1lbW9pemUiLCJvbmNlIiwiYWN0aW9uIiwiemlwIiwibWFwMiIsImludGVybGVhdmUiLCJzb3J0ZWRfbWVyZ2UxIiwic29ydGVkX21lcmdlIiwibWFwX2ZzdCIsInh5cyIsIm1hcF9zbmQiLCJ1bnppcCIsImZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCIsImZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAiLCJ6IiwicGFydGl0aW9uX21hcCIsInBhcnRpdGlvbiIsInBlZWwiLCJ4c3MiLCJ0cmFuc3Bvc2UiLCJ0YWlscyIsImhlYWRzIiwicmVtYWluZGVycyIsIm1hcF9wcm9kdWN0IiwicHJvZHVjdCIsIm9mX2Rpc3BlbnNlciIsIml0IiwidG9fZGlzcGVuc2VyIiwiaW50cyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFB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LFNBQUFOLElBRk07QUFBQSxLQUlOO0FBQUEsSUFBVztBQUFBLElBRWpCO0FBQUEsR0FBQztBQUFBLFlBQUFpRyxhQUFBN0U7QUFBQUEsUUFBQXNDLElBR0Q7QUFBQSxJQUNBLGdCQUFBNUQ7QUFBQUEsU0FBQVEsUUFDUTtBQUFBLEtBQU0sWUFFUjtBQUFBLFNBQUFjLEtBRlEsVUFBQXBCLElBQUE7QUFBQSxLQUlSO0FBQUEsS0FDQSxjQUFNLENBTlo7QUFBQSxHQU1ZO0FBQUEsWUFBQWtHLEtBQUF6RSxHQUFBM0I7QUFBQUEsUUFBQSxJQUtIO0FBQUEsSUFBWSwwQkFBWixvQkFBWTtBQUFBLEdBQUM7QUFBQSxHRDdyQnhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEwMzIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb3B0aW9uLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsInNvbWUiLCJ2IiwidmFsdWUiLCJvIiwiZGVmYXVsdCQiLCJnZXQiLCJwYXJhbSIsImJpbmQiLCJqb2luIiwibWFwIiwiZm9sZCIsIm5vbmUiLCJpdGVyIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0NrQmEsY0FBTTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLElBQ0ksUUFBbUM7QUFBQSxRQUFBSCxJQUFuQztBQUFBLElBQXVCO0FBQUEsR0FBbUI7QUFBQSxZQUFBSSxJQUFBQztBQUFBQSxJQUN2RCxZQUErQiw2Q0FBNEI7QUFBQSxRQUFBTCxJQUEzRDtBQUFBLElBQW1CO0FBQUEsR0FBd0M7QUFBQSxZQUFBTSxLQUFBSixHQUFBVjtBQUFBQSxJQUN0RCxRQUFxQjtBQUFBLFFBQUFRLElBQXJCO0FBQUEsSUFBc0MsdUJBQUc7QUFBQTtBQUFBLFlBQUFPLEtBQUFGLE9BQzdDLFlBQStCLGNBQUFILElBQS9CLFVBQW1CLFNBQWdCO0FBQUEsWUFBQU0sSUFBQWhCLEdBQUFVO0FBQUFBLElBQ2hDLFFBQXFCO0FBQUEsUUFBQUYsSUFBckI7QUFBQSxJQUEyQyw0QkFBSztBQUFBO0FBQUEsWUFBQVMsS0FBQUMsTUFBQVgsTUFBQU07QUFBQUEsSUFDckQsWUFBa0Q7QUFBQSxRQUFBTCxJQUFsRDtBQUFBLElBQWlDLDBCQUFxQjtBQUFBO0FBQUEsWUFBQVcsS0FBQW5CLEdBQUFhO0FBQUFBLElBQ3RELFlBQXFDO0FBQUEsUUFBQUwsSUFBckM7QUFBQSxJQUF1Qix1QkFBZ0I7QUFBQTtBQUFBLFlBQUFZLFFBQUFQLE9BQ2xDLG9CQUF1QztBQUFBLFlBQUFRLFFBQUFSLE9BQ3ZDLG9CQUF1QztBQUFBLFlBQUFTLE1BQUFDLElBQUFDLElBQUFDO0FBQUFBLElBRWhDO0FBQUEsZ0JBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUNDLDZCQUVWO0FBQUE7QUFBQSxrQkFESTtBQUFBLElBQ1Q7QUFBQSxHQUFLO0FBQUEsWUFBQUMsUUFBQUMsS0FBQUwsSUFBQUM7QUFBQUEsSUFFWSwyQkFJTDtBQUFBLFFBQUFFLEtBSks7QUFBQSxhQUlOO0FBQUEsUUFBQUQsS0FKTTtBQUFBLElBQ0YsOEJBR0g7QUFBQTtBQUFBLFlBQUFJLFVBQUFaLE1BQUFMO0FBQUFBLElBRUwsWUFBeUI7QUFBQSxRQUFBTCxJQUF6QjtBQUFBLElBQWdEO0FBQUEsR0FBSTtBQUFBLFlBQUF1QixRQUFBbEI7QUFBQUEsSUFDcEQsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQjtBQUFBLElBQWdDO0FBQUEsR0FBRztBQUFBLFlBQUF3QixPQUFBbkI7QUFBQUEsSUFDcEMsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQixjQUF1QztBQUFBLHVCRDFDcEQsZ0JDMENvRDtBQUFBLEdBQVk7QUFBQSxHRDFDaEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTE0MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jaGFyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfaGFzaCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiU3RkbGliIiwiY2hyIiwibiIsImVzY2FwZWQiLCJjIiwicyIsImxvd2VyY2FzZV9hc2NpaSIsInVwcGVyY2FzZV9hc2NpaSIsImNvbXBhcmUiLCJjMSIsImMyIiwiZXF1YWwiLCJzZWVkZWRfaGFzaCIsInNlZWQiLCJ4IiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLElBQUFDO0FBQUFBLElDcUJFLHVCQUFxRDtBQUFBLElBQTVCLHVDQUF3QztBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0FPckQ7QUFBQSxtQkFFRjtBQUFBLE1BRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1GO0FBQUE7QUFBQSxVQUZBO0FBQUE7QUFBQSxVQURBO0FBQUE7QUFBQSxVQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFMRSxZQUNGO0FBQUE7QUFBQSxTQUFBQyxNQU9FO0FBQUEsS0FDUjtBQUFBLEtBQ0EsZ0NBUWtCO0FBQUE7QUFBQSxRQUFBQSxJQUxWO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQWtCO0FBQUE7QUFBQSxZQUFBQyxnQkFBQUYsR0FFRix5Q0FFWjtBQUFBLFlBQUFHLGdCQUFBSCxHQUVZLHlDQUVaO0FBQUEsWUFBQUksUUFBQUMsSUFBQUMsSUFJVSxtQkFBaUI7QUFBQSxZQUFBQyxNQUFBRixJQUFBQyxJQUNJLG1DQUFJO0FBQUEsWUFBQUUsWUFBQUMsTUFBQUMsR0FJcEIsa0NBQStCO0FBQUEsWUFBQUMsS0FBQUQsR0FDM0MsK0JBQTRCO0FBQUEsR0RoRXpDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEyMTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvdWNoYXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJpIiwib2ZfaW50IiwiaXNfY2hhciIsIm9mX2NoYXIiLCJjIiwidG9fY2hhciIsInVuc2FmZV90b19jaGFyIiwiZXF1YWwiLCJjb21wYXJlIiwiaGFzaCIsInV0Zl9kZWNvZGVfaXNfdmFsaWQiLCJkIiwidXRmX2RlY29kZV9sZW5ndGgiLCJ1dGZfZGVjb2RlX3VjaGFyIiwidXRmX2RlY29kZSIsIm4iLCJ1dGZfZGVjb2RlX2ludmFsaWQiLCJjc3RfdWNoYXJfbWwiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsIlN0ZGxpYl9VY2hhciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBLElDaUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2dCO0FBQUEseUJBQ1g7QUFBQTtBQUFBLFlBQUFDLEtBQUFEO0FBQUFBLElBR0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDZ0I7QUFBQSx5QkFDWDtBQUFBO0FBQUEsWUFBQUUsU0FBQUM7QUFBQUEsUUFBQSxJQUVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQTBEO0FBQUEsWUFBQUMsT0FBQUQ7QUFBQUEsSUFDekQsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE9BeEJFO0FBQUEsZUFBakI7QUFBQSxJQXdCZ0Q7QUFBQTtBQUFBLFlBQUFFLFFBQUFMLEdBSW5ELHVCQUFPO0FBQUEsWUFBQU0sUUFBQUMsR0FDUCxTQUFXO0FBQUEsWUFBQUMsUUFBQVI7QUFBQUEsSUFFekIsYUFDQTtBQUFBO0FBQUE7QUFBQSxPQS9CNEI7QUFBQTtBQUFBLFNBQWtEO0FBQUEsSUE4QmhDLDhCQUM3QjtBQUFBO0FBQUEsWUFBQVMsZUFBQSxHRG5EbkI7QUFBQSxZQUFBQyxNQUFBO0FBQUEsT0FBQUMsVUFBQTtBQUFBLFlBQUFDLEtBQUE7QUFBQSxZQUFBQyxvQkFBQUMsR0N3RXFDLG9DQUFxQjtBQUFBLFlBQUFDLGtCQUFBRCxHQUN2QiwwQkFBOEI7QUFBQSxZQUFBRSxpQkFBQUYsR0FDL0Isb0JBQStCO0FBQUEsWUFBQUcsV0FBQUMsR0FBQWxCLEdBQ25DLHlCQUEwQztBQUFBLFlBQUFtQixtQkFBQUQsR0FDcEMsdUJBQTJCO0FBQUE7QUFBQSxJQUFBRSxlRDVFL0Q7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUFyQjtBQUFBQSxJQytFUyxVQUFTO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixjQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQSxXRHBGbkI7QUFBQSxZQUFBc0IsbUJBQUF0QjtBQUFBQSxJQ3VGUyxVQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUF1QjtBQUFBQSxNRDFGbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTMzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9saXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdCBpIGxhc3QgZiA9XG4gIGlmIGkgPiBsYXN0IHRoZW4gW11cbiAgZWxzZSBpZiBpID0gbGFzdCB0aGVuIFtmIGldXG4gIGVsc2VcbiAgICBsZXQgcjEgPSBmIGkgaW5cbiAgICBsZXQgcjIgPSBmIChpKzEpIGluXG4gICAgcjEgOjogcjIgOjogaW5pdCAoaSsyKSBsYXN0IGZcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGluaXQgMCAobGVuIC0gMSkgZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IFthMV0gLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIGxldCByMiA9IGYgYTIgaW5cbiAgICAgIHIxOjpyMjo6bWFwIGYgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBbYTFdIC0+XG4gICAgICBsZXQgcjEgPSBmIGkgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgaSBhMSBpblxuICAgICAgbGV0IHIyID0gZiAoaSsxKSBhMiBpblxuICAgICAgcjE6OnIyOjptYXBpIChpKzIpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChbYTFdLCBbYjFdKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgW3IxXVxuICB8IChhMTo6YTI6OmwxLCBiMTo6YjI6OmwyKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgbGV0IHIyID0gZiBhMiBiMiBpblxuICAgICAgcjE6OnIyOjptYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IGZpbmRfaW5kZXggcCA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgcCBhIHRoZW4gU29tZSBpIGVsc2UgYXV4IChpKzEpIGwgaW5cbiAgYXV4IDBcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX21hcGkgZiA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gYXV4IChpKzEpIGxcbiAgICAgZW5kIGluXG4gIGF1eCAwXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfYWxsIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggOjogZmluZF9hbGwgcCBsIGVsc2UgZmluZF9hbGwgcCBsXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJpIHAgaSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4OjpsIC0+XG4gICAgICBsZXQgaScgPSBpICsgMSBpblxuICAgICAgaWYgcCBpIHggdGhlbiB4IDo6IGZpbHRlcmkgcCBpJyBsIGVsc2UgZmlsdGVyaSBwIGknIGxcblxubGV0IGZpbHRlcmkgcCBsID0gZmlsdGVyaSBwIDAgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBsXG4gICAgICB8IFNvbWUgdiAtPiB2IDo6IGZpbHRlcl9tYXAgZiBsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbmNhdF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4Ojp4cyAtPiBwcmVwZW5kX2NvbmNhdF9tYXAgKGYgeCkgZiB4c1xuYW5kW0B0YWlsX21vZF9jb25zXSBwcmVwZW5kX2NvbmNhdF9tYXAgeXMgZiB4cyA9XG4gIG1hdGNoIHlzIHdpdGhcbiAgfCBbXSAtPiBjb25jYXRfbWFwIGYgeHNcbiAgfCB5IDo6IHlzIC0+IHkgOjogcHJlcGVuZF9jb25jYXRfbWFwIHlzIGYgeHNcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSB2ZXJ5IGxvbmcgbGlzdCAobGVuZ3RoIG92ZXIgYWJvdXQgMTAwMDAwKSwgaXQgdXNlZCB0byBiZVxuICAgZmFzdGVyIHRvIGNvbnZlcnQgdGhlIGxpc3QgdG8gYW4gYXJyYXksIHNvcnQgdGhlIGFycmF5LCBhbmQgY29udmVydFxuICAgYmFjaywgdHJ1bmNhdGluZyB0aGUgYXJyYXkgb2JqZWN0IGFmdGVyIHByZXBlbmRpbmcgZWFjaCB0aG91c2FuZFxuICAgZW50cmllcyB0byB0aGUgcmVzdWx0aW5nIGxpc3QuIEltcG9zc2libGUgbm93IHRoYXQgT2JqLnRydW5jYXRlIGhhc1xuICAgYmVlbiByZW1vdmVkLiAqKVxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9zZXEgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IFtdXG4gIHwgU2VxLkNvbnMgKHgxLCBzZXEpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFt4MV1cbiAgICAgIHwgU2VxLkNvbnMgKHgyLCBzZXEpIC0+IHgxIDo6IHgyIDo6IG9mX3NlcSBzZXFcbiAgICAgIGVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiU3RkbGliIiwibGVuZ3RoIiwibCIsImxlbiIsInBhcmFtIiwiY29ucyIsImEiLCJoZCIsInRsIiwiY3N0X0xpc3RfbnRoIiwibnRoIiwibiIsIm50aF9vcHQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwibDEiLCJsMiIsInJldiIsImluaXQiLCJsYXN0IiwiaSIsInIxIiwicjIiLCJibG9jayIsImRzdCIsIm9mZnNldCIsImZsYXR0ZW4iLCJyIiwibWFwIiwibWF0Y2giLCJtYXBpIiwicmV2X21hcCIsImFjY3UiLCJpdGVyIiwiaXRlcmkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwibWFwMiIsImNzdF9MaXN0X21hcDIiLCJiMiIsImIxIiwicmV2X21hcDIiLCJpdGVyMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZm9yX2FsbDIiLCJleGlzdHMyIiwibWVtIiwieCIsIm1lbXEiLCJhc3NvYyIsImIiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInBhaXIiLCJyZW1vdmVfYXNzcSIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsInJlc3VsdCIsImZpbmRfbWFwaSIsImZpbmRfYWxsIiwiZmlsdGVyaSIsImZpbHRlcl9tYXAiLCJ2IiwiY29uY2F0X21hcCIsInhzIiwieXMiLCJ5IiwiZm9sZF9sZWZ0X21hcCIsImxfYWNjdSIsInBhcnRpdGlvbiIsInllcyIsIm5vIiwicGFydGl0aW9uX21hcCIsImxlZnQiLCJyaWdodCIsInNwbGl0IiwicnkiLCJyeCIsImNvbWJpbmUiLCJtZXJnZSIsImNtcCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic3RhYmxlX3NvcnQiLCJzb3J0IiwieDIiLCJ4MSIsInMiLCJ4MyIsIm4xIiwibjIiLCJzMSIsInMyIiwicmV2X3NvcnQiLCJzb3J0X3VuaXEiLCJjIiwiY29tcGFyZV9sZW5ndGhzIiwiY29tcGFyZV9sZW5ndGhfd2l0aCIsImlzX2VtcHR5IiwiZXF1YWwiLCJlcSIsImNvbXBhcmUiLCJ0b19zZXEiLCJhdXgiLCJ0YWlsIiwib2Zfc2VxIiwic2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdB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LEtBQWY7QUFBQTtBQUFBO0FBQUEsR0FDc0I7QUFBQSxZQUFBTyxPQUFBaEg7QUFBQUEsYUFBQWlILElBQUFqSCxHQUFBRTtBQUFBQSxLQUtMLFFBQ1Q7QUFBQSxTQUFBZ0gsT0FEUyxNQUFBakUsSUFBQTtBQUFBLEtBRW1CLDBCQUFSLHNCQUFRO0FBQUEsSUFBQztBQUFBLElBRXZDO0FBQUEsR0FBSztBQUFBLFlBQUFrRSxPQUFBQztBQUFBQSxRQUFBekYsUUFHQztBQUFBLElBQU0sWUFDQztBQUFBLFFBQUF5RixRQURELFVBQUFwQixLQUFBLFVBQUFyRSxVQUdJO0FBQUEsSUFBTSxjQUNMO0FBQUE7QUFBQSxLQUFBeUYsUUFESztBQUFBLEtBQUFyQixLQUFBO0FBQUEsS0FBQTFFLFFBRU07QUFBQSxLQUFBQyxNQUFZO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUE2RixRQUFBO0FBQUE7QUFBQSxTQUFBekYsVUFMbEM7QUFBQSxLQUFNO0FBQUE7QUFBQSxPQUFBeUYsUUFBQTtBQUFBLE9BQUFwQixPQUFBO0FBQUEsT0FBQXJFLFVBR0k7QUFBQSxNQUFNO0FBQUEsV0FBQXlGLFFBQUEsWUFBQXJCLE9BQUEsWUFBQXpFLFFBRU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURYO0FBQUE7QUFBQTtBQUFBLE1BSEo7QUFBQSxLQUlxQztBQUFBO0FBQUEsR0FDM0M7QUFBQSxHRHprQlQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMjY3NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaGFzaCIsImFicyIsIngiLCJsb2dub3QiLCJlcXVhbCIsImNvbXBhcmUiLCJtaW4iLCJ5IiwibWF4IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEseUJBQUFDLFlBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQzRCWSwyQkFBd0I7QUFBQSxZQUFBQyxPQUFBRCxHQU1yQixjQUFhO0FBQUEsWUFBQUUsTUFBQSxNRGxDNUI7QUFBQSxPQUFBQyxVQUFBO0FBQUEsWUFBQUMsSUFBQUosR0FBQUssR0N3Q2tCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFOLEdBQUFLLEdBQ3ZCLHFCQUF1QjtBQUFBLFlBQUFFLFVBQUFQLEdBVU47QUFBQSxZQUFBUSxZQUFBQyxNQUFBVCxHQUlWLGtDQUErQjtBQUFBLFlBQUFVLEtBQUFWLEdBQzNDLCtCQUE0QjtBQUFBLEdEeER6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEyNzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J5dGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCB1bnNhZmVfZXNjYXBlIHMgPVxuICAoKiBXZSBwZXJmb3JtIHR3byBwYXNzZXMgb24gdGhlIGlucHV0IHNlcXVlbmNlLCBvbmUgdG8gY29tcHV0ZSB0aGVcbiAgICAgcmVzdWx0IHNpemUgYW5kIG9uZSB0byB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgICMxMTUwOCwgIzExNTA5OiBUaGlzIGxvZ2ljIHdvdWxkIGJlIGluY29ycmVjdCBpbiBwcmVzZW5jZSBvZlxuICAgICBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgaW5wdXQsIG1ha2luZyB0aGUgdXNlIG9mXG4gICAgIFt1bnNhZmVfc2V0XSBiZWxvdyBtZW1vcnktdW5zYWZlLlxuXG4gICAgIFByZWNvbmRpdGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbjpcbiAgICAgLSBhbiBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZVxuICAgICAtIGEgdW5pcXVlbHktb3duZWQgYnl0ZSBzZXF1ZW5jZSAodGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcClcblxuICAgICBJbiBlaXRoZXIgY2FzZSB3ZSByZXR1cm4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlLlxuICAqKVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIHNcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBlc2NhcGVkIGIgPVxuICBsZXQgYiA9IGNvcHkgYiBpblxuICAoKiBXZSBjb3B5IG91ciBpbnB1dCB0byBvYnRhaW4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlIFtiXVxuICAgICB0byBzYXRpc2Z5IFt1bnNhZmVfZXNjYXBlXSdzIHByZWNvbmRpdGlvbiAqKVxuICB1bnNhZmVfZXNjYXBlIGJcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9ieXRlcyIsImNhbWxfYnN3YXAxNiIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfYnl0ZXNfZ2V0MzIiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1VjaGFyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfU3lzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfQ2hhciIsIm1ha2UiLCJuIiwiYyIsInMiLCJpbml0IiwiaSIsImVtcHR5IiwiY29weSIsImxlbiIsInIiLCJ0b19zdHJpbmciLCJiIiwib2Zfc3RyaW5nIiwic3ViIiwib2ZzIiwic3ViX3N0cmluZyIsInN5bWJvbCIsImEiLCJtYXRjaCIsImV4dGVuZCIsImxlZnQiLCJyaWdodCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsImZpbGwiLCJibGl0IiwiczEiLCJvZnMxIiwiczIiLCJvZnMyIiwiYmxpdF9zdHJpbmciLCJpdGVyIiwiaXRlcmkiLCJjb25jYXQiLCJzZXAiLCJsIiwic2VwbGVuIiwiYWNjIiwicGFyYW0iLCJwb3MiLCJoZCIsInRsIiwieCIsImRzdCIsImNhdCIsImwxIiwibDIiLCJpc19zcGFjZSIsInRyaW0iLCJqIiwidW5zYWZlX2VzY2FwZSIsImVzY2FwZWQiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiYXBwbHkxIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpbmRleCIsImluZGV4X3JlY19vcHQiLCJpbmRleF9vcHQiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfcmVjIiwicmluZGV4IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfcmVjX29wdCIsInJpbmRleF9vcHQiLCJyaW5kZXhfZnJvbV9vcHQiLCJjb250YWluc19mcm9tIiwiZXhuIiwiY29udGFpbnMiLCJyY29udGFpbnNfZnJvbSIsImNvbXBhcmUiLCJzcGxpdF9vbl9jaGFyIiwidG9fc2VxIiwiYXV4IiwidG9fc2VxaSIsIm9mX3NlcSIsImJ1ZiIsIm5ld19sZW4iLCJuZXdfYnVmIiwidW5zYWZlX2dldF91aW50MTZfbGUiLCJ1bnNhZmVfZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9sZSIsImdldF91aW50MTZfYmUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50NjRfbGUiLCJnZXRfaW50NjRfYmUiLCJ1bnNhZmVfc2V0X3VpbnQxNl9sZSIsInVuc2FmZV9zZXRfdWludDE2X2JlIiwic2V0X2ludDE2X2xlIiwic2V0X2ludDE2X2JlIiwic2V0X2ludDMyX2xlIiwic2V0X2ludDMyX2JlIiwic2V0X2ludDY0X2xlIiwic2V0X2ludDY0X2JlIiwiZGVjX2ludmFsaWQiLCJkZWNfcmV0IiwidSIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiZ2V0X3V0Zl84X3VjaGFyIiwibWF4IiwiY3N0X2J5dGVzX21sIiwic2V0X3V0Zl84X3VjaGFyIiwic2V0IiwibGFzdCIsImlzX3ZhbGlkX3V0Zl84IiwiY3N0X2luZGV4X291dF9vZl9ib3VuZHMiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJoaSIsImxvIiwic2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJzZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsIlN0ZGxpYl9CeXRlcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEs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cCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RyaW5nLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBiID0gYm9zIHMgaW5cbiAgKCogV2Ugc2F0aXNmeSBbdW5zYWZlX2VzY2FwZV0ncyBwcmVjb25kaXRpb24gYnkgcGFzc2luZyBhblxuICAgICBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZSBbYl0uICopXG4gIGJ0cyAoQi51bnNhZmVfZXNjYXBlIGIpXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2ggOiBpbnQgLT4gc3RyaW5nIC0+IGludCA9IFwiY2FtbF9zdHJpbmdfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2ggMCB4XG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfaGFzaCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiYnRzIiwiYm9zIiwibWFrZSIsIm4iLCJjIiwiaW5pdCIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJzdWIiLCJzIiwib2ZzIiwibGVuIiwiYmxpdCIsImNzdCIsImNvbmNhdCIsInNlcCIsImwiLCJzZXBsZW4iLCJhY2MiLCJwYXJhbSIsInBvcyIsImhkIiwidGwiLCJ4IiwiZHN0IiwiY2F0IiwiaXRlciIsImkiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJmb2xkX3JpZ2h0IiwiYSIsImZvbGRfbGVmdCIsImV4aXN0cyIsImZvcl9hbGwiLCJpc19zcGFjZSIsInRyaW0iLCJlc2NhcGVkIiwiYiIsImluZGV4X3JlYyIsImxpbSIsImluZGV4IiwiaW5kZXhfcmVjX29wdCIsImluZGV4X29wdCIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9yZWMiLCJyaW5kZXgiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9yZWNfb3B0IiwicmluZGV4X29wdCIsInJpbmRleF9mcm9tX29wdCIsImNvbnRhaW5zX2Zyb20iLCJleG4iLCJjb250YWlucyIsInJjb250YWluc19mcm9tIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJoYXNoIiwic3BsaXRfb25fY2hhciIsImoiLCJyIiwiY29tcGFyZSIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X2xlIiwiZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQzMl9iZSIsImdldF9pbnQ2NF9sZSIsImdldF9pbnQ2NF9iZSIsIlN0ZGxpYl9TdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQyxHQ21DRSxPQUFVLElBQVYsaUNBQWlCO0FBQUEsWUFBQUMsS0FBQUYsR0FBQVYsR0FFakIsT0FBVSxJQUFWLGlDQUFpQjtBQUFBLE9BQUFhLFdEckNuQixpQkFBQUMs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O0FBQUFBLFFBQUEsSUFDQztBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUEyRCxjQUFBN0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE0RCxhQUFBOUUsR0FBQWtCO0FBQUFBLFFBQUEsSUFDWDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE2RCxhQUFBL0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE4RCxhQUFBaEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUErRCxhQUFBakYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFnRSxhQUFBbEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFpRSxhQUFBbkYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFrRSxhQUFBcEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBO0FBQUEsSUFBQW1FO0FBQUFBLE1EblIvQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE0MzY5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2FycmF5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBtdXN0IG5vdCBldmFsdWF0ZSBbZiAwXSB3aGVuIFtsIDw9IDBdLlxuICAgICBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkubWFrZV9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICAgIGRvbmU7XG4gIGVuZDtcbiAgcmVzXG5cbmxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdF9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gICgqIFdlIG11c3Qgbm90IGV2YWx1YXRlIFtmIHggMF0gd2hlbiBbc3kgPD0gMF06ICopXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgKGYgeCAwKSBpblxuICAgICAgZm9yIHkgPSAxIHRvIHByZWQgc3kgZG9cbiAgICAgICAgdW5zYWZlX3NldCByb3cgeSAoZiB4IHkpXG4gICAgICBkb25lO1xuICAgICAgdW5zYWZlX3NldCByZXMgeCByb3dcbiAgICBkb25lO1xuICBlbmQ7XG4gIHJlc1xuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gIGRvbmVcblxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICBkb25lXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX2luZGV4IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gU29tZSBpXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcGkgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiBpICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbmxldCBzaHVmZmxlIH5yYW5kIGEgPSAoKiBGaXNoZXItWWF0ZXMgKilcbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICBsZXQgaiA9IHJhbmQgKGkgKyAxKSBpblxuICAgIGxldCB2ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgdW5zYWZlX3NldCBhIGogdlxuICBkb25lXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9hcnJheV9zdWIiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiaW5pdCIsImwiLCJyZXMiLCJpIiwibWFrZV9tYXRyaXgiLCJzeCIsInN5IiwieCIsImluaXRfbWF0cml4Iiwicm93IiwieSIsImNvcHkiLCJhIiwiYXBwZW5kIiwiYTIiLCJsMSIsInN1YiIsIm9mcyIsImxlbiIsImZpbGwiLCJ2IiwiYmxpdCIsIm9mczEiLCJvZnMyIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcGlfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwidG9fbGlzdCIsImxpc3RfbGVuZ3RoIiwiYWNjdSIsInBhcmFtIiwidCIsIm9mX2xpc3QiLCJ0bCIsImhkIiwiZm9sZF9sZWZ0IiwiZm9sZF9sZWZ0X21hcCIsImFjYyIsImlucHV0X2FycmF5IiwibWF0Y2giLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJmb2xkX3JpZ2h0IiwiZXhpc3RzIiwicCIsIm4iLCJmb3JfYWxsIiwiZm9yX2FsbDIiLCJsMiIsIm4xIiwibjIiLCJleGlzdHMyIiwibWVtIiwibWVtcSIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwic3BsaXQiLCJiMCIsImJpIiwiYWkiLCJjb21iaW5lIiwibmEiLCJuYiIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdCIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwiU3RkbGliX0FycmF5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBVDtBQUFBQSxJQytDRSxZQUFjO0FBQUEsSUFDZCxVQUFjLHlDQVNWO0FBQUEsUUFBQVUsTUFKTyxrQkFBUyx1QkFDbkI7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLE1BQ21CO0FBQUEsY0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFeEI7QUFBQSxHQUFHO0FBQUEsWUFBQUMsWUFBQUMsSUFBQUMsSUFBQU47QUFBQUEsSUFJSixXQUFlO0FBQUEsUUFBQUUsTUFDTDtBQUFBLElBQ1Y7QUFBQSxhQUFlO0FBQUE7QUFBQSxVQUFBSyxJQUFBO0FBQUE7QUFBQSxPQUVNO0FBQUEsZUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsSUFBQXlHO0FBQUFBLE1EcGVmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTUxMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmxvYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgT2plZGEgQmFyLCBMZXhpRmkgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIG5lZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgYWRkIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCBzdWIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsIG11bCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgZGl2IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCByZW0gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZtYSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2ZtYV9mbG9hdFwiIFwiY2FtbF9mbWFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5cbmxldCB6ZXJvID0gMC5cbmxldCBvbmUgPSAxLlxubGV0IG1pbnVzX29uZSA9IC0xLlxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBxdWlldF9uYW4gPSBuYW5cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgc2lnbmFsaW5nX25hbiA9IGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBpc19maW5pdGUgKHg6IGZsb2F0KSA9IHggLS4geCA9IDAuXG5sZXQgaXNfaW5maW5pdGUgKHg6IGZsb2F0KSA9IDEuIC8uIHggPSAwLlxubGV0IGlzX25hbiAoeDogZmxvYXQpID0geCA8PiB4XG5cbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgbWF4X2Zsb2F0ID0gU3RkbGliLm1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IFN0ZGxpYi5taW5fZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmdfb3B0ID0gU3RkbGliLmZsb2F0X29mX3N0cmluZ19vcHRcbmxldCB0b19zdHJpbmcgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0XG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcG93IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjYnJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2JydF9mbG9hdFwiIFwiY2FtbF9jYnJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cDIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHAyX2Zsb2F0XCIgXCJjYW1sX2V4cDJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzJfZmxvYXRcIiBcImNhbWxfbG9nMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmX2Zsb2F0XCIgXCJjYW1sX2VyZlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmZjIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmY19mbG9hdFwiIFwiY2FtbF9lcmZjXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRydW5jIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdHJ1bmNfZmxvYXRcIiBcImNhbWxfdHJ1bmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcm91bmQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9yb3VuZF9mbG9hdFwiIFwiY2FtbF9yb3VuZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG5bQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgaXNfaW50ZWdlciB4ID0geCA9IHRydW5jIHggJiYgaXNfZmluaXRlIHhcblxuZXh0ZXJuYWwgbmV4dF9hZnRlciA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gID0gXCJjYW1sX25leHRhZnRlcl9mbG9hdFwiIFwiY2FtbF9uZXh0YWZ0ZXJcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgc3VjYyB4ID0gbmV4dF9hZnRlciB4IGluZmluaXR5XG5sZXQgcHJlZCB4ID0gbmV4dF9hZnRlciB4IG5lZ19pbmZpbml0eVxuXG5leHRlcm5hbCBjb3B5X3NpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpZ25fYml0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGJvb2xcbiAgPSBcImNhbWxfc2lnbmJpdF9mbG9hdFwiIFwiY2FtbF9zaWduYml0XCIgW0BAbm9hbGxvY11cblxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbnR5cGUgdCA9IGZsb2F0XG5leHRlcm5hbCBjb21wYXJlIDogZmxvYXQgLT4gZmxvYXQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgZXF1YWwgeCB5ID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldFtAaW5saW5lXSBtaW4gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB8fCBpc19uYW4geSB0aGVuIChuYW4sIG5hbilcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgsIHkpIGVsc2UgKHksIHgpXG5cbmxldFtAaW5saW5lXSBtaW5fbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB0aGVuICh5LHkpXG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiAoeCx4KVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCx5KSBlbHNlICh5LHgpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IGZsb2F0YXJyYXlcblxuICBleHRlcm5hbCBsZW5ndGggOiB0IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcblxuICBsZXQgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGZvciBpID0gb2ZzIHRvIG9mcyArIGxlbiAtIDEgZG8gdW5zYWZlX3NldCBhIGkgdiBkb25lXG5cbiAgZXh0ZXJuYWwgdW5zYWZlX2JsaXQ6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0ID1cbiAgICBcImNhbWxfZmxvYXRhcnJheV9ibGl0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBtYWtlX21hdHJpeCBzeCBzeSB2ID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1ha2VfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgcmVzIHggKG1ha2Ugc3kgdilcbiAgICAgIGRvbmU7XG4gICAgZW5kO1xuICAgIHJlc1xuXG4gIGxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgaW5cbiAgICAgICAgZm9yIHkgPSAwIHRvIHN5IC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgcm93IHkgKGYgeCB5KVxuICAgICAgICBkb25lO1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHJlcyB4IHJvd1xuICAgICAgZG9uZTtcbiAgICBlbmQ7XG4gICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtYXBfaW5wbGFjZSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZVxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWFwaV9pbnBsYWNlIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZmluZF9vcHQgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfaW5kZXggcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIFNvbWUgaVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfbWFwIGYgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmaW5kX21hcGkgZiBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGYgaSAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgc2h1ZmZsZSB+cmFuZCBhID0gKCogRmlzaGVyLVlhdGVzICopXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBqID0gcmFuZCAoaSArIDEpIGluXG4gICAgICBsZXQgdiA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB1bnNhZmVfc2V0IGEgaiB2XG4gICAgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwiaXNfZmluaXRlIiwieCIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm9mX3N0cmluZ19vcHQiLCJ0b19zdHJpbmciLCJpc19pbnRlZ2VyIiwic3VjYyIsInByZWQiLCJlcXVhbCIsInkiLCJtaW4iLCJtYXgiLCJtaW5fbWF4IiwibWluX251bSIsIm1heF9udW0iLCJtaW5fbWF4X251bSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJ1bnNhZmVfZmlsbCIsImEiLCJvZnMiLCJsZW4iLCJ2IiwiaSIsImNoZWNrIiwibXNnIiwibWFrZSIsIm4iLCJyZXN1bHQiLCJpbml0IiwibCIsInJlcyIsIm1ha2VfbWF0cml4Iiwic3giLCJzeSIsImluaXRfbWF0cml4Iiwicm93IiwiYXBwZW5kIiwiYTIiLCJsMSIsImwyIiwiY3N0X2Zsb2F0X21sIiwiY29uY2F0IiwiYWNjIiwicGFyYW0iLCJ0bCIsImhkIiwiaGxlbiIsInN1YiIsImNvcHkiLCJmaWxsIiwiYmxpdCIsInNyYyIsInNvZnMiLCJkc3QiLCJkb2ZzIiwiY3N0X0Zsb2F0X2FycmF5X2JsaXQiLCJ0b19saXN0Iiwib2ZfbGlzdCIsInQiLCJoIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwibWFwaV9pbnBsYWNlIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwibWVtIiwibWVtX2llZWUiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsImZpbmRfbWFwaSIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJTdGRsaWJfRmxvYXQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7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QUFBQTtBQUFBLFNBQUExQyxJQUFBO0FBQUE7QUFBQSxNQUNpQjtBQUFBLGNBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUUzQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFnRztBQUFBQSxNQXJrQnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkRyQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDcUM0RDtBQUFBO0FBQUEsRURyQzVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTU5OTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaW50MzIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50MzJdOiAzMi1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50MzIgLT4gaW50ID0gXCIlaW50MzJfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX3RvX2Zsb2F0XCIgXCJjYW1sX2ludDMyX3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDMyXG4gID0gXCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQzMiAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCB6ZXJvID0gMGxcbmxldCBvbmUgPSAxbFxubGV0IG1pbnVzX29uZSA9IC0xbFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFsXG5sZXQgcHJlZCBuID0gc3ViIG4gMWxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMGwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMGxcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRmxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMWwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBtYXRjaCBTeXMud29yZF9zaXplIHdpdGhcbiAgfCAzMiAtPlxuICAgICAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgICAgIGZ1biBuIC0+XG4gICAgICAgIGlmIG4gPj0gMGwgJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBpbnQzMlxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IHggPSB5XG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgdW5zaWduZWRfbHQgbiBtID1cbiAgc3ViIG4gbWluX2ludCA8IHN1YiBtIG1pbl9pbnRcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lIGJpdG5lc3MuXG4gICBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfbHQgbiBkIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9sdCByIGQgdGhlbiBxIGVsc2Ugc3VjYyBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2giLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tdWwiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfU3lzIiwiQXNzZXJ0X2ZhaWx1cmUiLCJzdWNjIiwibiIsInByZWQiLCJhYnMiLCJsb2dub3QiLCJtYXRjaCIsIm1heF9pbnQiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmciLCJvZl9zdHJpbmdfb3B0IiwicyIsImV4biIsImVxdWFsIiwidW5zaWduZWRfY29tcGFyZSIsIm0iLCJ5IiwieCIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsInVuc2lnbmVkX2RpdiIsImQiLCJxIiwiciIsInVuc2lnbmVkX3JlbSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJTdGRsaWJfSW50MzIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDK0NxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBLFlBQUFHLE9BQUFILEdBR1g7QUFBQSxPQUFBSSxRRHBEN0I7QUFBQTtBQUFBO0FBQUEsS0FBQUMsVUN5RG9CO0FBQUEsS0FBQUM7QUFBQUEsT0FDZCxTQUFBTjtBQUFBQSxRQUNLLDhCQUFXO0FBQUEsU0FDWjtBQUFBLFFBRUE7QUFBQSxPQUFJO0FBQUE7QUFBQSxJRDlEZDtBQUFBLEtDb0VNO0FBQUE7QUFBQSxRQUFBTSxrQkFGQSxTQUFBTixHQUFTLG1CQUF5QjtBQUFBO0FBQUEsWUFBQU8sVUFBQVAsR0FLdEIsdUNBQWE7QUFBQSxZQUFBUSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQ1RVg7QUFBQSw4QkM2RW9CO0FBQUEsS0Q3RXBCO0FBQUE7QUFBQSxHQzZFd0I7QUFBQSxPQUFBQyxRRDdFeEI7QUFBQSxZQUFBQyxpQkFBQVosR0FBQWE7QUFBQUEsUUFBQUMsSUNxRjBCLG9CQUFBQyxJQUFoQjtBQUFBLElBSmtCLDZCQUlhO0FBQUE7QUFBQSxZQUFBQyxZQUFBaEIsR0FBQWE7QUFBQUEsSUFHdkMsNERBQTZCO0FBQUE7QUFBQSxZQUFBSSxJQUFBRixHQUFBRCxHQUVWLG1DQUFvQjtBQUFBLFlBQUFJLElBQUFILEdBQUFELEdBQ3BCLHNDQUFvQjtBQUFBLE9BQUFLLE9EM0Z6QyxHQUFBQyxNQUFBO0FBQUEsWUFBQUMsYUFBQXJCLEdBQUFzQjtBQUFBQSxJQ2lHSyx3QkFDRSxxQ0FJa0M7QUFBQSxRQUFBQyxJQUZsQix1Q0FBQUMsSUFDTDtBQUFBLElBQ1gsd0NBQWtDO0FBQUE7QUFBQSxZQUFBQyxhQUFBekIsR0FBQXNCO0FBQUFBLElBRzVCLFdBQUwsU0FBSywwQkFBcUI7QUFBQTtBQUFBLFlBQUFJLFlBQUFDLE1BQUFaLEdBSVQsa0NBQStCO0FBQUEsWUFBQWEsS0FBQWIsR0FDM0MsK0JBQTRCO0FBQUE7QUFBQSxJQUFBYztBQUFBQSxNRDlHekMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjA5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQ2NC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQ2NF06IDY0LWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQ2NCAtPiBpbnQgPSBcIiVpbnQ2NF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQ2NFxuICA9IFwiY2FtbF9pbnQ2NF9vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfdG9fZmxvYXRcIiBcImNhbWxfaW50NjRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMiA6IGludDMyIC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzIgOiBpbnQ2NCAtPiBpbnQzMiA9IFwiJWludDY0X3RvX2ludDMyXCJcbmV4dGVybmFsIG9mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX25hdGl2ZWludFwiXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBpbnQ2NCAtPiBuYXRpdmVpbnQgPSBcIiVpbnQ2NF90b19uYXRpdmVpbnRcIlxuXG5sZXQgemVybyA9IDBMXG5sZXQgb25lID0gMUxcbmxldCBtaW51c19vbmUgPSAtMUxcbmxldCBzdWNjIG4gPSBhZGQgbiAxTFxubGV0IHByZWQgbiA9IHN1YiBuIDFMXG5sZXQgYWJzIG4gPSBpZiBuID49IDBMIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgbWluX2ludCA9IDB4ODAwMDAwMDAwMDAwMDAwMExcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRkZGRkZGRkZGTFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xTClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgbiA+PSAwTCAmJiBuIDw9IG1heF9pbnQgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0geCA9IHlcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCB1bnNpZ25lZF9sdCBuIG0gPVxuICBzdWIgbiBtaW5faW50IDwgc3ViIG0gbWluX2ludFxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWUgYml0bmVzcy5cbiAgIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9sdCBuIGQgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2x0IHIgZCB0aGVuIHEgZWxzZSBzdWNjIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfc3ViIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJtaW5faW50IiwibWF4X2ludCIsIlN0ZGxpYiIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiY29tcGFyZSIsIngiLCJ5IiwiZXF1YWwiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDNkNhLDJCQUFRO0FBQUEsWUFBQUMsS0FBQUQsR0FDUiwyQkFBUTtBQUFBLFlBQUFFLElBQUFGO0FBQUFBLElBQ04scUNBQW9CLHlCQUFLO0FBQUE7QUFBQSxZQUFBRyxPQUFBSCxHQUd6QixtQ0FBYztBQUFBO0FBQUEsSUFBQUgsWUFHYjtBQUFBLFFBQ2Q7QUFBQSxZQUFBTyxnQkFBQUo7QUFBQUEsSUFDSyw4QkFBVztBQUFBLEtBQ1o7QUFBQSxJQUVBO0FBQUEsR0FBSTtBQUFBLFlBQUFLLFVBQUFMLEdBR1EseUNBQWE7QUFBQSxZQUFBTSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTURsRVg7QUFBQSw4QkNtRW9CO0FBQUEsS0RuRXBCO0FBQUE7QUFBQSxHQ21Fd0I7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQyxHQVdJLCtCQUFrQjtBQUFBLE9BQUFDLFFBeEI1QztBQUFBLFlBQUFDLGlCQUFBYixHQUFBYztBQUFBQSxRQUFBSCxJQTRCd0IsNEJBQUFELElBQWhCO0FBQUEsSUFKa0IsK0JBSWE7QUFBQTtBQUFBLFlBQUFLLFlBQUFmLEdBQUFjO0FBQUFBLElBR3ZDO0FBQUEseUNBQWdCLDJCQUFhO0FBQUE7QUFBQSxZQUFBRSxJQUFBTixHQUFBQyxHQUVWLG1DQUFvQjtBQUFBLFlBQUFNLElBQUFQLEdBQUFDLEdBQ3BCLHNDQUFvQjtBQUFBLFlBQUFPLGFBQUFsQixHQUFBbUI7QUFBQUEsSUFNcEMsMkJBQ0UscUNBSWtDO0FBQUE7QUFBQSxLQUFBQztBQUFBQSxPQUY3QjtBQUFBLFNBQVc7QUFBQSxXQUFLO0FBQUE7QUFBQSxLQUFBQyxJQUNoQixrQkFBTTtBQUFBLElBQ1gsK0JBdERNLG9CQXNENEI7QUFBQTtBQUFBLFlBQUFDLGFBQUF0QixHQUFBbUI7QUFBQUEsSUFHNUIsT0FBWCxrQkFBTSxlQUFLLHVCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWQsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZSxLQUFBZixHQUMzQywrQkFBNEI7QUFBQSxHQXJEdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEdERGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTYxOTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIG4gPj0gMG4gJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IHVuc2lnbmVkX2x0IG4gbSA9XG4gIHN1YiBuIG1pbl9pbnQgPCBzdWIgbSBtaW5faW50XG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZSBiaXRuZXNzLlxuICAgU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2x0IG4gZCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfbHQgciBkIHRoZW4gcSBlbHNlIHN1Y2MgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9oYXNoIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1N5cyIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsInNpemUiLCJtaW5faW50IiwibWF4X2ludCIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiZXF1YWwiLCJ4IiwieSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfbHQiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDMkNxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBO0FBQUEsSUFBQUcsT0Q3Q3hDO0FBQUEsSUFBQUMsVUMrQ2M7QUFBQSxJQUFBQyxVQUNBO0FBQUEsWUFBQUMsT0FBQU4sR0FDZTtBQUFBLE9BQUFLLFlBR2I7QUFBQSxZQUFBRSxnQkFBQVA7QUFBQUEsSUFFVCw4QkFBVyw4QkFDWjtBQUFBLElBRUE7QUFBQSxHQUFJO0FBQUEsWUFBQVEsVUFBQVIsR0FHUSx1Q0FBYTtBQUFBLFlBQUFTLGNBQUFDO0FBQUFBLElBSzdCLFlBQVM7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRGpFWDtBQUFBLDhCQ2tFb0I7QUFBQSxLRGxFcEI7QUFBQTtBQUFBLEdDa0V3QjtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdBSUksMkNBQ1MsQ0FBSTtBQUFBLFlBQUFDLGlCQUFBZixHQUFBZ0I7QUFBQUEsUUFBQUYsSUFHZixpQkFBQUQsSUFBaEI7QUFBQSxJQUprQiw2QkFJYTtBQUFBO0FBQUEsWUFBQUksWUFBQWpCLEdBQUFnQjtBQUFBQSxJQUd2QyxzREFBNkI7QUFBQTtBQUFBLFlBQUFFLElBQUFMLEdBQUFDLEdBRVYsbUNBQW9CO0FBQUEsWUFBQUssSUFBQU4sR0FBQUMsR0FDcEIsc0NBQW9CO0FBQUEsT0FBQU0sT0RoRnpDLEdBQUFDLE1BQUE7QUFBQSxZQUFBQyxhQUFBdEIsR0FBQXVCO0FBQUFBLElDc0ZLLHdCQUNFLHFDQUlrQztBQUFBLFFBQUFDLElBRmxCLHVDQUFBQyxJQUNMO0FBQUEsSUFDWCx3Q0FBa0M7QUFBQTtBQUFBLFlBQUFDLGFBQUExQixHQUFBdUI7QUFBQUEsSUFHNUIsV0FBTCxTQUFLLDBCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWYsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZ0IsS0FBQWhCLEdBQzNDLCtCQUE0QjtBQUFBLEdBOUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJERiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE2MjkwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J1ZmZlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbigqIFRoZSBbaW5uZXJfYnVmZmVyXSB0eXBlIGVuc3VyZXMgdGhhdCB0aGUgW2xlbmd0aF0gYW5kIFtidWZmZXJdIGZpZWxkcyBhcmVcbiAgIGFsd2F5cyBzeW5jaHJvbml6ZWQsIFtsZW5ndGggPSBCeXRlcy5sZW5ndGggYnVmZmVyXSwgZXZlbiBpbiBwcmVzZW5jZVxuICAgb2YgZGF0YSByYWNlcy5cbiopXG50eXBlIGlubmVyX2J1ZmZlciA9IHtcbiAgYnVmZmVyOiBieXRlcztcbiAgbGVuZ3RoOiBpbnQ7XG59XG5cbnR5cGUgdCA9XG4ge211dGFibGUgaW5uZXIgOiBpbm5lcl9idWZmZXI7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIGluaXRpYWxfYnVmZmVyIDogYnl0ZXN9XG4oKiBJbnZhcmlhbnRzOiBhbGwgcGFydHMgb2YgdGhlIGNvZGUgcHJlc2VydmUgdGhlIGludmFyaWFudHMgdGhhdDpcbiAgIC0gW2lubmVyLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBpbm5lci5idWZmZXJdXG4gICBJbiBhYnNlbmNlIG9mIGRhdGEgcmFjZXMsIHdlIGFsc28gaGF2ZVxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIuaW5uZXIubGVuZ3RoXVxuXG4gICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBbYi5wb3NpdGlvbiA9IGIuaW5uZXIubGVuZ3RoXSBpcyBsZWdhbCxcbiAgIGl0IG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWRcbiAgIGJlZm9yZSBhbnkgZnVydGhlciBhZGRpdGlvbi4gKilcblxubGV0IGNyZWF0ZSBuID1cbiBsZXQgbiA9IGlmIG4gPCAxIHRoZW4gMSBlbHNlIG4gaW5cbiBsZXQgbiA9IGlmIG4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBTeXMubWF4X3N0cmluZ19sZW5ndGggZWxzZSBuIGluXG4gbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuIHsgaW5uZXIgPSB7IGJ1ZmZlciA9IHM7IGxlbmd0aCA9IG59OyBwb3NpdGlvbiA9IDA7IGluaXRpYWxfYnVmZmVyID0gc31cblxubGV0IGNvbnRlbnRzIGIgPSBCeXRlcy5zdWJfc3RyaW5nIGIuaW5uZXIuYnVmZmVyIDAgYi5wb3NpdGlvblxubGV0IHRvX2J5dGVzIGIgPSBCeXRlcy5zdWIgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBzdWIgYiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGIucG9zaXRpb24gLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5zdWJcIlxuICBlbHNlIEJ5dGVzLnN1Yl9zdHJpbmcgYi5pbm5lci5idWZmZXIgb2ZzIGxlblxuXG5cbmxldCBibGl0IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IHNyY29mZiA8IDAgfHwgc3Jjb2ZmID4gc3JjLnBvc2l0aW9uIC0gbGVuXG4gICAgICAgICAgICAgfHwgZHN0b2ZmIDwgMCB8fCBkc3RvZmYgPiAoQnl0ZXMubGVuZ3RoIGRzdCkgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5ibGl0XCJcbiAgZWxzZVxuICAgIEJ5dGVzLmJsaXQgc3JjLmlubmVyLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjtsZW5ndGh9ID0gYi5pbm5lciBpblxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBwb3NpdGlvbiB8fCBwb3NpdGlvbiA+IGxlbmd0aCB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYnVmZmVyIG9mc1xuXG5cbmxldCBsZW5ndGggYiA9IGIucG9zaXRpb25cblxubGV0IGNsZWFyIGIgPSBiLnBvc2l0aW9uIDwtIDBcblxubGV0IHJlc2V0IGIgPVxuICBiLnBvc2l0aW9uIDwtIDA7XG4gIGxldCBpbm5lciA9XG4gICAgeyBidWZmZXIgPSBiLmluaXRpYWxfYnVmZmVyOyBsZW5ndGggPSBCeXRlcy5sZW5ndGggYi5pbml0aWFsX2J1ZmZlciB9XG4gIGluXG4gIGIuaW5uZXIgPC0gaW5uZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5pbm5lci5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuaW5uZXJdIGlmIG5lY2Vzc2FyeSAtLSBhbmQgdGh1c1xuICAgaW5jcmVhc2luZyBbYi5pbm5lci5sZW5ndGhdLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5pbm5lci5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuaW5uZXIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuaW5uZXIgPC0geyBidWZmZXIgPSBuZXdfYnVmZmVyOyBsZW5ndGggPSAhbmV3X2xlbiB9XG5cbigqIE5vdGU6XG4gICAgU29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGhhdmUgYSBmYXN0IHBhdGggd2hlbiB0aGUgaW5uZXJcbiAgYnVmZmVyIGRvZXNuJ3QgbmVlZCB0byBiZSBleHRlbmRlZC5cbiAgICBJbiB0aGlzIGNhc2UsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB1bnNhZmUgYWNjZXNzZXMgb24gdGhlXG4gIGNvbnRlbnRzIG9mIHRoZSBbaW5uZXJdIGZpZWxkIHNpbmNlIGl0cyBmaWVsZHMgYXJlIGltbXV0YWJsZS5cbiAgSW4gcHJlc2VuY2Ugb2YgZGF0YSByYWNlcywgd2UgbWF5IGFjY2VzcyB0aGUgd3JvbmcgaW5uZXIgYnVmZmVyLCBidXQgd2VcbiAgd2lsbCB1c2UgdGhpcyBidWZmZXIgc2FmZWx5LlxuICBBcyBzb29uIGFzIHdlIG5lZWQgdG8gcmVzaXplIHRoZSBidWZmZXIsIHdlIGZhbGwgYmFjayB0byBzYWZlIGFjY2Vzc2VzLlxuKilcblxubGV0IGFkZF9jaGFyIGIgYyA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGlmIHBvcyA+PSBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgMTtcbiAgICBCeXRlcy5zZXQgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiBjXG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmlubmVyLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjtsZW5ndGh9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIGxlbjtcbiAgICBCeXRlcy5ibGl0X3N0cmluZyBzIG9mZnNldCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGxlblxuICApIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYnVmZmVyIHBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjsgbGVuZ3RofSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiBsZW47XG4gICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICApIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGJ1ZmZlciBwb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5pbm5lci5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIuaW5uZXIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICBiLnBvc2l0aW9uIDwtIGIucG9zaXRpb24gKyBuO1xuICBuXG5cbmxldCBhZGRfY2hhbm5lbCBiIGljIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gICAoKiBQUiM1MDA0ICopXG4gICAgaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX2NoYW5uZWxcIjtcbiAgbGV0IG4gPSB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gaW5cbiAgKCogSXQgaXMgaW50ZW50aW9uYWwgdGhhdCBhIGNvbnN1bWVyIGNhdGNoaW5nIEVuZF9vZl9maWxlXG4gICAgIHdpbGwgc2VlIHRoZSBkYXRhIHdyaXR0ZW4gKHNlZSAjNjcxOSwgIzcxMzYpLiAqKVxuICBpZiBuIDwgbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICgpXG5cbmxldCBvdXRwdXRfYnVmZmVyIG9jIGIgPVxuICBvdXRwdXQgb2MgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBjbG9zaW5nID0gZnVuY3Rpb25cbiAgfCAnKCcgLT4gJyknXG4gIHwgJ3snIC0+ICd9J1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIG9wZW5pbmcgYW5kIGNsb3Npbmc6IG9wZW4gYW5kIGNsb3NlIGNoYXJhY3RlcnMsIHR5cGljYWxseSAoIGFuZCApXG4gICBrOiBiYWxhbmNlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcnNcbiAgIHM6IHRoZSBzdHJpbmcgd2hlcmUgd2UgYXJlIHNlYXJjaGluZ1xuICAgc3RhcnQ6IHRoZSBpbmRleCB3aGVyZSB3ZSBzdGFydCB0aGUgc2VhcmNoLiAqKVxubGV0IGFkdmFuY2VfdG9fY2xvc2luZyBvcGVuaW5nIGNsb3NpbmcgayBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGsgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgICBpZiBzLltpXSA9IG9wZW5pbmcgdGhlbiBhZHZhbmNlIChrICsgMSkgKGkgKyAxKSBsaW0gZWxzZVxuICAgIGlmIHMuW2ldID0gY2xvc2luZyB0aGVuXG4gICAgICBpZiBrID0gMCB0aGVuIGkgZWxzZSBhZHZhbmNlIChrIC0gMSkgKGkgKyAxKSBsaW1cbiAgICBlbHNlIGFkdmFuY2UgayAoaSArIDEpIGxpbSBpblxuICBhZHZhbmNlIGsgc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxubGV0IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gbGltIGVsc2VcbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScgfCAnXycgLT4gYWR2YW5jZSAoaSArIDEpIGxpbVxuICAgIHwgXyAtPiBpIGluXG4gIGFkdmFuY2Ugc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxuKCogV2UgYXJlIGp1c3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpZGVudCBpbiBzLCBzdGFydGluZyBhdCBzdGFydC4gKilcbmxldCBmaW5kX2lkZW50IHMgc3RhcnQgbGltID1cbiAgaWYgc3RhcnQgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgbWF0Y2ggcy5bc3RhcnRdIHdpdGhcbiAgKCogUGFyZW50aGVzaXplZCBpZGVudCA/ICopXG4gIHwgJygnIHwgJ3snIGFzIGMgLT5cbiAgICAgbGV0IG5ld19zdGFydCA9IHN0YXJ0ICsgMSBpblxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fY2xvc2luZyBjIChjbG9zaW5nIGMpIDAgcyBuZXdfc3RhcnQgaW5cbiAgICAgU3RyaW5nLnN1YiBzIG5ld19zdGFydCAoc3RvcCAtIHN0YXJ0IC0gMSksIHN0b3AgKyAxXG4gICgqIFJlZ3VsYXIgaWRlbnQgKilcbiAgfCBfIC0+XG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCBpblxuICAgICBpZiBzdG9wID0gc3RhcnQgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgICBTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCksIHN0b3BcblxuKCogU3Vic3RpdHV0ZSAkaWRlbnQsICQoaWRlbnQpLCBvciAke2lkZW50fSBpbiBzLFxuICAgIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gbWFwcGluZyBmLiAqKVxubGV0IGFkZF9zdWJzdGl0dXRlIGIgZiBzID1cbiAgbGV0IGxpbSA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcmVjIHN1YnN0IHByZXZpb3VzIGkgPVxuICAgIGlmIGkgPCBsaW0gdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnJCcgYXMgY3VycmVudCB3aGVuIHByZXZpb3VzID0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnJCcgLT5cbiAgICAgICAgIGxldCBqID0gaSArIDEgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIGZpbmRfaWRlbnQgcyBqIGxpbSB3aXRoXG4gICAgICAgICB8IGlkZW50LCBuZXh0X2kgLT5cbiAgICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgICAgc3Vic3QgJyAnIG5leHRfaVxuICAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+XG4gICAgICAgICAgIGFkZF9jaGFyIGIgJyQnO1xuICAgICAgICAgICBzdWJzdCAnICcgalxuICAgICAgICAgZW5kXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cztcbiAgICAgICAgIGlmIGN1cnJlbnQgPD4gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgZW5kIGVsc2VcbiAgICBpZiBwcmV2aW91cyA9ICdcXFxcJyB0aGVuIGFkZF9jaGFyIGIgcHJldmlvdXMgaW5cbiAgc3Vic3QgJyAnIDBcblxubGV0IHRydW5jYXRlIGIgbGVuID1cbiAgICBpZiBsZW4gPCAwIHx8IGxlbiA+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLnRydW5jYXRlXCJcbiAgICBlbHNlXG4gICAgICBiLnBvc2l0aW9uIDwtIGxlblxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMuZ2V0IGIuaW5uZXIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMuZ2V0IGIuaW5uZXIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5cbmxldCBhZGRfaW50OCBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAxO1xuICAgIHNldF9pbnQ4IGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24geFxuICApIGVsc2VcbiAgICB1bnNhZmVfc2V0X2ludDggYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgMiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgMjtcbiAgICBzZXRfaW50MTYgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50MTYgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgNCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgNDtcbiAgICBzZXRfaW50MzIgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50MzIgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgOCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgODtcbiAgICBzZXRfaW50NjQgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50NjQgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JsaXRfc3RyaW5nIiwiY2FtbF9ic3dhcDE2IiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfU3lzIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsIlN0ZGxpYl9TdHJpbmciLCJBc3NlcnRfZmFpbHVyZSIsImR1bW15IiwiY3JlYXRlIiwibiIsInMiLCJjb250ZW50cyIsImIiLCJ0b19ieXRlcyIsInN1YiIsIm9mcyIsImxlbiIsImJsaXQiLCJzcmMiLCJzcmNvZmYiLCJkc3QiLCJkc3RvZmYiLCJudGgiLCJwb3NpdGlvbiIsIm1hdGNoIiwibGVuZ3RoIiwiYnVmZmVyIiwiY2xlYXIiLCJyZXNldCIsImlubmVyIiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImMiLCJwb3MiLCJhZGRfdXRmXzhfdWNoYXIiLCJ1IiwidWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4IiwidWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heCIsImFkZF91dGZfMTZiZV91Y2hhciIsImFkZF91dGZfMTZsZV91Y2hhciIsImFkZF9zdWJzdHJpbmciLCJvZmZzZXQiLCJuZXdfcG9zaXRpb24iLCJhZGRfc3ViYnl0ZXMiLCJhZGRfc3RyaW5nIiwiYWRkX2J5dGVzIiwiYWRkX2J1ZmZlciIsImJzIiwiYWRkX2NoYW5uZWwiLCJpYyIsInRvX3JlYWQiLCJidWYiLCJhbHJlYWR5X3JlYWQiLCJyIiwib3V0cHV0X2J1ZmZlciIsIm9jIiwiYWRkX3N1YnN0aXR1dGUiLCJsaW0iLCJwcmV2aW91cyIsImkiLCJzdGFydCIsIm9wZW5pbmciLCJzdG9wIiwidmFsIiwibmV3X3N0YXJ0IiwiY2xvc2luZyIsImsiLCJleG4iLCJuZXh0X2kiLCJpZGVudCIsInRydW5jYXRlIiwidG9fc2VxIiwiYXV4IiwicGFyYW0iLCJ4IiwidG9fc2VxaSIsImFkZF9zZXEiLCJzZXEiLCJvZl9zZXEiLCJhZGRfaW50OCIsImFkZF9pbnQxNl9uZSIsImFkZF9pbnQzMl9uZSIsImFkZF9pbnQ2NF9uZSIsImFkZF9pbnQxNl9sZSIsImFkZF9pbnQxNl9iZSIsImFkZF9pbnQzMl9sZSIsImFkZF9pbnQzMl9iZSIsImFkZF9pbnQ2NF9sZSIsImFkZF9pbnQ2NF9iZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFD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IjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbXV0ZXgubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBQYXNjYWwgQ3VvcSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk1IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdFxuZXh0ZXJuYWwgY3JlYXRlOiB1bml0IC0+IHQgPSBcImNhbWxfbWxfbXV0ZXhfbmV3XCJcbmV4dGVybmFsIGxvY2s6IHQgLT4gdW5pdCA9IFwiY2FtbF9tbF9tdXRleF9sb2NrXCJcbmV4dGVybmFsIHRyeV9sb2NrOiB0IC0+IGJvb2wgPSBcImNhbWxfbWxfbXV0ZXhfdHJ5X2xvY2tcIlxuZXh0ZXJuYWwgdW5sb2NrOiB0IC0+IHVuaXQgPSBcImNhbWxfbWxfbXV0ZXhfdW5sb2NrXCJcblxuKCogcHJpdmF0ZSByZS1leHBvcnQgKilcbmV4dGVybmFsIHJlcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyZXJhaXNlXCJcblxuKCogY2Fubm90IGlubGluZSwgb3RoZXJ3aXNlIGZsYW1iZGEgbWlnaHQgbW92ZSBjb2RlIGFyb3VuZC4gKilcbmxldFtAaW5saW5lIG5ldmVyXSBwcm90ZWN0IG0gZiA9XG4gIGxvY2sgbTtcbiAgbWF0Y2ggZigpIHdpdGhcbiAgfCB4IC0+XG4gICAgdW5sb2NrIG07IHhcbiAgfCBleGNlcHRpb24gZSAtPlxuICAgICgqIE5PVEU6IFt1bmxvY2tdIGRvZXMgbm90IHBvbGwgZm9yIGFzeW5jaHJvbm91cyBleGNlcHRpb25zICopXG4gICAgdW5sb2NrIG07XG4gICAgcmVyYWlzZSBlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfbXV0ZXhfbG9jayIsImNhbWxfbWxfbXV0ZXhfdW5sb2NrIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJwcm90ZWN0IiwibSIsIngiLCJlIiwiU3RkbGliX011dGV4Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFFBQUFDLEdBQUFIO0FBQUFBLElDMEJFO0FBQUEsSUFBTSxRQUFBSSxJQUNBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSUQzQlI7QUFBQSxLQ2dDSTtBQUFBLEtBQVE7QUFBQTtBQUFBLElBSFI7QUFBQSxJQUFRO0FBQUEsR0FJQztBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTURqQ2IiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjgxNywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIiwiU3RkbGliX0NvbmRpdGlvbiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTY4MzUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZG9tYWluLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICBLQyBTaXZhcmFtYWtyaXNobmFuLCBJbmRpYW4gSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIE1hZHJhcyAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFN0ZXBoZW4gRG9sYW4sIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgVG9tIEtlbGx5LCBPQ2FtbCBMYWJzIENvbnN1bHRhbmN5ICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOSBJbmRpYW4gSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIE1hZHJhcyAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBPQ2FtbCBMYWJzIENvbnN1bHRhbmN5IEx0ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gICgqIExvdy1sZXZlbCBwcmltaXRpdmVzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lICopXG4gIHR5cGUgdCA9IHByaXZhdGUgaW50XG5cbiAgKCogVGhlIGxheW91dHMgb2YgW3N0YXRlXSBhbmQgW3Rlcm1fc3luY10gYXJlIGhhcmQtY29kZWQgaW5cbiAgICAgW3J1bnRpbWUvZG9tYWluLmNdICopXG5cbiAgdHlwZSAnYSBzdGF0ZSA9XG4gICAgfCBSdW5uaW5nXG4gICAgfCBGaW5pc2hlZCBvZiAoJ2EsIGV4bikgcmVzdWx0IFtAd2FybmluZyBcIi11bnVzZWQtY29uc3RydWN0b3JcIl1cblxuICB0eXBlICdhIHRlcm1fc3luYyA9IHtcbiAgICAoKiBwcm90ZWN0ZWQgYnkgW211dF0gKilcbiAgICBtdXRhYmxlIHN0YXRlIDogJ2Egc3RhdGUgW0B3YXJuaW5nIFwiLXVudXNlZC1maWVsZFwiXSA7XG4gICAgbXV0IDogTXV0ZXgudCA7XG4gICAgY29uZCA6IENvbmRpdGlvbi50IDtcbiAgfVxuXG4gIGV4dGVybmFsIHNwYXduIDogKHVuaXQgLT4gJ2EpIC0+ICdhIHRlcm1fc3luYyAtPiB0XG4gICAgPSBcImNhbWxfZG9tYWluX3NwYXduXCJcbiAgZXh0ZXJuYWwgc2VsZiA6IHVuaXQgLT4gdFxuICAgID0gXCJjYW1sX21sX2RvbWFpbl9pZFwiIFtAQG5vYWxsb2NdXG4gIGV4dGVybmFsIGNwdV9yZWxheCA6IHVuaXQgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcIlxuICBleHRlcm5hbCBnZXRfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50OiB1bml0IC0+IGludFxuICAgID0gXCJjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFwiIFtAQG5vYWxsb2NdXG5lbmRcblxubGV0IGNwdV9yZWxheCAoKSA9IFJhdy5jcHVfcmVsYXggKClcblxudHlwZSBpZCA9IFJhdy50XG5cbnR5cGUgJ2EgdCA9IHtcbiAgZG9tYWluIDogUmF3LnQ7XG4gIHRlcm1fc3luYyA6ICdhIFJhdy50ZXJtX3N5bmM7XG59XG5cbm1vZHVsZSBETFMgPSBzdHJ1Y3RcblxuICBtb2R1bGUgT2JqX29wdCA6IHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBub25lIDogdFxuICAgIHZhbCBzb21lIDogJ2EgLT4gdFxuICAgIHZhbCBpc19zb21lIDogdCAtPiBib29sXG5cbiAgICAoKiogW3Vuc2FmZV9nZXQgb2JqXSBtYXkgb25seSBiZSBjYWxsZWQgc2FmZWx5XG4gICAgICAgIGlmIFtpc19zb21lXSBpcyB0cnVlLlxuXG4gICAgICAgIFt1bnNhZmVfZ2V0IChzb21lIHYpXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIFtPYmoub2JqIChPYmoucmVwciB2KV0uICopXG4gICAgdmFsIHVuc2FmZV9nZXQgOiB0IC0+ICdhXG4gIGVuZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IE9iai50XG4gICAgbGV0IG5vbmUgPSBPYmoucmVwciAocmVmIDApXG4gICAgbGV0IHNvbWUgdiA9IE9iai5yZXByIHZcbiAgICBsZXQgaXNfc29tZSBvYmogPSAob2JqICE9IG5vbmUpXG4gICAgbGV0IHVuc2FmZV9nZXQgb2JqID0gT2JqLm9iaiBvYmpcbiAgZW5kXG5cbiAgdHlwZSBkbHNfc3RhdGUgPSBPYmpfb3B0LnQgYXJyYXlcblxuICBleHRlcm5hbCBnZXRfZGxzX3N0YXRlIDogdW5pdCAtPiBkbHNfc3RhdGUgPSBcIiVkbHNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXRfZGxzX3N0YXRlIDogZGxzX3N0YXRlIC0+IHVuaXQgPVxuICAgIFwiY2FtbF9kb21haW5fZGxzX3NldFwiIFtAQG5vYWxsb2NdXG5cbiAgZXh0ZXJuYWwgY29tcGFyZV9hbmRfc2V0X2Rsc19zdGF0ZSA6IGRsc19zdGF0ZSAtPiBkbHNfc3RhdGUgLT4gYm9vbCA9XG4gICAgXCJjYW1sX2RvbWFpbl9kbHNfY29tcGFyZV9hbmRfc2V0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY3JlYXRlX2RscyAoKSA9XG4gICAgbGV0IHN0ID0gQXJyYXkubWFrZSA4IE9ial9vcHQubm9uZSBpblxuICAgIHNldF9kbHNfc3RhdGUgc3RcblxuICBsZXQgXyA9IGNyZWF0ZV9kbHMgKClcblxuICB0eXBlICdhIGtleSA9IGludCAqICh1bml0IC0+ICdhKVxuXG4gIGxldCBrZXlfY291bnRlciA9IEF0b21pYy5tYWtlIDBcblxuICB0eXBlIGtleV9pbml0aWFsaXplciA9XG4gICAgS0k6ICdhIGtleSAqICgnYSAtPiAnYSkgLT4ga2V5X2luaXRpYWxpemVyXG5cbiAgbGV0IHBhcmVudF9rZXlzID0gQXRvbWljLm1ha2UgKFtdIDoga2V5X2luaXRpYWxpemVyIGxpc3QpXG5cbiAgbGV0IHJlYyBhZGRfcGFyZW50X2tleSBraSA9XG4gICAgbGV0IGwgPSBBdG9taWMuZ2V0IHBhcmVudF9rZXlzIGluXG4gICAgaWYgbm90IChBdG9taWMuY29tcGFyZV9hbmRfc2V0IHBhcmVudF9rZXlzIGwgKGtpIDo6IGwpKVxuICAgIHRoZW4gYWRkX3BhcmVudF9rZXkga2lcblxuICBsZXQgbmV3X2tleSA/c3BsaXRfZnJvbV9wYXJlbnQgaW5pdF9vcnBoYW4gPVxuICAgIGxldCBpZHggPSBBdG9taWMuZmV0Y2hfYW5kX2FkZCBrZXlfY291bnRlciAxIGluXG4gICAgbGV0IGsgPSAoaWR4LCBpbml0X29ycGhhbikgaW5cbiAgICBiZWdpbiBtYXRjaCBzcGxpdF9mcm9tX3BhcmVudCB3aXRoXG4gICAgfCBOb25lIC0+ICgpXG4gICAgfCBTb21lIHNwbGl0IC0+IGFkZF9wYXJlbnRfa2V5IChLSShrLCBzcGxpdCkpXG4gICAgZW5kO1xuICAgIGtcblxuICAoKiBJZiBuZWNlc3NhcnksIGdyb3cgdGhlIGN1cnJlbnQgZG9tYWluJ3MgbG9jYWwgc3RhdGUgYXJyYXkgc3VjaCB0aGF0IFtpZHhdXG4gICAqIGlzIGEgdmFsaWQgaW5kZXggaW4gdGhlIGFycmF5LiAqKVxuICBsZXQgcmVjIG1heWJlX2dyb3cgaWR4ID1cbiAgICBsZXQgc3QgPSBnZXRfZGxzX3N0YXRlICgpIGluXG4gICAgbGV0IHN6ID0gQXJyYXkubGVuZ3RoIHN0IGluXG4gICAgaWYgaWR4IDwgc3ogdGhlbiBzdFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByZWMgY29tcHV0ZV9uZXdfc2l6ZSBzID1cbiAgICAgICAgaWYgaWR4IDwgcyB0aGVuIHMgZWxzZSBjb21wdXRlX25ld19zaXplICgyICogcylcbiAgICAgIGluXG4gICAgICBsZXQgbmV3X3N6ID0gY29tcHV0ZV9uZXdfc2l6ZSBzeiBpblxuICAgICAgbGV0IG5ld19zdCA9IEFycmF5Lm1ha2UgbmV3X3N6IE9ial9vcHQubm9uZSBpblxuICAgICAgQXJyYXkuYmxpdCBzdCAwIG5ld19zdCAwIHN6O1xuICAgICAgKCogV2Ugd2FudCBhIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG9cbiAgICAgICAgIHNpbmdsZS1kb21haW4gbXVsdGktdGhyZWFkaW5nOiByZXRyeSBpZiB0aGUgRExTIHN0YXRlIGhhc1xuICAgICAgICAgY2hhbmdlZCB1bmRlciBvdXIgZmVldC5cbiAgICAgICAgIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMgd2lsbCBiZSB2ZXJ5IHNtYWxsIGluXG4gICAgICAgICBjb250ZW5kZWQgc2NlbmFyaW9zLCBhcyB0aGUgYXJyYXkgb25seSBncm93cywgd2l0aFxuICAgICAgICAgZXhwb25lbnRpYWwgcmVzaXppbmcuICopXG4gICAgICBpZiBjb21wYXJlX2FuZF9zZXRfZGxzX3N0YXRlIHN0IG5ld19zdFxuICAgICAgdGhlbiBuZXdfc3RcbiAgICAgIGVsc2UgbWF5YmVfZ3JvdyBpZHhcbiAgICBlbmRcblxuICBsZXQgc2V0ICh0eXBlIGEpIChpZHgsIF9pbml0KSAoeCA6IGEpID1cbiAgICBsZXQgc3QgPSBtYXliZV9ncm93IGlkeCBpblxuICAgICgqIFtTeXMub3BhcXVlX2lkZW50aXR5XSBlbnN1cmVzIHRoYXQgZmxhbWJkYSBkb2VzIG5vdCBsb29rIGF0IHRoZSB0eXBlIG9mXG4gICAgICogW3hdLCB3aGljaCBtYXkgYmUgYSBbZmxvYXRdIGFuZCBjb25jbHVkZSB0aGF0IHRoZSBbc3RdIGlzIGEgZmxvYXQgYXJyYXkuXG4gICAgICogV2UgZG8gbm90IHdhbnQgT0NhbWwncyBmbG9hdCBhcnJheSBvcHRpbWlzYXRpb24ga2lja2luZyBpbiBoZXJlLiAqKVxuICAgIHN0LihpZHgpIDwtIE9ial9vcHQuc29tZSAoU3lzLm9wYXF1ZV9pZGVudGl0eSB4KVxuXG5cbiAgbGV0W0BpbmxpbmUgbmV2ZXJdIGFycmF5X2NvbXBhcmVfYW5kX3NldCBhIGkgb2xkdmFsIG5ld3ZhbCA9XG4gICAgKCogTm90ZTogd2UgY2Fubm90IHVzZSBbQHBvbGwgZXJyb3JdIGR1ZSB0byB0aGVcbiAgICAgICBhbGxvY2F0aW9ucyBvbiBhLihpKSBpbiB0aGUgRG91YmxlX2FycmF5IGNhc2UuICopXG4gICAgbGV0IGN1cnZhbCA9IGEuKGkpIGluXG4gICAgaWYgY3VydmFsID09IG9sZHZhbCB0aGVuIChcbiAgICAgIEFycmF5LnVuc2FmZV9zZXQgYSBpIG5ld3ZhbDtcbiAgICAgIHRydWVcbiAgICApIGVsc2UgZmFsc2VcblxuICBsZXQgZ2V0ICh0eXBlIGEpICgoaWR4LCBpbml0KSA6IGEga2V5KSA6IGEgPVxuICAgIGxldCBzdCA9IG1heWJlX2dyb3cgaWR4IGluXG4gICAgbGV0IG9iaiA9IHN0LihpZHgpIGluXG4gICAgaWYgT2JqX29wdC5pc19zb21lIG9ialxuICAgIHRoZW4gKE9ial9vcHQudW5zYWZlX2dldCBvYmogOiBhKVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCB2IDogYSA9IGluaXQgKCkgaW5cbiAgICAgIGxldCBuZXdfb2JqID0gT2JqX29wdC5zb21lIChTeXMub3BhcXVlX2lkZW50aXR5IHYpIGluXG4gICAgICAoKiBBdCB0aGlzIHBvaW50LCBbc3RdIG9yIFtzdC4oaWR4KV0gbWF5IGhhdmUgYmVlbiBjaGFuZ2VkXG4gICAgICAgICBieSBhbm90aGVyIHRocmVhZCBvbiB0aGUgc2FtZSBkb21haW4uXG5cbiAgICAgICAgIElmIFtzdF0gY2hhbmdlZCwgaXQgd2FzIHJlc2l6ZWQgaW50byBhIGxhcmdlciB2YWx1ZSxcbiAgICAgICAgIHdlIGNhbiBqdXN0IHJldXNlIHRoZSBuZXcgdmFsdWUuXG5cbiAgICAgICAgIElmIFtzdC4oaWR4KV0gY2hhbmdlZCwgd2UgZHJvcCB0aGUgY3VycmVudCB2YWx1ZSB0byBhdm9pZFxuICAgICAgICAgbGV0dGluZyBvdGhlciB0aHJlYWRzIG9ic2VydmUgYSAncmV2ZXJ0JyB0aGF0IGZvcmdldHNcbiAgICAgICAgIHByZXZpb3VzIG1vZGlmaWNhdGlvbnMuICopXG4gICAgICBsZXQgc3QgPSBnZXRfZGxzX3N0YXRlICgpIGluXG4gICAgICBpZiBhcnJheV9jb21wYXJlX2FuZF9zZXQgc3QgaWR4IG9iaiBuZXdfb2JqXG4gICAgICB0aGVuIHZcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgKCogaWYgc3QuKGlkeCkgY2hhbmdlZCwgc29tZW9uZSBtdXN0IGhhdmUgaW5pdGlhbGl6ZWRcbiAgICAgICAgICAgdGhlIGtleSBpbiB0aGUgbWVhbnRpbWUuICopXG4gICAgICAgIGxldCB1cGRhdGVkX29iaiA9IHN0LihpZHgpIGluXG4gICAgICAgIGlmIE9ial9vcHQuaXNfc29tZSB1cGRhdGVkX29ialxuICAgICAgICB0aGVuIChPYmpfb3B0LnVuc2FmZV9nZXQgdXBkYXRlZF9vYmogOiBhKVxuICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgdHlwZSBrZXlfdmFsdWUgPSBLViA6ICdhIGtleSAqICdhIC0+IGtleV92YWx1ZVxuXG4gIGxldCBnZXRfaW5pdGlhbF9rZXlzICgpIDoga2V5X3ZhbHVlIGxpc3QgPVxuICAgIExpc3QubWFwXG4gICAgICAoZnVuIChLSSAoaywgc3BsaXQpKSAtPiBLViAoaywgKHNwbGl0IChnZXQgaykpKSlcbiAgICAgIChBdG9taWMuZ2V0IHBhcmVudF9rZXlzKVxuXG4gIGxldCBzZXRfaW5pdGlhbF9rZXlzIChsOiBrZXlfdmFsdWUgbGlzdCkgPVxuICAgIExpc3QuaXRlciAoZnVuIChLViAoaywgdikpIC0+IHNldCBrIHYpIGxcbmVuZFxuXG4oKioqKioqKiogSWRlbnRpdHkgKioqKioqKioqKilcblxubGV0IGdldF9pZCB7IGRvbWFpbjsgXyB9ID0gZG9tYWluXG5cbmxldCBzZWxmICgpID0gUmF3LnNlbGYgKClcblxubGV0IGlzX21haW5fZG9tYWluICgpID0gKHNlbGYgKCkgOj4gaW50KSA9IDBcblxuKCoqKioqKioqIENhbGxiYWNrcyAqKioqKioqKioqKVxuXG4oKiBmaXJzdCBzcGF3biwgZG9tYWluIHN0YXJ0dXAgYW5kIGF0IGV4aXQgZnVuY3Rpb25hbGl0eSAqKVxubGV0IGZpcnN0X2RvbWFpbl9zcGF3bmVkID0gQXRvbWljLm1ha2UgZmFsc2VcblxubGV0IGZpcnN0X3NwYXduX2Z1bmN0aW9uID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBiZWZvcmVfZmlyc3Rfc3Bhd24gZiA9XG4gIGlmIEF0b21pYy5nZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiZmlyc3QgZG9tYWluIGFscmVhZHkgc3Bhd25lZFwiKVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IG9sZF9mID0gIWZpcnN0X3NwYXduX2Z1bmN0aW9uIGluXG4gICAgbGV0IG5ld19mICgpID0gb2xkX2YgKCk7IGYgKCkgaW5cbiAgICBmaXJzdF9zcGF3bl9mdW5jdGlvbiA6PSBuZXdfZlxuICBlbmRcblxubGV0IGRvX2JlZm9yZV9maXJzdF9zcGF3biAoKSA9XG4gIGlmIG5vdCAoQXRvbWljLmdldCBmaXJzdF9kb21haW5fc3Bhd25lZCkgdGhlbiBiZWdpblxuICAgIEF0b21pYy5zZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgdHJ1ZTtcbiAgICAhZmlyc3Rfc3Bhd25fZnVuY3Rpb24oKTtcbiAgICAoKiBSZWxlYXNlIHRoZSBvbGQgZnVuY3Rpb24gKilcbiAgICBmaXJzdF9zcGF3bl9mdW5jdGlvbiA6PSAoZnVuICgpIC0+ICgpKVxuICBlbmRcblxubGV0IGF0X2V4aXRfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPiAoZnVuICgpIC0+ICgpKSlcblxubGV0IGF0X2V4aXQgZiA9XG4gIGxldCBvbGRfZXhpdCA6IHVuaXQgLT4gdW5pdCA9IERMUy5nZXQgYXRfZXhpdF9rZXkgaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBmICgpOyBvbGRfZXhpdCAoKVxuICBpblxuICBETFMuc2V0IGF0X2V4aXRfa2V5IG5ld19leGl0XG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgbGV0IGYgOiB1bml0IC0+IHVuaXQgPSBETFMuZ2V0IGF0X2V4aXRfa2V5IGluXG4gIGYgKClcblxubGV0IF8gPSBTdGRsaWIuZG9fZG9tYWluX2xvY2FsX2F0X2V4aXQgOj0gZG9fYXRfZXhpdFxuXG4oKioqKioqKiBDcmVhdGlvbiBhbmQgVGVybWluYXRpb24gKioqKioqKiopXG5cbmxldCBzcGF3biBmID1cbiAgZG9fYmVmb3JlX2ZpcnN0X3NwYXduICgpO1xuICBsZXQgcGsgPSBETFMuZ2V0X2luaXRpYWxfa2V5cyAoKSBpblxuXG4gICgqIFt0ZXJtX3N5bmNdIGlzIHVzZWQgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgam9pbmluZyBkb21haW5zICopXG4gIGxldCB0ZXJtX3N5bmMgPVxuICAgIFJhdy57IHN0YXRlID0gUnVubmluZyA7XG4gICAgICAgICAgbXV0ID0gTXV0ZXguY3JlYXRlICgpIDtcbiAgICAgICAgICBjb25kID0gQ29uZGl0aW9uLmNyZWF0ZSAoKSB9XG4gIGluXG5cbiAgbGV0IGJvZHkgKCkgPVxuICAgIG1hdGNoXG4gICAgICBETFMuY3JlYXRlX2RscyAoKTtcbiAgICAgIERMUy5zZXRfaW5pdGlhbF9rZXlzIHBrO1xuICAgICAgbGV0IHJlcyA9IGYgKCkgaW5cbiAgICAgIHJlc1xuICAgIHdpdGhcbiAgICAoKiBSdW4gdGhlIFthdF9leGl0XSBjYWxsYmFja3Mgd2hlbiB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIGVpdGhlclxuICAgICAgIHRlcm1pbmF0ZXMgbm9ybWFsbHkgb3IgZXhjZXB0aW9uYWxseS4gKilcbiAgICB8IHJlcyAtPlxuICAgICAgICAoKiBJZiB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIHRlcm1pbmF0ZWQgbm9ybWFsbHksIGJ1dCB0aGVcbiAgICAgICAgICAgW2F0X2V4aXRdIGNhbGxiYWNrcyByYWlzZWQgYW4gZXhjZXB0aW9uLCB0aGVuIHJldHVybiB0aGVcbiAgICAgICAgICAgZXhjZXB0aW9uLiAqKVxuICAgICAgICBkb19hdF9leGl0ICgpO1xuICAgICAgICByZXNcbiAgICB8IGV4Y2VwdGlvbiBleG4gLT5cbiAgICAgICAgKCogSWYgYm90aCB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIGFuZCB0aGUgW2F0X2V4aXRdIGNhbGxiYWNrc1xuICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLCB0aGVuIGlnbm9yZSB0aGUgZXhjZXB0aW9uIGZyb20gdGhlXG4gICAgICAgICAgIFthdF9leGl0XSBjYWxsYmFja3MgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLiAqKVxuICAgICAgICAodHJ5IGRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgcmFpc2UgZXhuXG4gIGluXG4gIGxldCBkb21haW4gPSBSYXcuc3Bhd24gYm9keSB0ZXJtX3N5bmMgaW5cbiAgeyBkb21haW4gOyB0ZXJtX3N5bmMgfVxuXG5sZXQgam9pbiB7IHRlcm1fc3luYyA7IF8gfSA9XG4gIGxldCBvcGVuIFJhdyBpblxuICBsZXQgcmVjIGxvb3AgKCkgPVxuICAgIG1hdGNoIHRlcm1fc3luYy5zdGF0ZSB3aXRoXG4gICAgfCBSdW5uaW5nIC0+XG4gICAgICAgIENvbmRpdGlvbi53YWl0IHRlcm1fc3luYy5jb25kIHRlcm1fc3luYy5tdXQ7XG4gICAgICAgIGxvb3AgKClcbiAgICB8IEZpbmlzaGVkIHJlcyAtPlxuICAgICAgICByZXNcbiAgaW5cbiAgbWF0Y2ggTXV0ZXgucHJvdGVjdCB0ZXJtX3N5bmMubXV0IGxvb3Agd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGV4IC0+IHJhaXNlIGV4XG5cbmxldCByZWNvbW1lbmRlZF9kb21haW5fY291bnQgPSBSYXcuZ2V0X3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9kb21haW5fZGxzX2dldCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9kb21haW5faWQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQ29uZGl0aW9uIiwiU3RkbGliX011dGV4IiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9MaXN0IiwiQXNzZXJ0X2ZhaWx1cmUiLCJjcHVfcmVsYXgiLCJwYXJhbSIsIm5vbmUiLCJjcmVhdGVfZGxzIiwic3QiLCJrZXlfY291bnRlciIsInBhcmVudF9rZXlzIiwibmV3X2tleSIsInNwbGl0X2Zyb21fcGFyZW50IiwiaW5pdF9vcnBoYW4iLCJpZHgiLCJrIiwic3BsaXQiLCJraSIsImwiLCJtYXliZV9ncm93Iiwic3oiLCJuZXdfc3oiLCJuZXdfc3QiLCJzIiwic2V0IiwieCIsImdldCIsImluaXQiLCJvbGR2YWwiLCJuZXdfb2JqIiwiY3VydmFsIiwidXBkYXRlZF9vYmoiLCJzZXRfaW5pdGlhbF9rZXlzIiwidiIsImdldF9pZCIsImRvbWFpbiIsInNlbGYiLCJpc19tYWluX2RvbWFpbiIsImZpcnN0X2RvbWFpbl9zcGF3bmVkIiwiZmlyc3Rfc3Bhd25fZnVuY3Rpb24iLCJiZWZvcmVfZmlyc3Rfc3Bhd24iLCJvbGRfZiIsIm5ld19mIiwiYXRfZXhpdF9rZXkiLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJuZXdfZXhpdCIsImRvX2F0X2V4aXQiLCJzcGF3biIsInBrIiwidGVybV9zeW5jIiwiYm9keSIsInJlcyIsImV4biIsImpvaW4iLCJsb29wIiwibWF0Y2giLCJleCIsInJlY29tbWVuZGVkX2RvbWFpbl9jb3VudCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtB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bUMsWUFERDtBQUFBLGFBQUFDLEtBQUE5QztBQUFBQSxLQUtaLElBQ0UsZUFDQSwwQkFBQStDLE1BQ1U7QUFBQSxXQUFBQztBQUFBQSxVQUFBQSxNRHRRaEI7QUFBQSxVQ3FSYSxxQkFBQUE7QUFBQUEsTUFDTDtBQUFBO0FBQUEsS0FQQTtBQUFBLEtBQWE7QUFBQSxJQU9KO0FBQUEsUUFBQWxCLFNBRUY7QUFBQSxJQUNiO0FBQUEsR0FBc0I7QUFBQSxZQUFBbUIsS0FBQWpEO0FBQUFBLFFBQUE2QyxZQUVmO0FBQUEsYUFBQUssS0FBQWxEO0FBQUFBLEtBR0w7QUFBQSxVQUFBbUQsUUFBQTtBQUFBLG9CQUFBSixNQUFBLFVBS0k7QUFBQSxNQUhBO0FBQUE7QUFBQSxJQUdHO0FBQUEsUUFBQUksUUFFSDtBQUFBLElBQWdDLHVCQUFBL0IsSUFBQSxVQUM1QjtBQUFBLFFBQUFnQyxLQUQ0QjtBQUFBO0FBQUEsR0FFaEI7QUFBQSxPQUFBQywyQkFqRWdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR0T3hEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTcwMzEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAoKiBUb29scyB0byBtYW5pcHVsYXRlIHNjYW5uaW5nIHNldCBvZiBjaGFycyAoc2VlICVbLi4uXSkgKilcblxudHlwZSBtdXRhYmxlX2NoYXJfc2V0ID0gYnl0ZXNcblxuKCogQ3JlYXRlIGEgZnJlc2gsIGVtcHR5LCBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGNyZWF0ZV9jaGFyX3NldCAoKSA9IEJ5dGVzLm1ha2UgMzIgJ1xcMDAwJ1xuXG4oKiBBZGQgYSBjaGFyIGluIGEgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICBCeXRlcy5zZXQgY2hhcl9zZXQgc3RyX2luZFxuICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKEJ5dGVzLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsb3IgbWFzaykpXG5cbmxldCBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBCeXRlcy50b19zdHJpbmcgY2hhcl9zZXRcblxuKCogQ29tcHV0ZSB0aGUgY29tcGxlbWVudCBvZiBhIGNoYXIgc2V0LiAqKVxubGV0IHJldl9jaGFyX3NldCBjaGFyX3NldCA9XG4gIGxldCBjaGFyX3NldCcgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgZm9yIGkgPSAwIHRvIDMxIGRvXG4gICAgQnl0ZXMuc2V0IGNoYXJfc2V0JyBpXG4gICAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IGkpIGx4b3IgMHhGRikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGNoYXJfc2V0J1xuXG4oKiBSZXR1cm4gdHJ1ZSBpZiBhIGBjJyBpcyBpbiBgY2hhcl9zZXQnLiAqKVxubGV0IGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxhbmQgbWFzaykgPD4gMFxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogSWdub3JlZCBwYXJhbSBjb252ZXJzaW9uICopXG5cbigqIEdBRFQgdXNlZCB0byBhYnN0cmFjdCBhbiBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlci4gKilcbigqIFNlZSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiID0gUGFyYW1fZm9ybWF0X0VCQiA6XG4gICAgKCd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiXG5cbigqIENvbXB1dGUgYSBwYWRkaW5nIGFzc29jaWF0ZWQgdG8gYSBwYWRfb3B0aW9uIChzZWUgXCIlXzQyZFwiKS4gKilcbmxldCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wYWRkaW5nXG4gIHwgU29tZSB3aWR0aCAtPiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuXG4oKiBDb21wdXRlIGEgcHJlY2lzaW9uIGFzc29jaWF0ZWQgdG8gYSBwcmVjX29wdGlvbiAoc2VlIFwiJV8uNDJmXCIpLiAqKVxubGV0IHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQgPSBtYXRjaCBwcmVjX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wcmVjaXNpb25cbiAgfCBTb21lIG5kZWMgLT4gTGl0X3ByZWNpc2lvbiBuZGVjXG5cbigqIFR1cm4gYW4gaWdub3JlZCBwYXJhbSBpbnRvIGl0cyBlcXVpdmFsZW50IG5vdC1pZ25vcmVkIGZvcm1hdCBub2RlLiAqKVxuKCogVXNlZCBmb3IgZm9ybWF0IHByZXR0eS1wcmludGluZyBhbmQgU2NhbmYuICopXG5sZXQgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+ICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYXJhbV9mb3JtYXRfZWJiID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2hhciBmbXQpXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX2NoYXIgZm10KVxuICB8IElnbm9yZWRfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDMyIChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50MzIgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChOYXRpdmVpbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQ2NCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDY0IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfZmxvYXQgKHBhZF9vcHQsIHByZWNfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGbG9hdCAoKEZsb2F0X2ZsYWdfLCBGbG9hdF9mKSxcbiAgICAgICAgICAgICAgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Jvb2wgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEJvb2wgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChSZWFkZXIgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10KVxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlcyAqKVxuXG50eXBlICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlbiA9XG4gIHwgQWNjX29wZW5fdGFnIG9mICgnYiwgJ2MpIGFjY1xuICB8IEFjY19vcGVuX2JveCBvZiAoJ2IsICdjKSBhY2NcblxuKCogUmV2ZXJzZWQgbGlzdCBvZiBwcmludGluZyBhdG9tcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBwcmludGYgYXJndW1lbnRzLiAqKVxuYW5kICgnYiwgJ2MpIGFjYyA9XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IG9mICgnYiwgJ2MpIGFjYyAqIGZvcm1hdHRpbmdfbGl0XG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gb2YgKCdiLCAnYykgYWNjICogKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuXG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBMaXRlcmFsIHN0cmluZyAqKVxuICB8IEFjY19jaGFyX2xpdGVyYWwgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIExpdGVyYWwgY2hhciAqKVxuICB8IEFjY19kYXRhX3N0cmluZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIEdlbmVyYXRlZCBzdHJpbmcgKilcbiAgfCBBY2NfZGF0YV9jaGFyICAgICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBHZW5lcmF0ZWQgY2hhciAqKVxuICB8IEFjY19kZWxheSAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IgLT4gJ2MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBEZWxheWVkIHByaW50aW5nICglYSwgJXQpICopXG4gIHwgQWNjX2ZsdXNoICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAgICAgICAgICAgICAgKCogRmx1c2ggKilcbiAgfCBBY2NfaW52YWxpZF9hcmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nXG4gICAgICAoKiBSYWlzZSBJbnZhbGlkX2FyZ3VtZW50IG1zZyAqKVxuICB8IEVuZF9vZl9hY2NcblxuKCogTGlzdCBvZiBoZXRlcm9nZW5lb3VzIHZhbHVlcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBzY2FuZiBjYWxsYmFjayBhcmd1bWVudHMuICopXG50eXBlICgnYSwgJ2IpIGhldGVyX2xpc3QgPVxuICB8IENvbnMgOiAnYyAqICgnYSwgJ2IpIGhldGVyX2xpc3QgLT4gKCdjIC0+ICdhLCAnYikgaGV0ZXJfbGlzdFxuICB8IE5pbCA6ICgnYiwgJ2IpIGhldGVyX2xpc3RcblxuKCogRXhpc3RlbnRpYWwgQmxhY2sgQm94ZXMuICopXG4oKiBVc2VkIHRvIGFic3RyYWN0IHNvbWUgZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRkaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmIgPSBQYWRkaW5nX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRwcmVjIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmIgPSBQYWRwcmVjX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICd6KSBwcmVjaXNpb24gKiAoJ3osICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZGRpbmdfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiID0gUGFkZGluZ19mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwYWRkaW5nICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wcmVjaXNpb25fZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmIgPSBQcmVjaXNpb25fZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkcHJlY19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmIgPSBQYWRwcmVjX2ZtdF9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAncCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgdGhlICdhIGFuZCAnZCBwYXJhbWV0ZXJzIG9mIGFuIGZtdC4gKilcbigqIE91dHB1dCB0eXBlIG9mIHRoZSBmb3JtYXQgcGFyc2luZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiID0gRm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2Zvcm1hdF9nZW4gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiID0gRm10X2ZtdHR5X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXQgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYiA9IEZtdHR5X2ZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10dHkgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10X2ZtdHR5X2ViYiAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgZm10dHkgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIGZvcm1hdCB0eXBlcy4gKilcbnR5cGUgZm10dHlfZWJiID0gRm10dHlfRUJCIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+IGZtdHR5X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcGFkZGluZyB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcGFkZGluZ3MuICopXG50eXBlIHBhZGRpbmdfZWJiID0gUGFkZGluZ19FQkIgOiAoJ2EsICdiKSBwYWRkaW5nIC0+IHBhZGRpbmdfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwcmVjaXNpb24gdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHByZWNpc2lvbnMuICopXG50eXBlIHByZWNpc2lvbl9lYmIgPSBQcmVjaXNpb25fRUJCIDogKCdhLCAnYikgcHJlY2lzaW9uIC0+IHByZWNpc2lvbl9lYmJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb25zdGFudHMgKilcblxuKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IHByaW50aW5nLiAqKVxubGV0IGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252ID1cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyB8IEZsb2F0X2ggfCBGbG9hdF9IXG4gIHwgRmxvYXRfQ0YgLT4gLTZcbiAgKCogRm9yICVoICVIIGFuZCAlI0YgZm9ybWF0cywgYSBuZWdhdGl2ZSBwcmVjaXNpb24gbWVhbnMgXCJhcyBtYW55IGRpZ2l0cyBhc1xuICAgICBuZWNlc3NhcnlcIi4gIEZvciB0aGUgb3RoZXIgRlAgZm9ybWF0cywgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgb2YgdGhlIHByZWNpc2lvbiwgaGVuY2UgNiBkaWdpdHMgYnkgZGVmYXVsdC4gKilcbiAgfCBGbG9hdF9GIC0+IDEyXG4gICgqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBPQ2FtbCBmbG9hdCBwcmludGluZyAoJUYpLiAqKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEV4dGVybmFscyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQ6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDMyOiBzdHJpbmcgLT4gaW50MzIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDMyX2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfbmF0aXZlaW50OiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ2NDogc3RyaW5nIC0+IGludDY0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQ2NF9mb3JtYXRcIlxuZXh0ZXJuYWwgaGV4c3RyaW5nX29mX2Zsb2F0OiBmbG9hdCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0XCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICgqIFRvb2xzIHRvIHByZXR0eS1wcmludCBmb3JtYXRzICopXG5cbigqIFR5cGUgb2YgZXh0ZW5zaWJsZSBjaGFyYWN0ZXIgYnVmZmVycy4gKilcbnR5cGUgYnVmZmVyID0ge1xuICBtdXRhYmxlIGluZCA6IGludDtcbiAgbXV0YWJsZSBieXRlcyA6IGJ5dGVzO1xufVxuXG4oKiBDcmVhdGUgYSBmcmVzaCBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NyZWF0ZSBpbml0X3NpemUgPSB7IGluZCA9IDA7IGJ5dGVzID0gQnl0ZXMuY3JlYXRlIGluaXRfc2l6ZSB9XG5cbigqIENoZWNrIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgZ3JvdyBpdCBpZiBuZWVkZWQuICopXG5sZXQgYnVmZmVyX2NoZWNrX3NpemUgYnVmIG92ZXJoZWFkID1cbiAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBidWYuYnl0ZXMgaW5cbiAgbGV0IG1pbl9sZW4gPSBidWYuaW5kICsgb3ZlcmhlYWQgaW5cbiAgaWYgbWluX2xlbiA+IGxlbiB0aGVuIChcbiAgICBsZXQgbmV3X2xlbiA9IEludC5tYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaWduXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXRzLiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9mb3JtYXRfZmxvYXQiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImNhbWxfY2FsbDQiLCJhMyIsImNhbWxfY2FsbDUiLCJhNCIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJBc3NlcnRfZmFpbHVyZSIsIkNhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcyIsIlN0ZGxpYiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0ludCIsImNyZWF0ZV9jaGFyX3NldCIsInBhcmFtIiwiYWRkX2luX2NoYXJfc2V0IiwiY2hhcl9zZXQiLCJjIiwic3RyX2luZCIsIm1hc2siLCJmcmVlemVfY2hhcl9zZXQiLCJyZXZfY2hhcl9zZXQiLCJpIiwiaXNfaW5fY2hhcl9zZXQiLCJwYWRfb2ZfcGFkX29wdCIsInBhZF9vcHQiLCJ3aWR0aCIsInBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCIsImlnbiIsImZtdCIsImljb252IiwicHJlY19vcHQiLCJuZGVjIiwiZm10dHkiLCJ3aWR0aF9vcHQiLCJjb3VudGVyIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJmY29udiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsImJ1ZiIsIm92ZXJoZWFkIiwibGVuIiwibWluX2xlbiIsIm5ld19sZW4iLCJuZXdfc3RyIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfaWNvbnYiLCJjaGFyX29mX2Zjb252Iiwib3B0IiwiY0YiLCJicHJpbnRfY2hhcl9zZXQiLCJwcmludF9jaGFyIiwic2V0IiwiaXNfYWxvbmUiLCJhZnRlciIsImJlZm9yZSIsInN3aXRjaGVyIiwiaiIsImJwcmludF9wYWR0eSIsInBhZHR5IiwiYnByaW50X2lnbm9yZWRfZmxhZyIsImlnbl9mbGFnIiwiYnByaW50X3BhZF9vcHQiLCJicHJpbnRfcGFkZGluZyIsInBhZCIsIm4iLCJicHJpbnRfcHJlY2lzaW9uIiwicHJlYyIsImJwcmludF9pY29udl9mbGFnIiwiYnByaW50X2FsdGludF9mbXQiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyIiwiYnByaW50X2NoYXJfbGl0ZXJhbCIsImNociIsImJwcmludF9zdHJpbmdfbGl0ZXJhbCIsImNzdF9MaSIsImNzdF9pIiwiY3N0X2xpIiwiY3N0X25pIiwiYnByaW50X2ZtdHR5Iiwic3ViX2ZtdHR5IiwiaW50X29mX2N1c3RvbV9hcml0eSIsIngiLCJjc3QiLCJzdHJpbmdfb2ZfZm10IiwiZm10aXRlciIsInJlc3QiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImFyaXR5Iiwic3ltbSIsInR5IiwidHkyIiwidHkxIiwiZm10dHlfcmVsX2RldCIsIm1hdGNoIiwiZGUiLCJhZiIsImpkIiwiZ2EiLCJjc3RfY2FtbGludGVybmFsRm9ybWF0X21sIiwidHJhbnMiLCJyZXN0MSIsInJlc3QyIiwidHkxMiIsInR5MTEiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJmbXR0eV9vZl9mbXQiLCJ0eV9yZXN0IiwicHJlY190eSIsImZvcm1hdHRpbmdfZ2VuIiwiZm10dHlfb2ZfY3VzdG9tIiwiZm10dHlfb2ZfcGFkZGluZ19mbXR0eSIsImZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSIsIlR5cGVfbWlzbWF0Y2giLCJ0eXBlX3BhZGRpbmciLCJ3IiwidHlwZV9wYWRwcmVjIiwicCIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10dHkwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0Iiwic3ViX2ZtdHR5MSIsImZtdDEiLCJmbXR0eTIiLCJmbXQyIiwiZm10dHkzIiwiZm10MyIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1YjJfZm10dHkiLCJzdWIxX2ZtdHR5IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJyZXMiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImwiLCJmb3JtYXRfb2ZfZmNvbnYiLCJzeW1iIiwidHJhbnNmb3JtX2ludF9hbHQiLCJwb3MiLCJwdXQiLCJsZWZ0IiwiY3N0X3UiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4Iiwic2lnbiIsImNhbWxfc3BlY2lhbF92YWwiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiIsImsiLCJhY2MiLCJrYWNjIiwibmV3X2FjYyIsIm8iLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2Zyb21fZm10dHkiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2N1c3RvbSIsIm1ha2VfaXByaW50ZiIsImtvYyIsImZuX29mX2N1c3RvbV9hcml0eSIsIm91dHB1dF9hY2MiLCJtc2ciLCJidWZwdXRfYWNjIiwiYiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJ3c3RhcnQiLCJ3ZW5kIiwiYm94X25hbWUiLCJuc3RhcnQiLCJuZW5kIiwiaW5kZW50IiwiZXhuIiwiZXhwX2VuZCIsImJveF90eXBlIiwibWFrZV9wYWRkaW5nX2ZtdF9lYmIiLCJtYWtlX3BhZHByZWNfZm10X2ViYiIsImNzdF9hdF9jaGFyYWN0ZXJfbnVtYmVyIiwiY3N0X2ludmFsaWRfZm9ybWF0Iiwic3ViX2Zvcm1hdCIsImZtdF9lYmJfb2Zfc3RyaW5nIiwibGVnYWN5X2JlaGF2aW9yIiwiZmxhZyIsImludmFsaWRfZm9ybWF0X21lc3NhZ2UiLCJpbnZhbGlkX2Zvcm1hdF93aXRob3V0IiwiZXhwZWN0ZWRfY2hhcmFjdGVyIiwiZXhwZWN0ZWQiLCJyZWFkIiwiY3N0X3VuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCIsInBhcnNlIiwibGl0X3N0YXJ0IiwiZW5kX2luZCIsImNzdF8wIiwicGFyc2VfZmxhZ3MiLCJwY3RfaW5kIiwic2V0X2ZsYWciLCJ6ZXJvIiwibWludXMiLCJwbHVzIiwic3BhY2UiLCJoYXNoIiwibmV3X2luZCIsImNzdF9wcmVjaXNpb24iLCJwYXJzZV9hZnRlcl9wYWRkaW5nIiwicGFyc2VfbGl0ZXJhbCIsInBhcnNlX2FmdGVyX3ByZWNpc2lvbiIsInBhcnNlX2NvbnYiLCJwYWRwcmVjIiwicGFyc2VfY29udmVyc2lvbiIsInBsdXNfdXNlZCIsImdldF9wbHVzIiwiaGFzaF91c2VkIiwiZ2V0X2hhc2giLCJzcGFjZV91c2VkIiwiZ2V0X3NwYWNlIiwiaWduX3VzZWQiLCJnZXRfaWduIiwicGFkX3VzZWQiLCJnZXRfcGFkIiwicHJlY191c2VkIiwiZ2V0X3ByZWMiLCJnZXRfcGFkcHJlYyIsImdldF9pbnRfcGFkIiwiY2hlY2tfbm9fMCIsIm9wdF9vZl9wYWQiLCJnZXRfcGFkX29wdCIsImdldF9wYWRwcmVjX29wdCIsImZtdF9yZXN1bHQiLCJzdWJfZW5kIiwic3ViX2ZtdCIsImlnbm9yZWQiLCJuZXh0X2luZCIsImNoYXJfZm9ybWF0Iiwia2luZCIsInBhcnNlX2FmdGVyX2F0Iiwic3RyX2luZF8xIiwic3RyX2luZF8yIiwic3RyX2luZF8zIiwib2Zmc2V0Iiwic3RyX2luZF80Iiwic3RyX2luZF81Iiwic2l6ZSIsInBhcnNlX3RhZyIsImlzX29wZW5fdGFnIiwiaW5kIiwic3ViX3N0ciIsImZvcm1hdHRpbmciLCJwYXJzZV9jaGFyX3NldCIsImFkZF9yYW5nZSIsImZhaWxfc2luZ2xlX3BlcmNlbnQiLCJwYXJzZV9jaGFyX3NldF9jb250ZW50IiwicGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciIsInJldmVyc2UiLCJwYXJzZV9wb3NpdGl2ZSIsInBhcnNlX2ludGVnZXIiLCJhZGRfbGl0ZXJhbCIsInNlYXJjaF9zdWJmb3JtYXRfZW5kIiwiY29tcHV0ZV9pbnRfY29udiIsImluY29tcGF0aWJsZV9mbGFnIiwib3B0aW9uIiwic3ViZm10IiwiY3N0X2FuZCIsImNzdF9iYWRfaW5wdXRfZm9ybWF0X3R5cGVfbWlzbSIsImZvcm1hdF9vZl9zdHJpbmdfZm10dHkiLCJmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FB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MjE4ODUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcHJpbnRmLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQnVmZmVyIiwiQ2FtbGludGVybmFsRm9ybWF0IiwiU3RkbGliIiwia2ZwcmludGYiLCJrIiwibyIsInBhcmFtIiwiZm10IiwiYWNjIiwia2JwcmludGYiLCJiIiwiaWtmcHJpbnRmIiwib2MiLCJmcHJpbnRmIiwiYnByaW50ZiIsImlmcHJpbnRmIiwiaWJwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJidWYiLCJzcHJpbnRmIiwicyJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxTQUFBQyxHQUFBQyxHQUFBQztBQUFBQSxRQUFBQyxNQ2tCYTtBQUFBLElBQ1g7QUFBQTtBQUFBLHNCQUFBQztBQUFBQSxjQUF3QjtBQUFBLGNBQWdCLHVCQUFLO0FBQUE7QUFBQTtBQUFBLGlCQUFnQjtBQUFBO0FBQUEsWUFBQUMsU0FBQUwsR0FBQU0sR0FBQUo7QUFBQUEsUUFBQUMsTUFDbEQ7QUFBQSxJQUNYO0FBQUE7QUFBQSxzQkFBQUM7QUFBQUEsY0FBd0I7QUFBQSxjQUFnQix1QkFBSztBQUFBO0FBQUE7QUFBQSxpQkFBZ0I7QUFBQTtBQUFBLFlBQUFHLFVBQUFQLEdBQUFRLElBQUFOO0FBQUFBLFFBQUFDLE1BQ2pEO0FBQUEsSUFDWixtREFBcUI7QUFBQTtBQUFBLFlBQUFNLFFBQUFELElBQUFMO0FBQUFBLElBR0YsNEJEMUJyQixvQkMwQjJDO0FBQUE7QUFBQSxZQUFBTyxRQUFBSixHQUFBSCxLQUN2Qiw0QkQzQnBCLG1CQzJCeUM7QUFBQSxZQUFBUSxTQUFBSCxJQUFBTDtBQUFBQSxJQUNuQiw2QkQ1QnRCLG9CQzRCNkM7QUFBQTtBQUFBLFlBQUFTLFNBQUFOLEdBQUFIO0FBQUFBLElBQ3hCLDZCRDdCckIsbUJDNkIyQztBQUFBO0FBQUEsWUFBQVUsT0FBQVYsS0FDMUIsK0JBQWtCO0FBQUEsWUFBQVcsUUFBQVgsS0FDakIsK0JBQWtCO0FBQUEsWUFBQVksU0FBQWYsR0FBQUU7QUFBQUEsUUFBQUMsTUFFdkI7QUFBQSxhQUFBSCxJQUFBSTtBQUFBQSxTQUFBWSxNQUVDO0FBQUEsS0FDVjtBQUFBLEtBQ0UsT0FBcUIsY0FBckIsaUNBQXFCO0FBQUE7QUFBQSxJQUN6QixvREFBNkI7QUFBQTtBQUFBLFlBQUFDLFFBQUFkLEtBRWIseUJBQUFlLEdBQW1CLFNBQUMsT0FBSztBQUFBLEdEeEMzQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjIxOTcxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3ByaW50ZXhjLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCBkZXN0cnVjdF9leHRfY29uc3RydWN0b3IgeCA9XG4gIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAoKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpLCBOb25lKVxuICBlbHNlXG4gICAgbGV0IGNvbnN0cnVjdG9yID1cbiAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgKGNvbnN0cnVjdG9yLCBTb21lIChmaWVsZHMgeCkpXG5cbmxldCBzdHJpbmdfb2ZfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIHQgPVxuICBsZXQgY29uc3RydWN0b3IsIGZpZWxkc19vcHQgPSBkZXN0cnVjdF9leHRfY29uc3RydWN0b3IgdCBpblxuICBtYXRjaCBmaWVsZHNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IGNvbnN0cnVjdG9yXG4gIHwgU29tZSBmIC0+IGNvbnN0cnVjdG9yIF4gZlxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgc3RyaW5nX29mX2V4dGVuc2lvbl9jb25zdHJ1Y3RvciAoT2JqLnJlcHIgeClcblxubGV0IHRvX3N0cmluZyBlID1cbiAgbWF0Y2ggdXNlX3ByaW50ZXJzIGUgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiB0b19zdHJpbmdfZGVmYXVsdCBlXG5cbmxldCBwcmludCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZmx1c2ggc3RkZXJyO1xuICAgIHJhaXNlIHhcblxubGV0IGNhdGNoIGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGZsdXNoIHN0ZG91dDtcbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZXhpdCAyXG5cbnR5cGUgcmF3X2JhY2t0cmFjZV9zbG90XG50eXBlIHJhd19iYWNrdHJhY2VfZW50cnkgPSBwcml2YXRlIGludFxudHlwZSByYXdfYmFja3RyYWNlID0gcmF3X2JhY2t0cmFjZV9lbnRyeSBhcnJheVxuXG5sZXQgcmF3X2JhY2t0cmFjZV9lbnRyaWVzIGJ0ID0gYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2U6XG4gIHVuaXQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2VcIlxuXG5leHRlcm5hbCByYWlzZV93aXRoX2JhY2t0cmFjZTogZXhuIC0+IHJhd19iYWNrdHJhY2UgLT4gJ2FcbiAgPSBcIiVyYWlzZV93aXRoX2JhY2t0cmFjZVwiXG5cbigqIERpc2FibGUgd2FybmluZyAzNzogdmFsdWVzIGFyZSBjb25zdHJ1Y3RlZCBpbiB0aGUgcnVudGltZSAqKVxudHlwZVtAd2FybmluZyBcIi0zN1wiXSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgIDogc3RyaW5nO1xuICAgICAgc3RhcnRfbG51bSA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gICAgICBlbmRfb2Zmc2V0IDogaW50OyAoKiBSZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3RhcnRfbG51bSAqKVxuICAgICAgZW5kX2xudW0gICA6IGludDtcbiAgICAgIGVuZF9jaGFyICAgOiBpbnQ7ICgqIFJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBlbmRfbG51bSBsaW5lICopXG4gICAgICBpc19pbmxpbmUgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgOiBzdHJpbmc7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGxldCBsaW5lcyA9XG4gICAgICAgIGlmIGwuc3RhcnRfbG51bSA9IGwuZW5kX2xudW0gdGhlblxuICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiICVkXCIgbC5zdGFydF9sbnVtXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBQcmludGYuc3ByaW50ZiBcInMgJWQtJWRcIiBsLnN0YXJ0X2xudW0gbC5lbmRfbG51bVxuICAgICAgaW5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSVzLCBjaGFyYWN0ZXJzICVkLSVkXCJcbiAgICAgICAgICAgICAgKGluZm8gbC5pc19yYWlzZSkgbC5kZWZuYW1lIGwuZmlsZW5hbWVcbiAgICAgICAgICAgICAgKGlmIGwuaXNfaW5saW5lIHRoZW4gXCIgKGlubGluZWQpXCIgZWxzZSBcIlwiKVxuICAgICAgICAgICAgICBsaW5lcyBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbiAgZW5kX2xpbmUgOiBpbnQ7XG4gIGVuZF9jb2wgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwuc3RhcnRfbG51bTtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9vZmZzZXQ7XG4gICAgICBlbmRfbGluZSAgICA9IGwuZW5kX2xudW07XG4gICAgICBlbmRfY29sICAgICA9IGwuZW5kX2NoYXI7XG4gICAgfVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfXG4gIHwgS25vd25fbG9jYXRpb24geyBkZWZuYW1lID0gXCJcIiB9IC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IFNvbWUgbC5kZWZuYW1lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHMgcmF3X2JhY2t0cmFjZSA9XG4gICgqIFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IFNvbWUgaXNcbiAgICAgcmV0dXJuZWQgb25seSBpZiBhIHBhcnQgb2YgdGhlIHRyYWNlIGlzIHVzYWJsZS4gVGhpcyBnaXZlcyB1c1xuICAgICBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSwgYnV0IGl0IG1ha2VzIHRoZVxuICAgICBBUEkgbW9yZSB1c2VyLWZyaWVuZGx5IC0tIG90aGVyd2lzZSBtb3N0IHVzZXJzIHdvdWxkIGhhdmUgdG9cbiAgICAgcmVpbXBsZW1lbnQgdGhlIFwiUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIHNvcnJ5XCIgbG9naWNcbiAgICAgdGhlbXNlbHZlcy4gKilcbiAgbWF0Y2ggY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2Ugd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGJhY2t0cmFjZSAtPlxuICAgICAgbGV0IHVzYWJsZV9zbG90ID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcbiAgICAgICAgfCBLbm93bl9sb2NhdGlvbiBfIC0+IHRydWUgaW5cbiAgICAgIGxldCByZWMgZXhpc3RzX3VzYWJsZSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgKC0xKSAtPiBmYWxzZVxuICAgICAgICB8IGkgLT4gdXNhYmxlX3Nsb3QgYmFja3RyYWNlLihpKSB8fCBleGlzdHNfdXNhYmxlIChpIC0gMSkgaW5cbiAgICAgIGlmIGV4aXN0c191c2FibGUgKEFycmF5Lmxlbmd0aCBiYWNrdHJhY2UgLSAxKVxuICAgICAgdGhlbiBTb21lIGJhY2t0cmFjZVxuICAgICAgZWxzZSBOb25lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IGVudHJ5ID1cbiAgYmFja3RyYWNlX3Nsb3RzIFt8IGVudHJ5IHxdXG5cbm1vZHVsZSBTbG90ID0gc3RydWN0XG4gIHR5cGUgdCA9IGJhY2t0cmFjZV9zbG90XG4gIGxldCBmb3JtYXQgPSBmb3JtYXRfYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGlzX3JhaXNlID0gYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2VcbiAgbGV0IGlzX2lubGluZSA9IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZVxuICBsZXQgbG9jYXRpb24gPSBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvblxuICBsZXQgbmFtZSA9IGJhY2t0cmFjZV9zbG90X2RlZm5hbWVcbmVuZFxuXG5sZXQgcmF3X2JhY2t0cmFjZV9sZW5ndGggYnQgPSBBcnJheS5sZW5ndGggYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2UgLT4gaW50IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QgOlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gcmF3X2JhY2t0cmFjZV9zbG90IG9wdGlvblxuICA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFwiXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOlxuICAgcmV0dXJucyB0aGUgKnN0cmluZyogY29ycmVzcG9uZGluZyB0byB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgZ2V0X2JhY2t0cmFjZSAoKSA9IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxuZXh0ZXJuYWwgcmVjb3JkX2JhY2t0cmFjZTogYm9vbCAtPiB1bml0ID0gXCJjYW1sX3JlY29yZF9iYWNrdHJhY2VcIlxuZXh0ZXJuYWwgYmFja3RyYWNlX3N0YXR1czogdW5pdCAtPiBib29sID0gXCJjYW1sX2JhY2t0cmFjZV9zdGF0dXNcIlxuXG5sZXQgcmVjIHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBsZXQgb2xkX3ByaW50ZXJzID0gQXRvbWljLmdldCBwcmludGVycyBpblxuICBsZXQgbmV3X3ByaW50ZXJzID0gZm4gOjogb2xkX3ByaW50ZXJzIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBwcmludGVycyBvbGRfcHJpbnRlcnMgbmV3X3ByaW50ZXJzIGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gcmVnaXN0ZXJfcHJpbnRlciBmblxuXG5leHRlcm5hbCBnZXRfY2FsbHN0YWNrOiBpbnQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2tcIlxuXG5sZXQgZXhuX3Nsb3QgeCA9XG4gIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICBpZiBPYmoudGFnIHggPSAwIHRoZW4gT2JqLmZpZWxkIHggMCBlbHNlIHhcblxubGV0IGV4bl9zbG90X2lkIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDEpIDogaW50KVxuXG5sZXQgZXhuX3Nsb3RfbmFtZSB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAwKSA6IHN0cmluZylcblxuZXh0ZXJuYWwgZ2V0X2RlYnVnX2luZm9fc3RhdHVzIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXNcIlxuXG4oKiBEZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiBzdGFydHVwLmguIFNlZSBhbHNvIGJhY2t0cmFjZS5jICopXG5sZXQgZXJyb3JzID0gW3wgXCJcIjtcbiAgKCogRklMRV9OT1RfRk9VTkQgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIG5vdCBmb3VuZClcIjtcbiAgKCogQkFEX0JZVEVDT0RFICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQpXCI7XG4gICgqIFdST05HX01BR0lDICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyKVwiO1xuICAoKiBOT19GRFMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQ7XFxuIFxcXG4gICAgICAtLSB0b28gbWFueSBvcGVuIGZpbGVzLiBUcnkgcnVubmluZyB3aXRoIE9DQU1MUlVOUEFSQU09Yj0yKVwiXG58XVxuXG5sZXQgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZSA9XG4gIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICBsZXQgc3RhdHVzID0gZ2V0X2RlYnVnX2luZm9fc3RhdHVzICgpIGluXG4gIGlmIHN0YXR1cyA8IDAgdGhlblxuICAgIHByZXJyX2VuZGxpbmUgZXJyb3JzLihhYnMgc3RhdHVzKTtcbiAgZmx1c2ggc3RkZXJyXG5cbmxldCB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA9IHJlZiBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyXG5cbmxldCBzZXRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZm4gPSB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA6PSBmblxuXG5sZXQgZW1wdHlfYmFja3RyYWNlIDogcmF3X2JhY2t0cmFjZSA9IFt8IHxdXG5cbmxldCB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgPVxuICB0cnlcbiAgICBnZXRfcmF3X2JhY2t0cmFjZSAoKVxuICB3aXRoIF8gKCogT3V0X29mX21lbW9yeT8gKikgLT5cbiAgICBlbXB0eV9iYWNrdHJhY2VcblxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICAoKiBHZXQgdGhlIGJhY2t0cmFjZSBub3csIGluIGNhc2Ugb25lIG9mIHRoZSBbYXRfZXhpdF0gZnVuY3Rpb25cbiAgICAgICBkZXN0cm95cyBpdC4gKilcbiAgICBsZXQgcmF3X2JhY2t0cmFjZSA9XG4gICAgICBpZiBkZWJ1Z2dlcl9pbl91c2UgKCogU2FtZSB0ZXN0IGFzIGluIFtydW50aW1lL3ByaW50ZXhjLmNdICopIHRoZW5cbiAgICAgICAgZW1wdHlfYmFja3RyYWNlXG4gICAgICBlbHNlXG4gICAgICAgIHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKVxuICAgIGluXG4gICAgKHRyeSBTdGRsaWIuZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgIHRyeVxuICAgICAgIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlXG4gICAgd2l0aCBleG4nIC0+XG4gICAgICBsZXQgcmF3X2JhY2t0cmFjZScgPSB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvciBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcjogZXhjZXB0aW9uICVzXFxuXCJcbiAgICAgICAgKHRvX3N0cmluZyBleG4nKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgZmx1c2ggc3RkZXJyXG4gIHdpdGhcbiAgICB8IE91dF9vZl9tZW1vcnkgLT5cbiAgICAgICAgcHJlcnJfZW5kbGluZVxuICAgICAgICAgIFwiRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXJcIlxuXG4oKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBbY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25dIGluXG4gICBbcnVudGltZS9wcmludGV4Yy5jXSB3aGljaCBleHBlY3RzIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICopXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZVxuICB3aXRoIF8gLT5cbiAgICAoKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqKVxuICAgICgpXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfb2JqX3RhZyIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsNSIsImEyIiwiYTMiLCJhNCIsImNhbWxfY2FsbDciLCJhNSIsImE2IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfT2JqIiwicHJpbnRlcnMiLCJmaWVsZCIsIngiLCJpIiwiY3N0Iiwib3RoZXJfZmllbGRzIiwidXNlX3ByaW50ZXJzIiwicGFyYW0iLCJ0bCIsImhkIiwidmFsIiwicyIsInN0cmluZ19vZl9leHRlbnNpb25fY29uc3RydWN0byIsInQiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZmllbGRzX29wdCIsImNzdF9jaGFyYWN0ZXJzIiwibG9jZm10IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyIiwibGluZSIsImZpbGUiLCJ0b19zdHJpbmciLCJlIiwiY3N0X1VuY2F1Z2h0X2V4Y2VwdGlvbiIsImNzdF9VbmNhdWdodF9leGNlcHRpb25fcyIsInByaW50IiwiZmN0IiwiYXJnIiwiY2F0Y2gkIiwicmF3X2JhY2t0cmFjZV9lbnRyaWVzIiwiYnQiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJwb3MiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwibGluZXMiLCJjc3RfcyIsImNzdF9Qcm9ncmFtX25vdF9saW5rZWRfd2l0aF9nXyIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJvdXRjaGFuIiwicmF3X2JhY2t0cmFjZSIsImJhY2t0cmFjZSIsImEiLCJzdHIiLCJwcmludF9iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlX3RvX3N0cmluZyIsImIiLCJiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSIsImJhY2t0cmFjZV9zbG90X2lzX2lubGluZSIsImJhY2t0cmFjZV9zbG90X2xvY2F0aW9uIiwiYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSIsImJhY2t0cmFjZV9zbG90cyIsImJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkiLCJlbnRyeSIsInJhd19iYWNrdHJhY2VfbGVuZ3RoIiwiZ2V0X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsInN1Y2Nlc3MiLCJleG5fc2xvdCIsImV4bl9zbG90X2lkIiwiZXhuX3Nsb3RfbmFtZSIsImVycm9ycyIsImNzdF9GYXRhbF9lcnJvcl9leGNlcHRpb24iLCJjc3RfRmF0YWxfZXJyb3JfZXhjZXB0aW9uX3MiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJleG4iLCJzdGF0dXMiLCJ1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsInNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsImVtcHR5X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJTdGRsaWJfUHJpbnRleGMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQVIsR0FBQUMsSUFBQUUsSUFBQUUsSUFBQUMsSUFBQUMsSUFBQUUsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0NtQmU7QUFBQSxRQUFjO0FBQUE7QUFBQSxZQUFBQyxNQUFBQyxHQUFBQztBQUFBQSxRQUFBcEIsSUFLbkI7QUFBQSxJQUNEO0FBQUEsS0FDTCxvREFNRztBQUFBLFlBTEc7QUFBQTtBQUFBLEtBQ04sb0RBSUc7QUFBQSxZQUhHO0FBQUEsbUNBQ04sOEJBRUc7QUFBQTtBQUFBLE9BQUFxQixNRGhDUCxRQ21CNkI7QUFBQSxZQUFBQyxhQUFBSCxHQUFBQztBQUFBQSxJQWdCM0Isc0JBQXdCO0FBQUEsWUFDVSxnQ0FBWjtBQUFBLElBQVcsdURBQXVCO0FBQUE7QUFBQSxZQUFBRyxhQUFBSjtBQUFBQSxRQUFBSyxRQWdCbkQ7QUFBQSxJQUFxQjtBQUFBLEtBTlgsWUFLTDtBQUFBLFNBQUFDLEtBTEssVUFBQUMsS0FBQTtBQUFBLEtBRVQsUUFBQUMsTUFBTyw0QkRoRGY7QUFBQSxLQ2dEUSxZQUFBQyxJQUFBLFFBRWE7QUFBQSxLQUZiO0FBQUE7QUFBQSxHQUlvQjtBQUFBO0FBQUEsUUFqQ0M7QUFBQTtBQUFBLFlBQUFDLCtCQUFBQztBQUFBQSxJQW9DeEI7QUFBQSxTQUFBQyxjQUlZLFNBQUFDLFFBcEJmO0FBQUE7QUFBQTtBQUFBLFdBSW9DO0FBQUEsV0FBWjtBQUFBLFdBQVc7QUFBQTtBQUFBLE1BSm5DO0FBQUE7QUFBQTtBQUFBLGNBR3NCO0FBQUEsY0FBVztBQUFBO0FBQUE7QUFBQSxpQkFIakM7QUFBQTtBQUFBO0FBQUEsU0FBQUEsVUFxQitCO0FBQUE7QUFBQTtBQUFBLFNBQUFBLFVBSkY7QUFBQSxRQUFBQyxhQU8yQixZQUFBRixnQkFBQTtBQUFBLElBQ3hELGlCQUNVO0FBQUEsUUFBQS9CLElBRFY7QUFBQSxJQUVZLDhDQUFlO0FBQUE7QUFBQTtBQUFBLElBQUFrQyxpQkRsRTdCO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxrQkFBQWpCO0FBQUFBLElDb0V3QixvQkFDSDtBQUFBLElBREcscUJBRUY7QUFBQSxJQUZFO0FBQUEsU0FBQWEsUUFBQSxNQUFBSyxPQUFBLFVBQUFDLE9BQUEsVUFBQUMsT0FBQTtBQUFBLEtBSWxCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHdDQU00QztBQUFBO0FBQUEsSUFWMUI7QUFBQTtBQUFBLE1BQUFQLFVBQUE7QUFBQSxNQUFBSyxTQUFBO0FBQUEsTUFBQUMsU0FBQTtBQUFBLE1BQUFDLFNBQUE7QUFBQSxLQU1sQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQ0FJNEM7QUFBQTtBQUFBLElBVjFCLHdCQVVsQix3Q0FBNEM7QUFBQTtBQUFBLEtBQUFQLFVBVjFCO0FBQUEsS0FBQUssU0FBQTtBQUFBLEtBQUFDLFNBQUE7QUFBQSxLQUFBQyxTQUFBO0FBQUEsSUFRbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsMENBRTRDO0FBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxRQUFBVCxRQUcxQztBQUFBLElBQWMsWUFFViwyQkFBbUI7QUFBQSxRQUFBSixJQUZUO0FBQUEsSUFDUjtBQUFBLEdBQ2lCO0FBQUE7QUFBQSxJQUFBYyx5QkRuRi9CO0FBQUEsSUFBQUMsMkJBQUE7QUFBQTtBQUFBLE1DbUI2QjtBQUFBO0FBQUE7QUFBQSxZQUFBQyxNQUFBQyxLQUFBQztBQUFBQSxJQW1FM0IsWUFDRTtBQUFBLFVBQUEzQjtBQUFBQSxTQUFBQSxJRHZGSiw4QkN5RnVDO0FBQUEsS0FBbkM7QUFBQSxLQUNBO0FBQUEsS0FBWTtBQUFBO0FBQUEsR0FDTDtBQUFBO0FBQUE7QUFBQSxNQXhFa0I7QUFBQTtBQUFBO0FBQUEsWUFBQTRCLE9BQUFGLEtBQUFDO0FBQUFBLElBMkUzQixZQUNFO0FBQUEsVUFBQTNCO0FBQUFBLFNBQUFBLElEL0ZKO0FBQUEsS0NpR0k7QUFBQSxhQUNtQztBQUFBLEtBQW5DO0FBQUEsS0FBZ0QsK0JBQzFDO0FBQUE7QUFBQTtBQUFBLFlBQUE2QixzQkFBQUMsSUFNcUIsVUFBRTtBQUFBLFlBQUFDLHNCQUFBRDtBQUFBQSxJQWdDdEIsa0RBQTBCO0FBQUEsR0FDYjtBQUFBO0FBQUEsUUF2SEs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBRSxzQkFBQUMsS0FBQUM7QUFBQUEsYUFBQUMsS0FBQUM7QUFBQUEsS0EySHpCO0FBQUE7QUFBQSw2RUFHdUU7QUFBQTtBQUFBLElBRXpFO0FBQUEsS0FFSSxZQUM0QztBQUFBLGFBRU47QUFBQSxLQUEvQix5REFBNEM7QUFBQTtBQUFBLElBRW5EO0FBQUEsYUFFSSxTQUFBQyxRQUFBO0FBQUE7QUFBQTtBQUFBLFVBRUE7QUFBQTtBQUFBLE1BQUFBLFFBQUE7QUFBQTtBQUFBLFNBRUo7QUFBQTtBQUFBO0FBQUEsU0FDUTtBQUFBO0FBQUE7QUFBQSxJQURIO0FBQUE7QUFBQSx1RUFHaUM7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUURuSzVDO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFFDbUI2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsb0JBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLFlBK0pPO0FBQUEsSUFabEMsZ0JBRUksOENBVW1FO0FBQUEsUUFBQUMsSUFadkUsa0JBS0k7QUFBQTtBQUFBLFNBQUEzQyxJQUFBO0FBQUE7QUFBQSxVQUFBWSxRQUNRLHlCQUF3QjtBQUFBLE1BQUs7QUFBQSxXQUFBZ0MsTUFBQTtBQUFBLE9BRW5CO0FBQUE7QUFBQSxjQUZtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFEckM7QUFBQSxHQU9tRTtBQUFBLFlBQUFDLGdCQUFBTDtBQUFBQSxJQUkzQyxPQUFzQiw2QkFBdEIsa0NBQXNCO0FBQUE7QUFBQSxXQW5LdkI7QUFBQSxZQUFBTSx3QkFBQUw7QUFBQUEsUUFBQUMsWUFtTFA7QUFBQSxJQWJwQixnQkFFRztBQUFBO0FBQUEsS0FBQUMsSUFGSDtBQUFBLEtBQUFJLElBSVk7QUFBQSxTQUNSO0FBQUE7QUFBQSxTQUFBL0MsSUFBQTtBQUFBO0FBQUEsVUFBQVksUUFDUSx5QkFBd0I7QUFBQSxNQUFLO0FBQUEsV0FBQWdDLE1BQUE7QUFBQSxPQUVuQjtBQUFBO0FBQUEsY0FGbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXJDLHFDQUdxRDtBQUFBO0FBQUEsWUFBQUksd0JBQUE1QztBQUFBQSxJQUU3QiwyQ0FFTTtBQUFBO0FBQUEsWUFBQTZDLHlCQUFBN0MsT0FFTCxvQ0FFQTtBQUFBO0FBQUEsWUFBQThDLHdCQUFBOUM7QUFBQUEsSUFXRDtBQUFBO0FBQUE7QUFBQSxlQVV6QjtBQUFBO0FBQUEsWUFBQStDLHVCQUFBL0M7QUFBQUEsSUFFd0IsdUNBR0w7QUFBQSxJQURlO0FBQUEsR0FDRDtBQUFBLFlBQUFnRCxnQkFBQVg7QUFBQUEsUUFBQTdCLFFBUzlCO0FBQUEsSUFBbUMsWUFDN0I7QUFBQSxRQUFBOEIsWUFENkIsVUFBQTFDLE1BU3JDLDBCQUFBQSxJQUFHO0FBQUE7QUFBQSxLQUhxQjtBQUFBLGNBQ1o7QUFBQTtBQUFBLGNBQ1M7QUFBQSxNQUFhLFlBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUEsS0FDVyw2QkFFcEM7QUFBQTtBQUFBO0FBQUEsWUFBQXFELDZCQUFBQyxPQUdiLGtDQUEyQjtBQUFBO0FBQUEsWUFBQUMscUJBQUExQixJQVdDLHFCQUFlO0FBQUEsWUFBQTJCLGNBQUFwRDtBQUFBQSxJQVdFLE9BQXNCLHdCQUF0QixrQ0FBc0I7QUFBQTtBQUFBLFlBQUFxRCxpQkFBQUM7QUFBQUEsSUFNbkU7QUFBQTtBQUFBLE1BQUFDLGVBQW1CO0FBQUEsTUFBQUMsZUFDbkI7QUFBQSxNQUFBQztBQUFBQSxRQUNjO0FBQUEsVUFDZDtBQUFBO0FBQUE7QUFBQSxHQUF1QztBQUFBLFlBQUFDLFNBQUEvRCxHQU1wQyx1Q0FBdUM7QUFBQSxZQUFBZ0UsWUFBQWhFLE9BQUFrQyxPQUcvQixhQUNnQixlQUFPO0FBQUEsWUFBQStCLGNBQUFqRSxPQUFBa0MsT0FHdkIsYUFDZ0IsZUFBVTtBQUFBO0FBQUEsSUFBQWdDO0FBQUFBLE1BelJWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsNEJEbkI3QjtBQUFBLElBQUFDLDhCQUFBO0FBQUE7QUFBQSxNQ21CNkI7QUFBQTtBQUFBO0FBQUEsWUFBQUMsK0JBQUFDLEtBQUE1QjtBQUFBQSxRQUFBLElBK1NXO0FBQUEsSUFBdEM7QUFBQSxJQUNBO0FBQUEsUUFBQTZCLFNBQ2E7QUFBQSxJQUNiO0FBQUE7QUFBQSxVQUN3QjtBQUFBLFVBQVI7QUFBQSxLQUFkO0FBQUE7QUFBQSxJQUNGLHdDQUFZO0FBQUE7QUFBQSxPQUFBQyw2QkFwVGU7QUFBQSxZQUFBQywrQkFBQWQ7QUFBQUEsSUF3VFc7QUFBQTtBQUFBLEdBQWdDO0FBQUE7QUFBQSxJQUFBZSxrQkF4VDNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQywwQkFBQUwsT0FBQU07QUFBQUEsSUErVjNCO0FBQUEsS0E1QkE7QUFBQTtBQUFBLE9BQUFsQztBQUFBQSxTQUFBLG9DQUxFO0FBQUEsTUFjQSxJQUFLLGlDQUFBNEI7QUFBQUEsTUFDTDtBQUFBO0FBQUEsWUFDRTtBQUFBO0FBQUE7QUFBQSxZQUFBQTtBQUFBQTtBQUFBQSxRQUFBQSxRRGpXTjtBQUFBLFFBQUE1QixrQkNpVkk7QUFBQSxZQW1Cd0M7QUFBQSxPQUF0QztBQUFBLE9BQ0E7QUFBQSxlQUVFO0FBQUEsT0FERjtBQUFBLE9BRUE7QUFBQSxlQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBQTRCO0FBQUFBLFVBQUFBLE1EeldOO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0M0V1E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQUFBLEtBVUo7QUFBQSxHQUFFO0FBQUEsR0FNSjtBQUFBO0FBQUE7QUFBQSxJQUFBTztBQUFBQSxNQUMyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEN1g3QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjIyNDUzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2Z1bi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgY29tcG9zZSBmIGcgeCA9IGYgKGcgeClcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUHJpbnRleGMiLCJTdGRsaWIiLCJjb25zdCQiLCJjIiwicGFyYW0iLCJjb21wb3NlIiwiZyIsIngiLCJmbGlwIiwieSIsIm5lZ2F0ZSIsInAiLCJ2IiwiRmluYWxseV9yYWlzZWQiLCJleG4iLCJkdW1teSIsInByb3RlY3QiLCJmaW5hbGx5JCIsIndvcmsiLCJmaW5hbGx5X25vX2V4biIsImUiLCJidCIsInJlc3VsdCIsIndvcmtfZXhuIiwid29ya19idCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLE9BQUFDLEdBQUFDLE9DZ0JnQixTQUFDO0FBQUEsWUFBQUMsUUFBQVYsR0FBQVcsR0FBQUMsR0FDSyxPQUFLLGNBQUwsaUJBQUs7QUFBQSxZQUFBQyxLQUFBYixHQUFBWSxHQUFBRSxHQUNWLDBCQUFLO0FBQUEsWUFBQUMsT0FBQUMsR0FBQUMsR0FDRCwyQkFBSztBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTURuQjFCO0FBQUEsR0N1QlM7QUFBQTtBQUFBLGNBQUFUO0FBQUFBLE1BQTZCLGdDQUUvQjtBQUFBLFVBQUFVLE1BRitCLGNBQ2lCO0FBQUEsTUFBMUIsNERBQWlEO0FBQUEsS0FDbkU7QUFBQSxPQUFBQyxRQUFBO0FBQUEsWUFBQUMsUUFBQUMsVUFBQUM7QUFBQUEsYUFBQUMsZUFBQWY7QUFBQUEsS0FJUCxJQUFJO0FBQUEsV0FBQWdCO0FBQUFBO0FBQUFBLE9BQUFBLElEN0JSO0FBQUEsT0FBQUMsS0M4QmU7QUFBQSxPQUFBUCxNQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBbUQ7QUFBQSxJQUV2RCxRQUFBUSxTQUFNO0FBQUEsVUFBQUM7QUFBQUE7QUFBQUEsTUFBQUEsV0RqQ1I7QUFBQSxNQUFBQyxVQ29Db0I7QUFBQSxLQUNkO0FBQUEsS0FBaUI7QUFBQTtBQUFBO0FBQUEsSUFIVDtBQUFBLElBQWlCO0FBQUEsR0FJcUI7QUFBQSxHQWJ6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6QlgiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMjUyNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbl9jaGFubmVsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbl9jaGFubmVsXG5cbnR5cGUgb3Blbl9mbGFnID0gU3RkbGliLm9wZW5fZmxhZyA9XG4gIHwgT3Blbl9yZG9ubHlcbiAgfCBPcGVuX3dyb25seVxuICB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdFxuICB8IE9wZW5fdHJ1bmNcbiAgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeVxuICB8IE9wZW5fdGV4dFxuICB8IE9wZW5fbm9uYmxvY2tcblxubGV0IHN0ZGluID0gU3RkbGliLnN0ZGluXG5sZXQgb3Blbl9iaW4gPSBTdGRsaWIub3Blbl9pbl9iaW5cbmxldCBvcGVuX3RleHQgPSBTdGRsaWIub3Blbl9pblxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5faW5fZ2VuXG5cbmxldCB3aXRoX29wZW4gb3BlbmZ1biBzIGYgPVxuICBsZXQgaWMgPSBvcGVuZnVuIHMgaW5cbiAgRnVuLnByb3RlY3QgfmZpbmFsbHk6KGZ1biAoKSAtPiBTdGRsaWIuY2xvc2VfaW5fbm9lcnIgaWMpXG4gICAgKGZ1biAoKSAtPiBmIGljKVxuXG5sZXQgd2l0aF9vcGVuX2JpbiBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW5fYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX2luIHMgZlxuXG5sZXQgd2l0aF9vcGVuX2dlbiBmbGFncyBwZXJtIHMgZiA9XG4gIHdpdGhfb3BlbiAoU3RkbGliLm9wZW5faW5fZ2VuIGZsYWdzIHBlcm0pIHMgZlxuXG5sZXQgc2VlayA9IFN0ZGxpYi5MYXJnZUZpbGUuc2Vla19pblxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX2luXG5sZXQgbGVuZ3RoID0gU3RkbGliLkxhcmdlRmlsZS5pbl9jaGFubmVsX2xlbmd0aFxubGV0IGNsb3NlID0gU3RkbGliLmNsb3NlX2luXG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2VfaW5fbm9lcnJcblxubGV0IGlucHV0X2NoYXIgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gIHwgYyAtPiBTb21lIGNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXRfYnl0ZSBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9ieXRlIGljIHdpdGhcbiAgfCBuIC0+IFNvbWUgblxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9saW5lIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IHMgLT4gU29tZSBzXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0ID0gU3RkbGliLmlucHV0XG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dF9iaWdhcnJheSA6XG4gIHQgLT4gXyBCaWdhcnJheS5BcnJheTEudCAtPiBpbnQgLT4gaW50IC0+IGludFxuICA9IFwiY2FtbF9tbF9pbnB1dF9iaWdhcnJheVwiXG5cbmxldCBpbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBCaWdhcnJheS5BcnJheTEuZGltIGJ1ZiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRfYmlnYXJyYXlcIlxuICBlbHNlIHVuc2FmZV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dCBpYyBidWYgcG9zIGxlbiB3aXRoXG4gIHwgKCkgLT4gU29tZSAoKVxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gU29tZSAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXRfYmlnYXJyYXkgaWMgYnVmIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gTm9uZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBCaWdhcnJheS5BcnJheTEuZGltIGJ1ZiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0X2JpZ2FycmF5XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIG1hdGNoIFN0ZGxpYi5yZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiB3aXRoXG4gIHwgcyAtPiBTb21lIHNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG4oKiBSZWFkIHVwIHRvIFtsZW5dIGJ5dGVzIGludG8gW2J1Zl0sIHN0YXJ0aW5nIGF0IFtvZnNdLiBSZXR1cm4gdG90YWwgYnl0ZXNcbiAgIHJlYWQuICopXG5sZXQgcmVhZF91cHRvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIG9mcyBsZW4gPVxuICAgIGlmIGxlbiA9IDAgdGhlbiBvZnNcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IFN0ZGxpYi5pbnB1dCBpYyBidWYgb2ZzIGxlbiBpblxuICAgICAgaWYgciA9IDAgdGhlblxuICAgICAgICBvZnNcbiAgICAgIGVsc2VcbiAgICAgICAgbG9vcCAob2ZzICsgcikgKGxlbiAtIHIpXG4gICAgZW5kXG4gIGluXG4gIGxvb3Agb2ZzIGxlbiAtIG9mc1xuXG4oKiBCZXN0IGVmZm9ydCBhdHRlbXB0IHRvIHJldHVybiBhIGJ1ZmZlciB3aXRoID49IChvZnMgKyBuKSBieXRlcyBvZiBzdG9yYWdlLFxuICAgYW5kIHN1Y2ggdGhhdCBpdCBjb2luY2lkZXMgd2l0aCBbYnVmXSBhdCBpbmRpY2VzIDwgW29mc10uXG5cbiAgIFRoZSByZXR1cm5lZCBidWZmZXIgaXMgZXF1YWwgdG8gW2J1Zl0gaXRzZWxmIGlmIGl0IGFscmVhZHkgaGFzIHN1ZmZpY2llbnRcbiAgIGZyZWUgc3BhY2UuXG5cbiAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGhhdmUgKmZld2VyKiB0aGFuIFtvZnMgKyBuXSBieXRlcyBvZiBzdG9yYWdlIGlmIHRoaXNcbiAgIG51bWJlciBpcyA+IFtTeXMubWF4X3N0cmluZ19sZW5ndGhdLiBIb3dldmVyIHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbFxuICAgKmFsd2F5cyogaGF2ZSA+IFtvZnNdIGJ5dGVzIG9mIHN0b3JhZ2UuIEluIHRoZSBsaW1pdGluZyBjYXNlIHdoZW4gW29mcyA9IGxlblxuICAgPSBTeXMubWF4X3N0cmluZ19sZW5ndGhdIChzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXNpemUgdGhlIGJ1ZmZlciBhdFxuICAgYWxsKSwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcblxubGV0IGVuc3VyZSBidWYgb2ZzIG4gPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPj0gb2ZzICsgbiB0aGVuIGJ1ZlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IG5ld19sZW4gPSByZWYgbGVuIGluXG4gICAgd2hpbGUgIW5ld19sZW4gPCBvZnMgKyBuIGRvXG4gICAgICBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiArIDFcbiAgICBkb25lO1xuICAgIGxldCBuZXdfbGVuID0gIW5ld19sZW4gaW5cbiAgICBsZXQgbmV3X2xlbiA9XG4gICAgICBpZiBuZXdfbGVuIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIG5ld19sZW5cbiAgICAgIGVsc2UgaWYgb2ZzIDwgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIGZhaWx3aXRoIFwiSW5fY2hhbm5lbC5pbnB1dF9hbGw6IGNoYW5uZWwgY29udGVudCBcXFxuICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoXCJcbiAgICBpblxuICAgIGxldCBuZXdfYnVmID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1ZiAwIG5ld19idWYgMCBvZnM7XG4gICAgbmV3X2J1ZlxuICBlbmRcblxubGV0IGlucHV0X2FsbCBpYyA9XG4gIGxldCBjaHVua19zaXplID0gNjU1MzYgaW4gKCogSU9fQlVGRkVSX1NJWkUgKilcbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgdHJ5XG4gICAgICBTdGRsaWIuaW5fY2hhbm5lbF9sZW5ndGggaWMgLSBTdGRsaWIucG9zX2luIGljXG4gICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgLTFcbiAgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9IGlmIGluaXRpYWxfc2l6ZSA8IDAgdGhlbiBjaHVua19zaXplIGVsc2UgaW5pdGlhbF9zaXplIGluXG4gIGxldCBpbml0aWFsX3NpemUgPVxuICAgIGlmIGluaXRpYWxfc2l6ZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgaW5pdGlhbF9zaXplXG4gICAgZWxzZVxuICAgICAgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgaW5pdGlhbF9zaXplIGluXG4gIGxldCBucmVhZCA9IHJlYWRfdXB0byBpYyBidWYgMCBpbml0aWFsX3NpemUgaW5cbiAgaWYgbnJlYWQgPCBpbml0aWFsX3NpemUgdGhlbiAoKiBFT0YgcmVhY2hlZCwgYnVmZmVyIHBhcnRpYWxseSBmaWxsZWQgKilcbiAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIG5yZWFkXG4gIGVsc2UgYmVnaW4gKCogbnJlYWQgPSBpbml0aWFsX3NpemUsIG1heWJlIEVPRiByZWFjaGVkICopXG4gICAgbWF0Y2ggU3RkbGliLmlucHV0X2NoYXIgaWMgd2l0aFxuICAgIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+XG4gICAgICAgICgqIEVPRiByZWFjaGVkLCBidWZmZXIgaXMgY29tcGxldGVseSBmaWxsZWQgKilcbiAgICAgICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgICB8IGMgLT5cbiAgICAgICAgKCogRU9GIG5vdCByZWFjaGVkICopXG4gICAgICAgIGxldCByZWMgbG9vcCBidWYgb2ZzID1cbiAgICAgICAgICBsZXQgYnVmID0gZW5zdXJlIGJ1ZiBvZnMgY2h1bmtfc2l6ZSBpblxuICAgICAgICAgIGxldCByZW0gPSBCeXRlcy5sZW5ndGggYnVmIC0gb2ZzIGluXG4gICAgICAgICAgKCogW3JlbV0gY2FuIGJlIDwgW2NodW5rX3NpemVdIGlmIGJ1ZmZlciBzaXplIGNsb3NlIHRvXG4gICAgICAgICAgICAgW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKilcbiAgICAgICAgICBsZXQgciA9IHJlYWRfdXB0byBpYyBidWYgb2ZzIHJlbSBpblxuICAgICAgICAgIGlmIHIgPCByZW0gdGhlbiAoKiBFT0YgcmVhY2hlZCAqKVxuICAgICAgICAgICAgQnl0ZXMuc3ViX3N0cmluZyBidWYgMCAob2ZzICsgcilcbiAgICAgICAgICBlbHNlICgqIHIgPSByZW0gKilcbiAgICAgICAgICAgIGxvb3AgYnVmIChvZnMgKyByZW0pXG4gICAgICAgIGluXG4gICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG5yZWFkIChjaHVua19zaXplICsgMSkgaW5cbiAgICAgICAgQnl0ZXMuc2V0IGJ1ZiBucmVhZCBjO1xuICAgICAgICBsb29wIGJ1ZiAobnJlYWQgKyAxKVxuICBlbmRcblxubGV0IFtAdGFpbF9tb2RfY29uc10gcmVjIGlucHV0X2xpbmVzIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IGxpbmUgLT4gbGluZSA6OiBpbnB1dF9saW5lcyBpY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBbXVxuXG5sZXQgcmVjIGZvbGRfbGluZXMgZiBhY2N1IGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IGxpbmUgLT4gZm9sZF9saW5lcyBmIChmIGFjY3UgbGluZSkgaWNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gYWNjdVxuXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9pblxuXG5leHRlcm5hbCBpc19iaW5hcnlfbW9kZSA6IGluX2NoYW5uZWwgLT4gYm9vbCA9IFwiY2FtbF9tbF9pc19iaW5hcnlfbW9kZVwiXG5cbmV4dGVybmFsIGlzYXR0eSA6IHQgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNhdHR5XCJcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2lucHV0X2JpZ2FycmF5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfRnVuIiwic3RkaW4iLCJvcGVuX2JpbiIsIm9wZW5fdGV4dCIsIm9wZW5fZ2VuIiwid2l0aF9vcGVuIiwib3BlbmZ1biIsInMiLCJpYyIsInBhcmFtIiwid2l0aF9vcGVuX2JpbiIsIndpdGhfb3Blbl90ZXh0Iiwid2l0aF9vcGVuX2dlbiIsImZsYWdzIiwicGVybSIsInNlZWsiLCJwb3MiLCJsZW5ndGgiLCJjbG9zZSIsImNsb3NlX25vZXJyIiwiaW5wdXRfY2hhciIsImMiLCJleG4iLCJpbnB1dF9ieXRlIiwibiIsImlucHV0X2xpbmUiLCJpbnB1dCIsImlucHV0X2JpZ2FycmF5IiwiYnVmIiwib2ZzIiwibGVuIiwicmVhbGx5X2lucHV0IiwicmVhbGx5X2lucHV0X2JpZ2FycmF5IiwiciIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJyZWFkX3VwdG8iLCJlbnN1cmUiLCJuZXdfbGVuIiwibmV3X2J1ZiIsImlucHV0X2FsbCIsImluaXRpYWxfc2l6ZSIsImNodW5rX3NpemUiLCJucmVhZCIsInJlbSIsImlucHV0X2xpbmVzIiwibGluZSIsImJsb2NrIiwiZHN0Iiwib2Zmc2V0IiwiZm9sZF9saW5lcyIsImFjY3UiLCJzZXRfYmluYXJ5X21vZGUiLCJTdGRsaWJfSW5fY2hhbm5lbCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FB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QUEsUUFBQXdCLFFDb01ZLGtCQUFBQyxNQUFRLE9BQUFDLFNBQUE7QUFBQTtBQUFBLEtBRGxCLFFBQUFILFNBQU07QUFBQSxXQUFBdkI7QUFBQUEsVUFBQUEsUURuTVI7QUFBQTtBQUFBLE1DcU02QjtBQUFBLE1BREs7QUFBQTtBQUFBLFNBQUF5QixRQUF0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FDbUI7QUFBQSxZQUFBRSxXQUFBekQsR0FBQTBELFFBQUExQztBQUFBQSxRQUFBMEMsT0FHN0I7QUFBQTtBQUFBLGFBQUFMLE9BQU07QUFBQSxXQUFBdkI7QUFBQUEsVUFBQUEsTUR4TVI7QUFBQSw2QkMwTTZCO0FBQUEsTUQxTTdCO0FBQUE7QUFBQSxTQUFBNEIsU0N5TXlCO0FBQUEsS0FBYTtBQUFBO0FBQUEsR0FDTDtBQUFBO0FBQUEsSUFBQUMsa0JEMU1qQztBQUFBLElBQUFDO0FBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMjc5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9kaWdlc3QubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFV0aWxpdHkgZnVuY3Rpb25zICopXG5cbmxldCBoZXhfb2Zfc3RyaW5nIGQgPVxuICBsZXQgY2hhcl9oZXggbiA9XG4gICAgQ2hhci5jaHIgKGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgKyBuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIENoYXIuY29kZSAnYScgKyBuIC0gMTApIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIGQgaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAobGVuICogMikgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgc3RyaW5nX29mX2hleCBzID1cbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gaW52YWxpZF9hcmcgXCJEaWdlc3Qub2ZfaGV4XCIgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBTdHJpbmcuaW5pdCAoU3RyaW5nLmxlbmd0aCBzIC8gMikgKGZ1biBpIC0+IENoYXIuY2hyIChieXRlICgyICogaSkpKVxuXG4oKiBHZW5lcmljIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIHR5cGUgdCA9IHN0cmluZ1xuICB2YWwgaGFzaF9sZW5ndGggOiBpbnRcbiAgdmFsIGNvbXBhcmUgOiB0IC0+IHQgLT4gaW50XG4gIHZhbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCBzdHJpbmcgOiBzdHJpbmcgLT4gdFxuICB2YWwgYnl0ZXMgOiBieXRlcyAtPiB0XG4gIHZhbCBzdWJzdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0XG4gIHZhbCBzdWJieXRlcyA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdFxuICB2YWwgY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHRcbiAgdmFsIGZpbGUgOiBzdHJpbmcgLT4gdFxuICB2YWwgb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gdCAtPiB1bml0XG4gIHZhbCBpbnB1dCA6IGluX2NoYW5uZWwgLT4gdFxuICB2YWwgdG9faGV4IDogdCAtPiBzdHJpbmdcbiAgdmFsIG9mX2hleCA6IHN0cmluZyAtPiB0XG5lbmRcblxuKCogQkxBS0UyIGhhc2hpbmcsIHBhcmFtZXRlcml6ZWQgYnkgaGFzaCBzaXplICopXG5cbm1vZHVsZSBCTEFLRTIgKFg6IHNpZyB2YWwgaGFzaF9sZW5ndGggOiBpbnQgZW5kKSA6IFMgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSBzdHJpbmdcblxuICBsZXQgaGFzaF9sZW5ndGggPVxuICAgIGlmIFguaGFzaF9sZW5ndGggPCAxIHx8IFguaGFzaF9sZW5ndGggPiA2NFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuQkxBS0UyOiB3cm9uZyBoYXNoIHNpemVcIjtcbiAgICBYLmhhc2hfbGVuZ3RoXG5cbiAgbGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxuICBsZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuICB0eXBlIHN0YXRlXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2dlbjogaW50IC0+IHN0cmluZyAtPiBzdGF0ZSA9IFwiY2FtbF9ibGFrZTJfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgdXBkYXRlOiBzdGF0ZSAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2JsYWtlMl91cGRhdGVcIlxuICBleHRlcm5hbCBmaW5hbDogc3RhdGUgLT4gaW50IC0+IHQgPSBcImNhbWxfYmxha2UyX2ZpbmFsXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogaW50IC0+IHN0cmluZyAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGFrZTJfc3RyaW5nXCJcblxuICBsZXQgY3JlYXRlICgpID0gY3JlYXRlX2dlbiBoYXNoX2xlbmd0aCBcIlwiXG5cbiAgbGV0IHN0cmluZyBzdHIgPVxuICAgIHVuc2FmZV9zdHJpbmcgaGFzaF9sZW5ndGggXCJcIiBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IGJ5dGVzIGIgPVxuICAgIHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG4gIGxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCI7XG4gICAgdW5zYWZlX3N0cmluZyBoYXNoX2xlbmd0aCBcIlwiIHN0ciBvZnMgbGVuXG5cbiAgbGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9XG4gICAgc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxuICBsZXQgY2hhbm5lbCBpYyB0b3JlYWQgPVxuICAgIGxldCBidWZfc2l6ZSA9IDQwOTYgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGJ1Zl9zaXplIGluXG4gICAgbGV0IGN0eCA9IGNyZWF0ZSAoKSBpblxuICAgIGlmIHRvcmVhZCA8IDAgdGhlbiBiZWdpblxuICAgICAgbGV0IHJlYyBkb19yZWFkICgpID1cbiAgICAgICAgbGV0IG4gPSBJbl9jaGFubmVsLmlucHV0IGljIGJ1ZiAwIGJ1Zl9zaXplIGluXG4gICAgICAgIGlmIG4gPSAwXG4gICAgICAgIHRoZW4gZmluYWwgY3R4IGhhc2hfbGVuZ3RoXG4gICAgICAgIGVsc2UgKHVwZGF0ZSBjdHggKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmKSAwIG47IGRvX3JlYWQgKCkpXG4gICAgICBpbiBkb19yZWFkICgpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGxldCByZWMgZG9fcmVhZCB0b3JlYWQgPVxuICAgICAgICBpZiB0b3JlYWQgPSAwIHRoZW4gZmluYWwgY3R4IGhhc2hfbGVuZ3RoIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgbiA9IEluX2NoYW5uZWwuaW5wdXQgaWMgYnVmIDAgKEludC5taW4gYnVmX3NpemUgdG9yZWFkKSBpblxuICAgICAgICAgIGlmIG4gPSAwXG4gICAgICAgICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgIHVwZGF0ZSBjdHggKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmKSAwIG47XG4gICAgICAgICAgICBkb19yZWFkICh0b3JlYWQgLSBuKVxuICAgICAgICAgIGVuZFxuICAgICAgICBlbmRcbiAgICAgIGluIGRvX3JlYWQgdG9yZWFkXG4gICAgZW5kXG5cbiAgbGV0IGZpbGUgZmlsZW5hbWUgPVxuICAgIEluX2NoYW5uZWwud2l0aF9vcGVuX2JpbiBmaWxlbmFtZSAoZnVuIGljIC0+IGNoYW5uZWwgaWMgKC0xKSlcblxuICBsZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID0gb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG4gIGxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIGhhc2hfbGVuZ3RoXG5cbiAgbGV0IHRvX2hleCBkID1cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gaGFzaF9sZW5ndGggdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgICBoZXhfb2Zfc3RyaW5nIGRcblxuICBsZXQgb2ZfaGV4IHMgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA8PiBoYXNoX2xlbmd0aCAqIDIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5vZl9oZXhcIjtcbiAgICBzdHJpbmdfb2ZfaGV4IHNcblxuZW5kXG5cbm1vZHVsZSBCTEFLRTEyOCA9IEJMQUtFMihzdHJ1Y3QgbGV0IGhhc2hfbGVuZ3RoID0gMTYgZW5kKVxubW9kdWxlIEJMQUtFMjU2ID0gQkxBS0UyKHN0cnVjdCBsZXQgaGFzaF9sZW5ndGggPSAzMiBlbmQpXG5tb2R1bGUgQkxBS0U1MTIgPSBCTEFLRTIoc3RydWN0IGxldCBoYXNoX2xlbmd0aCA9IDY0IGVuZClcblxuKCogTUQ1IGhhc2hpbmcgKilcblxubW9kdWxlIE1ENSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBoYXNoX2xlbmd0aCA9IDE2XG5cbiAgbGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxuICBsZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuICBleHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuICBleHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxuICBsZXQgc3RyaW5nIHN0ciA9XG4gICAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxuICBsZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gICAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbiAgbGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbiAgbGV0IGZpbGUgZmlsZW5hbWUgPVxuICAgIEluX2NoYW5uZWwud2l0aF9vcGVuX2JpbiBmaWxlbmFtZSAoZnVuIGljIC0+IGNoYW5uZWwgaWMgKC0xKSlcblxuICBsZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID0gb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG4gIGxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbiAgbGV0IHRvX2hleCBkID1cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgICBoZXhfb2Zfc3RyaW5nIGRcblxuICBsZXQgb2ZfaGV4IHMgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gICAgc3RyaW5nX29mX2hleCBzXG5cbmVuZFxuXG4oKiBEZWZhdWx0IGV4cG9ydGVkIGltcGxlbWVudGF0aW9uIGlzIE1ENSAqKVxuXG5pbmNsdWRlIE1ENVxuXG5sZXQgZnJvbV9oZXggPSBvZl9oZXhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGFrZTJfZmluYWwiLCJjYW1sX2JsYWtlMl9zdHJpbmciLCJjYW1sX2JsYWtlMl91cGRhdGUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWQ1X2NoYW4iLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9Jbl9jaGFubmVsIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsImhleF9vZl9zdHJpbmciLCJkIiwiY2hhcl9oZXgiLCJuIiwibGVuIiwicmVzdWx0IiwiaSIsIngiLCJjc3RfRGlnZXN0X29mX2hleCIsInN0cmluZ19vZl9oZXgiLCJzIiwiZGlnaXQiLCJjIiwiY3N0X0RpZ2VzdF9zdWJzdHJpbmciLCJjc3RfRGlnZXN0X3RvX2hleCIsIkJMQUtFMiIsIlgiLCJoYXNoX2xlbmd0aCIsImNvbXBhcmUiLCJlcXVhbCIsImNzdCIsInN0cmluZyIsInN0ciIsImJ5dGVzIiwiYiIsInN1YnN0cmluZyIsIm9mcyIsInN1YmJ5dGVzIiwiY2hhbm5lbCIsImljIiwidG9yZWFkIiwiYnVmIiwiY3R4IiwiYnVmX3NpemUiLCJmaWxlIiwiZmlsZW5hbWUiLCJvdXRwdXQiLCJjaGFuIiwiZGlnZXN0IiwiaW5wdXQiLCJ0b19oZXgiLCJvZl9oZXgiLCJCTEFLRTEyOCIsIkJMQUtFMjU2IiwiQkxBS0U1MTIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxZQUFBQyxjQUFBQztBQUFBQSxhQUFBQyxTQUFBQztBQUFBQSxTQUFBLElDbUJJO0FBQUEsd0NBQ2dEO0FBQUE7QUFBQTtBQUFBLEtBQUFDLE1BQ2xEO0FBQUEsS0FBQUMsU0FDYTtBQUFBLFNBQ2I7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLFVBQUFDLElBQ29CO0FBQUEsTUFDZ0MseUNBQXBCO0FBQUEsTUFDMEIsbURBQXhCO0FBQUEsY0FBd0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBRTFELDBDQUE2QjtBQUFBO0FBQUEsT0FBQUMsb0JENUIvQjtBQUFBLFlBQUFDLGNBQUFDO0FBQUFBLGFBQUFDLE1BQUFDO0FBQUFBLEtDZ0NJO0FBQUE7QUFBQSxtQkFHYztBQUFBO0FBQUEsc0JBREE7QUFBQTtBQUFBLGdDQURBO0FBQUEsS0FHUCw4Q0FBMkI7QUFBQTtBQUFBLElBRXBDO0FBQUE7QUFBQTtBQUFBLHNCQUFBTjtBQUFBQTtBQUFBQSxlQUFBQSxNQUE0QztBQUFBLG1CQURYLE1BQU07QUFBQSxtQkFBcEIsQ0FBTixNQUFNO0FBQUEsY0FDZ0Q7QUFBQSxlQUFDO0FBQUE7QUFBQTtBQUFBLElBQUFPLHVCRHRDdEU7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLE9BQUFDO0FBQUFBLFFBQUE7QUFBQSxVQ21FUztBQUFBO0FBQUEsS0FBQUMsY0FDTDtBQUFBLEtBQUFDLFVBQUE7QUFBQSxLQUFBQyxRQUFBO0FBQUEsS0FBQUMsTURwRUo7QUFBQSxhQUFBQyxPQUFBQztBQUFBQSxLQ29GSTtBQUFBLG1FQUFzRDtBQUFBO0FBQUEsYUFBQUMsTUFBQUMsR0FHL0MsT0FBMEIsT0FBMUIsK0JBQTBCO0FBQUEsYUFBQUMsVUFBQUgsS0FBQUksS0FBQXRCO0FBQUFBLFNBQUEsSUFHakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQ0s7QUFBQSxLQUNMLDBEQUF3QztBQUFBO0FBQUEsYUFBQXVCLFNBQUFILEdBQUFFLEtBQUF0QjtBQUFBQSxLQUc5QixPQUEwQixVQUExQix5Q0FBa0M7QUFBQTtBQUFBLGFBQUF3QixRQUFBQyxJQUFBQztBQUFBQTtBQUFBQSxNQUFBQyxNQUlsQztBQUFBLE1BQUFDLE1BbEJJO0FBQUEsTUFBQUMsV0FpQmQ7QUFBQSxLQUdBO0FBQUEsVUFBQUgsV0FBQTtBQUFBO0FBQUEsT0FTSSxtQkFBbUIsMENBVXBCO0FBQUE7QUFBQSxZQVRxQztBQUFBLFFBQUEzQixJQUExQjtBQUFBLE9BQ1IsWUFDSztBQUFBLE9BRUgsd0JBQVc7QUFBQSxXQUFBMkIsV0FBZ0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BZG5EO0FBQUEsV0FBQTNCLE1BRVk7QUFBQSxPQUNSLGNBQ0ssMENBZU47QUFBQSxPQWRPLHdCQUFXO0FBQUE7QUFBQSxJQWNsQjtBQUFBLGFBQUErQixLQUFBQztBQUFBQSxLQUdIO0FBQUEsdUNBQUFOLElBQTZDLHNCQUFlLEdBQUM7QUFBQTtBQUFBLGFBQUFPLE9BQUFDLE1BQUFDLFFBRXRDLDBDQUF5QjtBQUFBLGFBQUFDLE1BQUFGLE1BRWpDLCtDQUFvQztBQUFBLGFBQUFHLE9BQUF2QztBQUFBQSxLQUduRDtBQUFBLE1BQXVDO0FBQUEsS0FDdkMsdUJBQWU7QUFBQTtBQUFBLGFBQUF3QyxPQUFBL0I7QUFBQUEsS0FHZjtBQUFBLE1BQTJDO0FBQUEsS0FDM0MsdUJBQWU7QUFBQTtBQUFBLElBbkVmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQWdDLFdEcEVKO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBMUIsVUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxZQUFBRSxPQUFBQztBQUFBQSxJQzhKSSwwREFBdUM7QUFBQTtBQUFBLFlBQUFDLE1BQUFDLEdBRXBCLE9BQTBCLE9BQTFCLCtCQUEwQjtBQUFBLFlBQUFDLFVBQUFILEtBQUFJLEtBQUF0QjtBQUFBQSxJQUc3QztBQUFBLEtBRUsscUNBQXlCO0FBQUEsSUFEekIsaURBQ3lCO0FBQUE7QUFBQSxZQUFBdUIsU0FBQUgsR0FBQUUsS0FBQXRCO0FBQUFBLElBRUcsT0FBMEIsVUFBMUIseUNBQWtDO0FBQUE7QUFBQSxZQUFBOEIsS0FBQUM7QUFBQUEsSUFHbkU7QUFBQSxzQ0FBQU4sSUFBNkMsNEJBQWUsR0FBQztBQUFBO0FBQUEsWUFBQU8sT0FBQUMsTUFBQUMsUUFFdEMsMENBQXlCO0FBQUEsWUFBQUMsTUFBQUYsTUFFakMsc0NBQTJCO0FBQUEsWUFBQUcsT0FBQXZDO0FBQUFBLElBRzFDO0FBQUEsS0FBOEI7QUFBQSxJQUM5Qix1QkFBZTtBQUFBO0FBQUEsWUFBQXdDLE9BQUEvQjtBQUFBQSxJQUdmO0FBQUEsS0FBOEI7QUFBQSxJQUM5Qix1QkFBZTtBQUFBO0FBQUEsR0R0TG5CIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjMwMTYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvYmlnYXJyYXkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgTWFudWVsIFNlcnJhbm8gZXQgWGF2aWVyIExlcm95LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbQmlnYXJyYXldOiBsYXJnZSwgbXVsdGktZGltZW5zaW9uYWwsIG51bWVyaWNhbCBhcnJheXMgKilcblxuKCogVGhlc2UgdHlwZXMgaW4gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdGFibGVzIGluXG4gICAuLi90eXBpbmcvdHlwZW9wdC5tbCAqKVxuXG50eXBlIGZsb2F0MTZfZWx0ID0gRmxvYXQxNl9lbHRcbnR5cGUgZmxvYXQzMl9lbHQgPSBGbG9hdDMyX2VsdFxudHlwZSBmbG9hdDY0X2VsdCA9IEZsb2F0NjRfZWx0XG50eXBlIGludDhfc2lnbmVkX2VsdCA9IEludDhfc2lnbmVkX2VsdFxudHlwZSBpbnQ4X3Vuc2lnbmVkX2VsdCA9IEludDhfdW5zaWduZWRfZWx0XG50eXBlIGludDE2X3NpZ25lZF9lbHQgPSBJbnQxNl9zaWduZWRfZWx0XG50eXBlIGludDE2X3Vuc2lnbmVkX2VsdCA9IEludDE2X3Vuc2lnbmVkX2VsdFxudHlwZSBpbnQzMl9lbHQgPSBJbnQzMl9lbHRcbnR5cGUgaW50NjRfZWx0ID0gSW50NjRfZWx0XG50eXBlIGludF9lbHQgPSBJbnRfZWx0XG50eXBlIG5hdGl2ZWludF9lbHQgPSBOYXRpdmVpbnRfZWx0XG50eXBlIGNvbXBsZXgzMl9lbHQgPSBDb21wbGV4MzJfZWx0XG50eXBlIGNvbXBsZXg2NF9lbHQgPSBDb21wbGV4NjRfZWx0XG5cbigqIEtlZXAgdGhlIG9yZGVyIG9mIHRoZXNlIGNvbnN0cnVjdG9ycyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfa2luZFxuICAgZW51bWVyYXRpb24gaW4gYmlnYXJyYXkuaCAqKVxuXG50eXBlICgnYSwgJ2IpIGtpbmQgPVxuICB8IEZsb2F0MzIgOiAoZmxvYXQsIGZsb2F0MzJfZWx0KSBraW5kXG4gIHwgRmxvYXQ2NCA6IChmbG9hdCwgZmxvYXQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3NpZ25lZCA6IChpbnQsIGludDhfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDhfdW5zaWduZWQgOiAoaW50LCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3NpZ25lZCA6IChpbnQsIGludDE2X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl91bnNpZ25lZCA6IChpbnQsIGludDE2X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDMyIDogKGludDMyLCBpbnQzMl9lbHQpIGtpbmRcbiAgfCBJbnQ2NCA6IChpbnQ2NCwgaW50NjRfZWx0KSBraW5kXG4gIHwgSW50IDogKGludCwgaW50X2VsdCkga2luZFxuICB8IE5hdGl2ZWludCA6IChuYXRpdmVpbnQsIG5hdGl2ZWludF9lbHQpIGtpbmRcbiAgfCBDb21wbGV4MzIgOiAoQ29tcGxleC50LCBjb21wbGV4MzJfZWx0KSBraW5kXG4gIHwgQ29tcGxleDY0IDogKENvbXBsZXgudCwgY29tcGxleDY0X2VsdCkga2luZFxuICB8IENoYXIgOiAoY2hhciwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBGbG9hdDE2IDogKGZsb2F0LCBmbG9hdDE2X2VsdCkga2luZFxuXG50eXBlIGNfbGF5b3V0ID0gQ19sYXlvdXRfdHlwXG50eXBlIGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRfdHlwICgqKilcblxudHlwZSAnYSBsYXlvdXQgPVxuICAgIENfbGF5b3V0OiBjX2xheW91dCBsYXlvdXRcbiAgfCBGb3J0cmFuX2xheW91dDogZm9ydHJhbl9sYXlvdXQgbGF5b3V0XG5cbmxldCBmbG9hdDE2ID0gRmxvYXQxNlxubGV0IGZsb2F0MzIgPSBGbG9hdDMyXG5sZXQgZmxvYXQ2NCA9IEZsb2F0NjRcbmxldCBpbnQ4X3NpZ25lZCA9IEludDhfc2lnbmVkXG5sZXQgaW50OF91bnNpZ25lZCA9IEludDhfdW5zaWduZWRcbmxldCBpbnQxNl9zaWduZWQgPSBJbnQxNl9zaWduZWRcbmxldCBpbnQxNl91bnNpZ25lZCA9IEludDE2X3Vuc2lnbmVkXG5sZXQgaW50MzIgPSBJbnQzMlxubGV0IGludDY0ID0gSW50NjRcbmxldCBpbnQgPSBJbnRcbmxldCBuYXRpdmVpbnQgPSBOYXRpdmVpbnRcbmxldCBjb21wbGV4MzIgPSBDb21wbGV4MzJcbmxldCBjb21wbGV4NjQgPSBDb21wbGV4NjRcbmxldCBjaGFyID0gQ2hhclxuXG5sZXQga2luZF9zaXplX2luX2J5dGVzIDogdHlwZSBhIGIuIChhLCBiKSBraW5kIC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgRmxvYXQxNiAtPiAyXG4gIHwgRmxvYXQzMiAtPiA0XG4gIHwgRmxvYXQ2NCAtPiA4XG4gIHwgSW50OF9zaWduZWQgLT4gMVxuICB8IEludDhfdW5zaWduZWQgLT4gMVxuICB8IEludDE2X3NpZ25lZCAtPiAyXG4gIHwgSW50MTZfdW5zaWduZWQgLT4gMlxuICB8IEludDMyIC0+IDRcbiAgfCBJbnQ2NCAtPiA4XG4gIHwgSW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgTmF0aXZlaW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgQ29tcGxleDMyIC0+IDhcbiAgfCBDb21wbGV4NjQgLT4gMTZcbiAgfCBDaGFyIC0+IDFcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2xheW91dCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgY19sYXlvdXQgPSBDX2xheW91dFxubGV0IGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRcblxubW9kdWxlIEdlbmFycmF5ID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHRcbiAgZXh0ZXJuYWwgY3JlYXRlOiAoJ2EsICdiKSBraW5kIC0+ICdjIGxheW91dCAtPiBpbnQgYXJyYXkgLT4gKCdhLCAnYiwgJ2MpIHRcbiAgICAgPSBcImNhbWxfYmFfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgYXJyYXkgLT4gJ2FcbiAgICAgPSBcImNhbWxfYmFfZ2V0X2dlbmVyaWNcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYSAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX3NldF9nZW5lcmljXCJcblxuICBsZXQgcmVjIGNsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPSBBcnJheS5sZW5ndGggaWR4IHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAwIHRvIHByZWQgbWF4Lihjb2wpIGRvXG4gICAgICAgICAgIGlkeC4oY29sKSA8LSBqO1xuICAgICAgICAgICBjbG9vcCBhcnIgaWR4IGYgKHN1Y2MgY29sKSBtYXhcbiAgICAgICAgIGRvbmVcbiAgbGV0IHJlYyBmbG9vcCBhcnIgaWR4IGYgY29sIG1heCA9XG4gICAgaWYgY29sIDwgMCB0aGVuIHNldCBhcnIgaWR4IChmIGlkeClcbiAgICBlbHNlIGZvciBqID0gMSB0byBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGZsb29wIGFyciBpZHggZiAocHJlZCBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltcyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbXMgaW5cbiAgICBsZXQgZGxlbiA9IEFycmF5Lmxlbmd0aCBkaW1zIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDApIGYgMCBkaW1zOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDEpIGYgKHByZWQgZGxlbikgZGltczsgYXJyXG5cbiAgZXh0ZXJuYWwgbnVtX2RpbXM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiY2FtbF9iYV9udW1fZGltc1wiXG4gIGV4dGVybmFsIG50aF9kaW06ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfYmFfZGltXCJcbiAgbGV0IGRpbXMgYSA9XG4gICAgbGV0IG4gPSBudW1fZGltcyBhIGluXG4gICAgbGV0IGQgPSBBcnJheS5tYWtlIG4gMCBpblxuICAgIGZvciBpID0gMCB0byBuLTEgZG8gZC4oaSkgPC0gbnRoX2RpbSBhIGkgZG9uZTtcbiAgICBkXG5cbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChBcnJheS5mb2xkX2xlZnQgKCAqICkgMSAoZGltcyBhcnIpKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDogKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzbGljZV9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBzbGljZV9yaWdodDogKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IGFycmF5IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3NsaWNlXCJcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbmVuZFxuXG5tb2R1bGUgQXJyYXkwID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0ID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3x8XVxuICBsZXQgZ2V0IGFyciA9IEdlbmFycmF5LmdldCBhcnIgW3x8XVxuICBsZXQgc2V0IGFyciA9IEdlbmFycmF5LnNldCBhcnIgW3x8XVxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9IGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpXG5cbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcblxuICBsZXQgb2ZfdmFsdWUga2luZCBsYXlvdXQgdiA9XG4gICAgbGV0IGEgPSBjcmVhdGUga2luZCBsYXlvdXQgaW5cbiAgICBzZXQgYSB2O1xuICAgIGFcbiAgbGV0IGluaXQgPSBvZl92YWx1ZVxuZW5kXG5cbm1vZHVsZSBBcnJheTEgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW18XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzFcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMVwiXG4gIGV4dGVybmFsIGRpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKGRpbSBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsICdjKSB0ID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZSAodHlwZSB0KSAoYSA6IChfLCBfLCB0KSBHZW5hcnJheS50KSBuID1cbiAgICBtYXRjaCBsYXlvdXQgYSB3aXRoXG4gICAgfCBDX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XTogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbSBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBmb3J0cmFuX2luaXQgYXJyIGRpbSBmID1cbiAgICBmb3IgaSA9IDEgdG8gZGltIGRvIHVuc2FmZV9zZXQgYXJyIGkgKGYgaSkgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0gZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgKEFycmF5Lmxlbmd0aCBkYXRhKSBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGRhdGEgLSAxIGRvIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIGRhdGEuKGkpIGRvbmU7XG4gICAgYmFcbmVuZFxuXG5tb2R1bGUgQXJyYXkyID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMnxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzJcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWNhbWxfYmFfc2V0XzJcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzJcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMlwiXG4gIGV4dGVybmFsIGRpbTE6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzFcIlxuICBleHRlcm5hbCBkaW0yOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8yXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZV9sZWZ0IGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHQgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgY19pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGkgPSAwIHRvIHByZWQgZGltMSBkb1xuICAgICAgZm9yIGogPSAwIHRvIHByZWQgZGltMiBkb1xuICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogKGYgaSBqKVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGYgPVxuICAgIGZvciBqID0gMSB0byBkaW0yIGRvXG4gICAgICBmb3IgaSA9IDEgdG8gZGltMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogKGYgaSBqKVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBpblxuICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgfCBDX2xheW91dCAtPiBjX2luaXQgYXJyIGRpbTEgZGltMiBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gZGltMSAtIDEgZG9cbiAgICAgIGxldCByb3cgPSBkYXRhLihpKSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIHJvdyA8PiBkaW0yIHRoZW5cbiAgICAgICAgaW52YWxpZF9hcmcoXCJCaWdhcnJheS5BcnJheTIub2ZfYXJyYXk6IG5vbi1yZWN0YW5ndWxhciBkYXRhXCIpO1xuICAgICAgZm9yIGogPSAwIHRvIGRpbTIgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSByb3cuKGopXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTMgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbTE7IGRpbTI7IGRpbTN8XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfM1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfc2V0XzNcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYVxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8zXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8zXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBkaW0zOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8zXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKSAqIChkaW0zIGFycilcblxuICBleHRlcm5hbCBzdWJfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzdWJfcmlnaHQ6XG4gICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfcmlnaHRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xuOyBtfF1cbiAgbGV0IHNsaWNlX2xlZnRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF1cbiAgbGV0IHNsaWNlX3JpZ2h0XzIgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIGZvciBrID0gMCB0byBwcmVkIGRpbTMgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZiA9XG4gICAgZm9yIGsgPSAxIHRvIGRpbTMgZG9cbiAgICAgIGZvciBqID0gMSB0byBkaW0yIGRvXG4gICAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBhcnIgaSBqIGsgKGYgaSBqIGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGY7IGFyclxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGRpbTMgPSBpZiBkaW0yID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgbGV0IGNvbCA9IHJvdy4oaikgaW5cbiAgICAgICAgaWYgQXJyYXkubGVuZ3RoIGNvbCA8PiBkaW0zIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICAgIGZvciBrID0gMCB0byBkaW0zIC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSAoayArIG9mcykgY29sLihrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MDogKCdhLCAnYiwgJ2MpIEFycmF5MC50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MTogKCdhLCAnYiwgJ2MpIEFycmF5MS50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MjogKCdhLCAnYiwgJ2MpIEFycmF5Mi50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MzogKCdhLCAnYiwgJ2MpIEFycmF5My50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmxldCBhcnJheTBfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAwIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkwX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTFfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAxIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkxX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTJfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAyIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkyX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTNfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAzIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkzX29mX2dlbmFycmF5XCJcblxuZXh0ZXJuYWwgcmVzaGFwZTpcbiAgICgnYSwgJ2IsICdjKSBHZW5hcnJheS50IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcImNhbWxfYmFfcmVzaGFwZVwiXG5sZXQgcmVzaGFwZV8wIGEgPSByZXNoYXBlIGEgW3x8XVxubGV0IHJlc2hhcGVfMSBhIGRpbTEgPSByZXNoYXBlIGEgW3xkaW0xfF1cbmxldCByZXNoYXBlXzIgYSBkaW0xIGRpbTIgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTJ8XVxubGV0IHJlc2hhcGVfMyBhIGRpbTEgZGltMiBkaW0zID0gcmVzaGFwZSBhIFt8ZGltMTtkaW0yO2RpbTN8XVxuXG4oKiBGb3JjZSBjYW1sX2JhX2dldF97MSwyLDMsTn0gdG8gYmUgbGlua2VkIGluLCBzaW5jZSB3ZSBkb24ndCByZWZlclxuICAgdG8gdGhvc2UgcHJpbWl0aXZlcyBkaXJlY3RseSBpbiB0aGlzIGZpbGUgKilcblxubGV0IF8gPVxuICBsZXQgXyA9IEdlbmFycmF5LmdldCBpblxuICBsZXQgXyA9IEFycmF5MS5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTIuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkzLmdldCBpblxuICAoKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuZXh0ZXJuYWwgZ2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8xXCJcbmV4dGVybmFsIGdldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfMlwiXG5leHRlcm5hbCBnZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzNcIlxuZXh0ZXJuYWwgc2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8xXCJcbmV4dGVybmFsIHNldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfMlwiXG5leHRlcm5hbCBzZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzNcIlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2NoYW5nZV9sYXlvdXQiLCJjYW1sX2JhX2NyZWF0ZSIsImNhbWxfYmFfZGltXzEiLCJjYW1sX2JhX2RpbV8yIiwiY2FtbF9iYV9raW5kIiwiY2FtbF9iYV9udW1fZGltcyIsImNhbWxfYmFfcmVzaGFwZSIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2JhX3NldF8yIiwiY2FtbF9iYV9zZXRfMyIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2JhX3NsaWNlIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tdWwiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9TeXMiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJwYXJhbSIsImNsb29wIiwiYXJyIiwiaWR4IiwiY29sIiwibWF4IiwiaiIsImZsb29wIiwiaW5pdCIsImtpbmQiLCJsYXlvdXQiLCJkaW1zIiwiZGxlbiIsImEiLCJuIiwiZCIsImkiLCJzaXplX2luX2J5dGVzIiwiY3JlYXRlIiwiZ2V0Iiwic2V0Iiwib2ZfdmFsdWUiLCJ2IiwiZGltIiwic2xpY2UiLCJvZl9hcnJheSIsImRhdGEiLCJiYSIsIm9mcyIsImRpbTEiLCJkaW0yIiwic2xpY2VfbGVmdCIsInNsaWNlX3JpZ2h0Iiwicm93IiwiZGltMyIsInNsaWNlX2xlZnRfMSIsIm0iLCJzbGljZV9yaWdodF8xIiwic2xpY2VfbGVmdF8yIiwic2xpY2VfcmlnaHRfMiIsImsiLCJjc3RfQmlnYXJyYXlfQXJyYXkzX29mX2FycmF5X24iLCJhcnJheTBfb2ZfZ2VuYXJyYXkiLCJhcnJheTFfb2ZfZ2VuYXJyYXkiLCJhcnJheTJfb2ZfZ2VuYXJyYXkiLCJhcnJheTNfb2ZfZ2VuYXJyYXkiLCJyZXNoYXBlXzAiLCJyZXNoYXBlXzEiLCJyZXNoYXBlXzIiLCJyZXNoYXBlXzMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGFBQUE7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Z0IsTUFBQUMsTUFBQUk7QUFBQUEsSUFDbEIsZ0RBQTRCO0FBQUE7QUFBQSxHQVUzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ1WkYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMzUxNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9yYW5kb20ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDYW1iaXVtLCBDb2xsZWdlIGRlIEZyYW5jZSBhbmQgSW5yaWEgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgb3BlbiBCaWdhcnJheVxuXG4gIHR5cGUgdCA9IChpbnQ2NCwgaW50NjRfZWx0LCBjX2xheW91dCkgQXJyYXkxLnRcblxuICBleHRlcm5hbCBuZXh0OiB0IC0+IChpbnQ2NFtAdW5ib3hlZF0pXG4gICAgICA9IFwiY2FtbF9seG1fbmV4dFwiIFwiY2FtbF9seG1fbmV4dF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuICBsZXQgY3JlYXRlICgpIDogdCA9XG4gICAgQXJyYXkxLmNyZWF0ZSBJbnQ2NCBDX2xheW91dCA0XG5cbiAgbGV0IHNldCBzIGkxIGkyIGkzIGk0ID1cbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDAgKEludDY0LmxvZ29yIGkxIDFMKTsgKCogbXVzdCBiZSBvZGQgKilcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDEgaTI7XG4gICAgQXJyYXkxLnVuc2FmZV9zZXQgcyAyIChpZiBpMyA8PiAwTCB0aGVuIGkzIGVsc2UgMUwpOyAoKiBtdXN0IG5vdCBiZSAwICopXG4gICAgQXJyYXkxLnVuc2FmZV9zZXQgcyAzIChpZiBpNCA8PiAwTCB0aGVuIGk0IGVsc2UgMkwpICgqIG11c3Qgbm90IGJlIDAgKilcblxuICBsZXQgbWsgaTEgaTIgaTMgaTQgPVxuICAgIGxldCBzID0gY3JlYXRlICgpIGluXG4gICAgc2V0IHMgaTEgaTIgaTMgaTQ7IHNcblxuICBsZXQgc2VyaWFsaXphdGlvbl9wcmVmaXggPVxuICAgIFwibHhtMTpcIlxuICAgICgqIFwibHhtXCIgZGVub3RlcyB0aGUgYWxnb3JpdGhtIGN1cnJlbnRseSBpbiB1c2UsIGFuZCAnMScgaXNcbiAgICAgICBhIHZlcnNpb24gbnVtYmVyLiBXZSBzaG91bGQgdXBkYXRlIHRoaXMgcHJlZml4IGlmIHdlIGNoYW5nZVxuICAgICAgIHRoZSBSYW5kb20gYWxnb3JpdGhtIG9yIHRoZSBzZXJpYWxpemF0aW9uIGZvcm1hdCwgc28gdGhhdCB1c2Vyc1xuICAgICAgIGdldCBhIGNsZWFuIGVycm9yIGluc3RlYWQgb2YgYmVsaWV2aW5nIHRoYXQgdGhleSBmYWl0aGZ1bGx5XG4gICAgICAgcmVwcm9kdWNlIHRoZWlyIHByZXZpb3VzIHN0YXRlIGFuZCBpbiBmYWN0IGdldCBhIGRpZmZlcmVudFxuICAgICAgIHN0cmVhbS5cblxuICAgICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBjb25zdHJhaW50IHRvIGtlZXAgdGhlIHNhbWVcbiAgICAgICBcIjxuYW1lPjx2ZXI+OjxkYXRhPlwiIGZvcm1hdCBvciBtZXNzYWdlIHNpemUgaW4gZnV0dXJlIHZlcnNpb25zLFxuICAgICAgIHdlIGNvdWxkIGNoYW5nZSB0aGUgZm9ybWF0IGNvbXBsZXRlbHkgaWYgd2Ugd2FudGVkIGFzIGxvbmdcbiAgICAgICBhcyB0aGVyZSBpcyBubyBjb25mdXNpb24gcG9zc2libGUgd2l0aCB0aGUgcHJldmlvdXMgZm9ybWF0cy4gKilcblxuICBsZXQgc2VyaWFsaXphdGlvbl9wcmVmaXhfbGVuID1cbiAgICBTdHJpbmcubGVuZ3RoIHNlcmlhbGl6YXRpb25fcHJlZml4XG5cbiAgbGV0IHRvX2JpbmFyeV9zdHJpbmcgcyA9XG4gICAgbGV0IHByZWZpeCA9IHNlcmlhbGl6YXRpb25fcHJlZml4IGluXG4gICAgbGV0IHByZWZsZW4gPSBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChwcmVmbGVuICsgNCAqIDgpIGluXG4gICAgQnl0ZXMuYmxpdF9zdHJpbmcgcHJlZml4IDAgYnVmIDAgcHJlZmxlbjtcbiAgICBmb3IgaSA9IDAgdG8gMyBkb1xuICAgICAgQnl0ZXMuc2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIGkgKiA4KSAoQXJyYXkxLmdldCBzIGkpXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuXG4gIGxldCBvZl9iaW5hcnlfc3RyaW5nIGJ1ZiA9XG4gICAgbGV0IHByZWZpeCA9IHNlcmlhbGl6YXRpb25fcHJlZml4IGluXG4gICAgbGV0IHByZWZsZW4gPSBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gaW5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGJ1ZiA8PiBwcmVmbGVuICsgNCAqIDhcbiAgICAgICB8fCBub3QgKFN0cmluZy5zdGFydHNfd2l0aCB+cHJlZml4IGJ1ZilcbiAgICB0aGVuXG4gICAgICBmYWlsd2l0aFxuICAgICAgICAoXCJSYW5kb20uU3RhdGUub2ZfYmluYXJ5X3N0cmluZzogZXhwZWN0ZWQgYSBmb3JtYXQgXFxcbiAgICAgICAgICBjb21wYXRpYmxlIHdpdGggT0NhbWwgXCIgXiBTeXMub2NhbWxfdmVyc2lvbik7XG4gICAgbGV0IGkxID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAwICogOCkgaW5cbiAgICBsZXQgaTIgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDEgKiA4KSBpblxuICAgIGxldCBpMyA9IFN0cmluZy5nZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgMiAqIDgpIGluXG4gICAgbGV0IGk0ID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAzICogOCkgaW5cbiAgICBtayBpMSBpMiBpMyBpNFxuXG4gIGxldCBhc3NpZ24gKGRzdDogdCkgKHNyYzogdCkgPVxuICAgIEFycmF5MS5ibGl0IHNyYyBkc3RcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcycgPSBjcmVhdGUoKSBpbiBhc3NpZ24gcycgczsgcydcblxuICAoKiBUaGUgc2VlZCBpcyBhbiBhcnJheSBvZiBpbnRlZ2Vycy4gIEl0IGNhbiBiZSBqdXN0IG9uZSBpbnRlZ2VyLFxuICAgICBidXQgaXQgY2FuIGFsc28gYmUgMTIgb3IgbW9yZSBieXRlcy4gIFRvIGhpZGUgdGhlIGRpZmZlcmVuY2UsXG4gICAgIHdlIHNlcmlhbGl6ZSB0aGUgYXJyYXkgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcywgdGhlbiBoYXNoIHRoZVxuICAgICBzZXF1ZW5jZSB3aXRoIE1ENSAoRGlnZXN0LmJ5dGVzKS4gIE1ENSBnaXZlcyBvbmx5IDEyOCBiaXRzIHdoaWxlXG4gICAgIHdlIG5lZWQgMjU2IGJpdHMsIHNvIHdlIGhhc2ggdHdpY2Ugd2l0aCBkaWZmZXJlbnQgc3VmZml4ZXMuICopXG4gIGxldCByZWluaXQgcyBzZWVkID1cbiAgICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgbGV0IGIgPSBCeXRlcy5jcmVhdGUgKG4gKiA4ICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gbi0xIGRvXG4gICAgICBCeXRlcy5zZXRfaW50NjRfbGUgYiAoaSAqIDgpIChJbnQ2NC5vZl9pbnQgc2VlZC4oaSkpXG4gICAgZG9uZTtcbiAgICBCeXRlcy5zZXQgYiAobiAqIDgpICdcXHgwMSc7XG4gICAgbGV0IGQxID0gRGlnZXN0LmJ5dGVzIGIgaW5cbiAgICBCeXRlcy5zZXQgYiAobiAqIDgpICdcXHgwMic7XG4gICAgbGV0IGQyID0gRGlnZXN0LmJ5dGVzIGIgaW5cbiAgICBzZXQgcyAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMSAwKVxuICAgICAgICAgIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQxIDgpXG4gICAgICAgICAgKFN0cmluZy5nZXRfaW50NjRfbGUgZDIgMClcbiAgICAgICAgICAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMiA4KVxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCBzID0gY3JlYXRlKCkgaW4gcmVpbml0IHMgc2VlZDsgc1xuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9XG4gICAgbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IG1pbl9pbnQzMSA9IC0weDQwMDBfMDAwMFxuICAgICAgKCogPSAtMnteMzB9LCB3aGljaCBpcyBbbWluX2ludF0gZm9yIDMxLWJpdCBpbnRlZ2VycyAqKVxuICBsZXQgbWF4X2ludDMxID0gMHgzRkZGX0ZGRkZcbiAgICAgICgqID0gIDJ7XjMwfS0xLCB3aGljaCBpcyBbbWF4X2ludF0gZm9yIDMxLWJpdCBpbnRlZ2VycyAqKVxuICAoKiBhdm9pZCBpbnRlZ2VyIGxpdGVyYWxzIGZvciB0aGVzZSwgMzItYml0IE9DYW1sIHdvdWxkIHJlamVjdCB0aGVtOiAqKVxuICBsZXQgbWluX2ludDMyID0gLSgxIGxzbCAzMSlcbiAgICAgICgqID0gLTB4ODAwMF8wMDAwIG9uIHBsYXRmb3JtcyB3aGVyZSBbU3lzLmludF9zaXplID49IDMyXSAqKVxuICBsZXQgbWF4X2ludDMyID0gKDEgbHNsIDMxKSAtIDFcbiAgICAgICgqID0gIDB4N0ZGRl9GRkZGIG9uIHBsYXRmb3JtcyB3aGVyZSBbU3lzLmludF9zaXplID49IDMyXSAqKVxuXG4gICgqIFJldHVybiAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDJeMzAgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgSW50NjQudG9faW50IChuZXh0IHMpIGxhbmQgbWF4X2ludDMxXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtuXSAoZXhjbHVkZWQpLlxuICAgICBbYm91bmRdIG1heSBiZSBhbnkgcG9zaXRpdmUgW2ludF0uICBbbWFza10gbXVzdCBiZSBvZiB0aGUgZm9ybSBbMnteaX0tMV1cbiAgICAgYW5kIGdyZWF0ZXIgb3IgZXF1YWwgdG8gW25dLiAgTGFyZ2VyIHZhbHVlcyBvZiBbbWFza10gbWFrZSB0aGUgZnVuY3Rpb25cbiAgICAgcnVuIGZhc3RlciAoZmV3ZXIgc2FtcGxlcyBhcmUgcmVqZWN0ZWQpLiAgU21hbGxlciB2YWx1ZXMgb2YgW21hc2tdXG4gICAgIGFyZSB1c2FibGUgb24gYSB3aWRlciByYW5nZSBvZiBPQ2FtbCBpbXBsZW1lbnRhdGlvbnMuICAqKVxuICBsZXQgcmVjIGludF9hdXggcyBuIG1hc2sgPVxuICAgICgqIFdlIHN0YXJ0IGJ5IGRyYXdpbmcgYSBub24tbmVnYXRpdmUgaW50ZWdlciBpbiB0aGUgWyBbMCwgbWFza10gXSByYW5nZSAqKVxuICAgIGxldCByID0gSW50NjQudG9faW50IChuZXh0IHMpIGxhbmQgbWFzayBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgICgqIEZvciB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcmVzdWx0IGJldHdlZW4gMCBpbmNsdWRlZCBhbmQgW25dXG4gICAgICogZXhjbHVkZWQsIHRoZSByYW5kb20gbnVtYmVyIFtyXSBtdXN0IGhhdmUgYmVlbiBkcmF3biB1bmlmb3JtbHkgaW5cbiAgICAgKiBhbiBpbnRlcnZhbCB3aG9zZSBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiBbbl0uIFRvIGFjaGlldmUgdGhpcyxcbiAgICAgKiB3ZSB1c2UgcmVqZWN0aW9uIHNhbXBsaW5nIG9uIHRoZSBncmVhdGVzdCBpbnRlcnZhbCBbIFswLCBrKm4tMV0gXVxuICAgICAqIHRoYXQgZml0cyBpbiBbIFswLCBtYXNrXSBdLiAgVGhhdCBpcywgd2UgcmVqZWN0IHRoZVxuICAgICAqIHNhbXBsZSBpZiBpdCBmYWxscyBvdXRzaWRlIG9mIHRoaXMgaW50ZXJ2YWwsIGFuZCBkcmF3IGFnYWluLlxuICAgICAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBiZWxvdyBkb2VzLCB3aGlsZSBjYXJlZnVseSBhdm9pZGluZ1xuICAgICAqIG92ZXJmbG93cyBhbmQgc3BhcmluZyBhIGRpdmlzaW9uIFttYXNrIC8gbl0uICopXG4gICAgaWYgciAtIHYgPiBtYXNrIC0gbiArIDEgdGhlbiBpbnRfYXV4IHMgbiBtYXNrIGVsc2UgdlxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuXG4gICAgIFRoZSBib3VuZCBtdXN0IGZpdCBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLlxuICAgICBUaGlzIGZ1bmN0aW9uIHlpZWxkcyB0aGUgc2FtZSBvdXRwdXQgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZWdlciBzaXplLiAqKVxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gbWF4X2ludDMxIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRfYXV4IHMgYm91bmQgbWF4X2ludDMxXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtib3VuZF0gKGV4Y2x1ZGVkKS5cbiAgICAgW2JvdW5kXSBtYXkgYmUgYW55IHBvc2l0aXZlIFtpbnRdLiAqKVxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgKCogV2hlbiB0aGUgYm91bmQgZml0cyBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgdGhlIHNhbWUgbWFza1xuICAgICAgIGFzIGluIGZ1bmN0aW9uIFtpbnRdIHNvIGFzIHRvIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zXG4gICAgICAgc3VwcG9ydGVkIGJ5IE9DYW1sICgzMi1iaXQgT0NhbWwsIDY0LWJpdCBPQ2FtbCwgYW5kIEphdmFTY3JpcHQpLlxuICAgICAgIFdoZW4gdGhlIGJvdW5kIGZpdHMgaW4gMzItYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIFttYXhfaW50MzJdXG4gICAgICAgYXMgdGhlIG1hc2sgc28gYXMgdG8geWllbGQgdGhlIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXMgd2hlcmVcbiAgICAgICBbU3lzLmludF9zaXplID49IDMyXSAoaS5lLiBKYXZhU2NyaXB0IGFuZCA2NC1iaXQgT0NhbWwpLiAqKVxuICAgIGVsc2VcbiAgICAgIGludF9hdXggcyBib3VuZFxuICAgICAgICAoaWYgYm91bmQgPD0gbWF4X2ludDMxIHRoZW4gbWF4X2ludDMxXG4gICAgICAgICBlbHNlIGlmIGJvdW5kIDw9IG1heF9pbnQzMiB0aGVuIG1heF9pbnQzMlxuICAgICAgICAgZWxzZSBtYXhfaW50KVxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgVGhlIFtuYml0c10gcGFyYW1ldGVyIGlzIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHNpZ25lZCBpbnRlZ2Vyc1xuICAgICB3ZSBkcmF3IGZyb20gW3NdLlxuICAgICBXZSBtdXN0IGhhdmUgWy0ye15uYml0cyAtIDF9IDw9IG1pbiA8PSBtYXggPCAye15uYml0cyAtIDF9XS5cbiAgICAgTW9yZW92ZXIsIGZvciB0aGUgaXRlcmF0aW9uIHRvIGNvbnZlcmdlIHF1aWNrbHksIHRoZSBpbnRlcnZhbFxuICAgICBbW21pbiwgbWF4XV0gc2hvdWxkIGhhdmUgd2lkdGggYXQgbGVhc3QgWzJ7Xm5iaXRzIC0gMX1dLlxuICAgICBBcyB0aGUgd2lkdGggYXBwcm9hY2hlcyB0aGlzIGxvd2VyIGxpbWl0LCB0aGUgYXZlcmFnZSBudW1iZXIgb2ZcbiAgICAgZHJhd3MgYXBwcm9hY2hlcyAyLCB3aXRoIGEgcXVpdGUgaGlnaCBzdGFuZGFyZCBkZXZpYXRpb24gKDIgKyBlcHNpbG9uKS4gKilcbiAgbGV0IHJlYyBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzID1cbiAgICBsZXQgZHJvcCA9IFN5cy5pbnRfc2l6ZSAtIG5iaXRzIGluXG4gICAgKCogVGhlIGJpdHNoaWZ0cyByZXBsaWNhdGUgdGhlIFtuYml0c10tdGggYml0IChzaWduIGJpdCkgdG8gaGlnaGVyIGJpdHM6ICopXG4gICAgbGV0IHIgPSAoKEludDY0LnRvX2ludCAobmV4dCBzKSkgbHNsIGRyb3ApIGFzciBkcm9wIGluXG4gICAgaWYgciA8IG1pbiB8fCByID4gbWF4IHRoZW4gaW50X2luX2xhcmdlX3JhbmdlIHMgfm1pbiB+bWF4IH5uYml0cyBlbHNlIHJcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuXG4gICAgIFttYXNrXSBpcyBhcyBkZXNjcmliZWQgZm9yIFtpbnRfYXV4XS5cbiAgICAgW25iaXRzXSBpcyBhcyBkZXNjcmliZWQgZm9yIFtpbnRfaW5fbGFyZ2VfcmFuZ2VdLiAqKVxuICBsZXQgaW50X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCB+bWFzayB+bmJpdHMgPVxuICAgIGxldCBzcGFuID0gbWF4IC0gbWluICsgMSBpblxuICAgIGlmIHNwYW4gPD0gbWFzayAoKiBbc3Bhbl0gaXMgc21hbGwgZW5vdWdoICopXG4gICAgJiYgc3BhbiA+IDAgICAgICgqIG5vIG92ZXJmbG93IG9jY3VycmVkIHdoZW4gY29tcHV0aW5nIFtzcGFuXSAqKVxuICAgIHRoZW5cbiAgICAgICgqIEp1c3QgZHJhdyBhIG51bWJlciBpbiBbWzAsIHNwYW4pXSBhbmQgc2hpZnQgaXQgYnkgW21pbl0uICopXG4gICAgICBtaW4gKyBpbnRfYXV4IHMgc3BhbiBtYXNrXG4gICAgZWxzZVxuICAgICAgKCogU3BhbiB0b28gbGFyZ2UsIHVzZSB0aGUgYWx0ZXJuYXRpdmUgZHJhd2luZyBtZXRob2QuICopXG4gICAgICBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgaW50X2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50X2luX3JhbmdlXCI7XG4gICAgKCogV2hlbiBib3RoIGJvdW5kcyBmaXQgaW4gMzEtYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIHBhcmFtZXRlcnNcbiAgICAgICBbbWFza10gYW5kIFtuYml0c10gYXBwcm9wcmlhdGUgZm9yIDMxLWJpdCBpbnRlZ2Vycywgc28gYXMgdG9cbiAgICAgICB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgT0NhbWwuXG4gICAgICAgV2hlbiBib3RoIGJvdW5kcyBmaXQgaW4gMzItYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIHBhcmFtZXRlcnNcbiAgICAgICBbbWFza10gYW5kIFtuYml0c10gYXBwcm9wcmlhdGUgZm9yIDMyLWJpdCBpbnRlZ2Vycywgc28gYXMgdG9cbiAgICAgICB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gSmF2YVNjcmlwdCBhbmQgb24gNjQtYml0IE9DYW1sLiAqKVxuICAgIGlmIG1pbiA+PSBtaW5faW50MzEgJiYgbWF4IDw9IG1heF9pbnQzMSB0aGVuXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQzMSB+bmJpdHM6MzFcbiAgICBlbHNlIGlmIG1pbiA+PSBtaW5faW50MzIgJiYgbWF4IDw9IG1heF9pbnQzMiB0aGVuXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQzMiB+bmJpdHM6MzJcbiAgICBlbHNlXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQgfm5iaXRzOlN5cy5pbnRfc2l6ZVxuXG4gICgqIFJldHVybiAzMiByYW5kb20gYml0cyBhcyBhbiBbaW50MzJdICopXG4gIGxldCBiaXRzMzIgcyA9XG4gICAgSW50NjQudG9faW50MzIgKG5leHQgcylcblxuICAoKiBSZXR1cm4gYW4gW2ludDMyXSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IHIgPSBJbnQzMi5zaGlmdF9yaWdodF9sb2dpY2FsIChiaXRzMzIgcykgMSBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9hdXhdLiAqKVxuICAgIGlmIEludDMyLihzdWIgciB2ID4gYWRkIChzdWIgbWF4X2ludCBuKSAxbClcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG4gICgqIFJldHVybiBhbiBbaW50MzJdIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgV2UgbXVzdCBoYXZlIFttaW4gPD0gbWF4XS4gKilcbiAgbGV0IHJlYyBpbnQzMl9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggPVxuICAgIGxldCByID0gSW50NjQudG9faW50MzIgKG5leHQgcykgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnQzMl9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggZWxzZSByXG5cbiAgbGV0IGludDMyX2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJfaW5fcmFuZ2VcIlxuICAgIGVsc2VcbiAgICAgIGxldCBzcGFuID0gSW50MzIuc3VjYyAoSW50MzIuc3ViIG1heCBtaW4pIGluXG4gICAgICAoKiBFeHBsYW5hdGlvbiBvZiB0aGlzIHRlc3Q6IHNlZSBjb21tZW50IGluIFtpbnRfaW5fcmFuZ2VfYXV4XS4gKilcbiAgICAgIGlmIHNwYW4gPD0gSW50MzIuemVybyB0aGVuXG4gICAgICAgIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heFxuICAgICAgZWxzZVxuICAgICAgICBJbnQzMi5hZGQgbWluIChpbnQzMmF1eCBzIHNwYW4pXG5cbiAgKCogUmV0dXJuIDY0IHJhbmRvbSBiaXRzIGFzIGFuIFtpbnQ2NF0gKilcbiAgbGV0IGJpdHM2NCBzID1cbiAgICBuZXh0IHNcblxuICAoKiBSZXR1cm4gYW4gW2ludDY0XSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIChiaXRzNjQgcykgMSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9hdXhdLiAqKVxuICAgIGlmIEludDY0LihzdWIgciB2ID4gYWRkIChzdWIgbWF4X2ludCBuKSAxTClcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG4gICgqIFJldHVybiBhbiBbaW50NjRdIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgV2UgbXVzdCBoYXZlIFttaW4gPD0gbWF4XS4gKilcbiAgbGV0IHJlYyBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggPVxuICAgIGxldCByID0gbmV4dCBzIGluXG4gICAgaWYgciA8IG1pbiB8fCByID4gbWF4IHRoZW4gaW50NjRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IGVsc2UgclxuXG4gIGxldCBpbnQ2NF9pbl9yYW5nZSBzIH5taW4gfm1heCA9XG4gICAgaWYgbWluID4gbWF4IHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0X2luX3JhbmdlXCJcbiAgICBlbHNlXG4gICAgICBsZXQgc3BhbiA9IEludDY0LnN1Y2MgKEludDY0LnN1YiBtYXggbWluKSBpblxuICAgICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2luX3JhbmdlX2F1eF0uICopXG4gICAgICBpZiBzcGFuIDw9IEludDY0Lnplcm8gdGhlblxuICAgICAgICBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXhcbiAgICAgIGVsc2VcbiAgICAgICAgSW50NjQuYWRkIG1pbiAoaW50NjRhdXggcyBzcGFuKVxuXG4gICgqIFJldHVybiAzMiBvciA2NCByYW5kb20gYml0cyBhcyBhIFtuYXRpdmVpbnRdICopXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuICAoKiBSZXR1cm4gYSBbbmF0aXZlaW50XSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cbiAgKCogUmV0dXJuIGEgW25hdGl2ZWludF0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLiAqKVxuICBsZXQgbmF0aXZlaW50X2luX3JhbmdlID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyB+bWluIH5tYXggLT5cbiAgICAgIE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzJfaW5fcmFuZ2Ugc1xuICAgICAgICB+bWluOihOYXRpdmVpbnQudG9faW50MzIgbWluKSB+bWF4OihOYXRpdmVpbnQudG9faW50MzIgbWF4KSlcbiAgICBlbHNlIGZ1biBzIH5taW4gfm1heCAtPlxuICAgICAgSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NF9pbl9yYW5nZSBzXG4gICAgICAgIH5taW46KEludDY0Lm9mX25hdGl2ZWludCBtaW4pIH5tYXg6KEludDY0Lm9mX25hdGl2ZWludCBtYXgpKVxuXG4gICgqIFJldHVybiBhIGZsb2F0IDAgPCB4IDwgMSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYW1vbmcgdGhlXG4gICAgIG11bHRpcGxlcyBvZiAyXi01MyAqKVxuICBsZXQgcmVjIHJhd2Zsb2F0IHMgPVxuICAgIGxldCBiID0gbmV4dCBzIGluXG4gICAgbGV0IG4gPSBJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIGIgMTEgaW5cbiAgICBpZiBuIDw+IDBMIHRoZW4gSW50NjQudG9fZmxvYXQgbiAqLiAweDEucC01MyBlbHNlIHJhd2Zsb2F0IHNcblxuICAoKiBSZXR1cm4gYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIFtib3VuZF0gKilcbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgKCogUmV0dXJuIGEgcmFuZG9tIEJvb2xlYW4gKilcbiAgbGV0IGJvb2wgcyA9IG5leHQgcyA8IDBMXG5cbiAgKCogU3BsaXQgYSBuZXcgUFJORyBvZmYgdGhlIGdpdmVuIFBSTkcgKilcbiAgbGV0IHNwbGl0IHMgPVxuICAgIGxldCBpMSA9IGJpdHM2NCBzIGluIGxldCBpMiA9IGJpdHM2NCBzIGluXG4gICAgbGV0IGkzID0gYml0czY0IHMgaW4gbGV0IGk0ID0gYml0czY0IHMgaW5cbiAgICBtayBpMSBpMiBpMyBpNFxuZW5kXG5cbmxldCBta19kZWZhdWx0ICgpID1cbiAgKCogVGhpcyBpcyB0aGUgc3RhdGUgb2J0YWluZWQgd2l0aCBbU3RhdGUubWFrZSBbfCAzMTQxNTkyNjUgfF1dLiAqKVxuICBTdGF0ZS5tayAoLTYxOTY4NzQyODk1Njc3MDUwOTdMKVxuICAgICAgICAgICA1ODY1NzMyNDk4MzM3MTMxODlMXG4gICAgICAgICAgICgtODU5MTI2ODgwMzg2NTA0MzQwN0wpXG4gICAgICAgICAgIDYzODg2MTM1OTU4NDk3NzIwNDRMXG5cbmxldCByYW5kb21fa2V5ID1cbiAgRG9tYWluLkRMUy5uZXdfa2V5IH5zcGxpdF9mcm9tX3BhcmVudDpTdGF0ZS5zcGxpdCBta19kZWZhdWx0XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBpbnRfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUuaW50X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludDMyX2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLmludDMyX2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgbmF0aXZlaW50X2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLm5hdGl2ZWludF9pbl9yYW5nZSAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgfm1pbiB+bWF4XG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBpbnQ2NF9pbl9yYW5nZSB+bWluIH5tYXggPVxuICBTdGF0ZS5pbnQ2NF9pbl9yYW5nZSAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgfm1pbiB+bWF4XG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IG5hdGl2ZWJpdHMgKCkgPSBTdGF0ZS5uYXRpdmViaXRzIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5yZWluaXQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIHNlZWRcbmxldCBpbml0IHNlZWQgPSBmdWxsX2luaXQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogU3BsaXR0aW5nICopXG5cbmxldCBzcGxpdCAoKSA9IFN0YXRlLnNwbGl0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IHNldF9zdGF0ZSBzID0gU3RhdGUuYXNzaWduIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBzXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmFfYmxpdCIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9ncmVhdGVydGhhbiIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9seG1fbmV4dCIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfSW50MzIiLCJTdGRsaWJfSW50NjQiLCJTdGRsaWIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfRGlnZXN0IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9CaWdhcnJheSIsIlN0ZGxpYl9OYXRpdmVpbnQiLCJjcmVhdGUiLCJwYXJhbSIsInNldCIsInMiLCJpMSIsImkyIiwiaTMiLCJpNCIsIm1rIiwic2VyaWFsaXphdGlvbl9wcmVmaXgiLCJ0b19iaW5hcnlfc3RyaW5nIiwiYnVmIiwiaSIsIm9mX2JpbmFyeV9zdHJpbmciLCJjb3B5Iiwic3JjIiwiZHN0IiwicmVpbml0Iiwic2VlZCIsIm4iLCJiIiwiZDEiLCJkMiIsIm1ha2UiLCJtYWtlX3NlbGZfaW5pdCIsImJpdHMiLCJpbnRfYXV4IiwibWFzayIsInIiLCJ2IiwibWF4X2ludDMxIiwiaW50IiwiYm91bmQiLCJtYXhfaW50MzIiLCJmdWxsX2ludCIsImludF9pbl9yYW5nZV9hdXgiLCJtaW4iLCJtYXgiLCJuYml0cyIsInNwYW4iLCJkcm9wIiwiaW50X2luX3JhbmdlIiwiYml0czMyIiwiaW50MzJhdXgiLCJpbnQzMiIsImludDMyX2luX3JhbmdlIiwiaW50NjRhdXgiLCJpbnQ2NCIsImludDY0X2luX3JhbmdlIiwibmF0aXZlYml0cyIsIm5hdGl2ZWludCIsIm5hdGl2ZWludF9pbl9yYW5nZSIsImZsb2F0IiwiYm9vbCIsInNwbGl0IiwibWtfZGVmYXVsdCIsInJhbmRvbV9rZXkiLCJzY2FsZSIsImJpdHM2NCIsImZ1bGxfaW5pdCIsImluaXQiLCJzZWxmX2luaXQiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsT0FBQUMsT0M4Qkksa0RBQThCO0FBQUEsWUFBQUMsSUFBQUMsR0FBQUMsSUFBQUMsSUFBQUMsSUFBQUM7QUFBQUEsSUFHOUIsb0JBQXNCO0FBQUEsSUFDdEI7QUFBQSxRQUFBRCxPQUMwQjtBQUFBLElBQTFCO0FBQUEsUUFBQUMsT0FDMEI7QUFBQSxJQUExQixnQ0FBbUQ7QUFBQTtBQUFBLFlBQUFDLEdBQUFKLElBQUFDLElBQUFDLElBQUFDO0FBQUFBLFFBQUFKLElBRzNDO0FBQUEsSUFDUjtBQUFBLElBQWlCO0FBQUEsR0FBRztBQUFBLE9BQUFNLHVCRHhDeEI7QUFBQSxZQUFBQyxpQkFBQVA7QUFBQUEsUUFBQVEsTUM4RGM7QUFBQSxJQUNWO0FBQUEsUUFBQUMsSUFBd0M7QUFBQTtBQUFBLGFBRUc7QUFBQSxLQUF6QztBQUFBLGFBQXlEO0FBQUEsaUJBRTNELHVDQUEwQjtBQUFBLEtBRmlDO0FBQUE7QUFBQSxHQUVqQztBQUFBLFlBQUFDLGlCQUFBRjtBQUFBQTtBQUFBQSxLQUFBLElBSzFCO0FBQUEsa0JBQ1U7QUFBQSxJQURWO0FBQUE7QUFBQTtBQUFBLFFBSUk7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQURGO0FBQUE7QUFBQTtBQUFBLEtBQUFQLEtBR087QUFBQSxLQUFBQyxLQUNBO0FBQUEsS0FBQUMsS0FDQTtBQUFBLEtBQUFDLEtBQ0E7QUFBQSxJQUNULHlCQUFjO0FBQUE7QUFBQSxZQUFBTyxLQUFBQztBQUFBQSxRQUFBQyxNQU1MO0FBQUEsSUFIVDtBQUFBLElBR2dDO0FBQUEsR0FBSTtBQUFBLFlBQUFDLE9BQUFkLEdBQUFlO0FBQUFBO0FBQUFBLEtBQUFDLElBUXBDO0FBQUEsS0FBQUMsSUFDUTtBQUFBLFNBQ1I7QUFBQTtBQUFBLFNBQUFSLElBQUE7QUFBQTtBQUFBLGNBQytCLG9CQUFjO0FBQUEsTUFBM0M7QUFBQSxjQUFvRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFdEQ7QUFBQSxRQUFBUyxLQUNTO0FBQUEsSUFDVDtBQUFBO0FBQUEsS0FBQUMsS0FDUztBQUFBLFNBSUg7QUFBQSxTQURBO0FBQUEsU0FEQTtBQUFBLElBREEsT0FBMEIsT0FBMUIsNkNBRzBCO0FBQUE7QUFBQSxZQUFBQyxLQUFBTCxVQUFBZixJQUd4QixXQUFZLGlCQUFhLFNBQUc7QUFBQSxZQUFBcUIsZUFBQXZCLE9BRy9CLE9BQWdCLEtBQWhCLHdCQUFnQjtBQUFBLFlBQUF3QixLQUFBdEI7QUFBQUEsSUFjUixPQUFRLG9CQUFSLDhCQUFRO0FBQUEsR0FBZTtBQUFBLFlBQUF1QixRQUFBdkIsR0FBQWdCLEdBQUFRO0FBQUFBLElBU2Y7QUFBQSxTQUFBQyxJQUFRLG9CQUFSLDBCQUFBQyxJQUNyQjtBQUFBLEtBU0EsNENBQW1EO0FBQUE7QUFBQSxHQUFDO0FBQUEsT0FBQUMsWURuSnhEO0FBQUEsWUFBQUMsSUFBQTVCLEdBQUE2QjtBQUFBQSxJQ3lKSSxxQ0FFSyxtQ0FBeUI7QUFBQSxJQUR6Qix5Q0FDeUI7QUFBQTtBQUFBLE9BQUFDLFlEM0psQztBQUFBLFlBQUFDLFNBQUEvQixHQUFBNkI7QUFBQUEsSUNnS0ksZUFDRSw4Q0FXZ0I7QUFBQTtBQUFBO0FBQUEsT0FIaEI7QUFBQTtBQUFBO0FBQUEsK0JBR2dCO0FBQUE7QUFBQSxZQUFBRyxpQkFBQWhDLEdBQUFpQyxLQUFBQyxLQUFBVixNQUFBVztBQUFBQSxRQUFBQyxPQW9CbEI7QUFBQSxJQUNBLDZCQUlRLHVDQUFtQjtBQUFBLElBSjNCO0FBQUE7QUFBQSxNQUFBQyxPQVZBO0FBQUEsTUFBQVosSUFFK0Isb0JBQVI7QUFBQSxLQUN2Qix5QkFBc0U7QUFBQTtBQUFBLEdBYy9CO0FBQUEsWUFBQWEsYUFBQXRDLEdBQUFpQyxLQUFBQztBQUFBQSxJQUt2QyxjQUNFO0FBQUEsSUFPRjtBQUFBLEtBQ0UsbURBSThEO0FBQUEsSUFIM0Q7QUFBQSxLQUNILG1EQUU4RDtBQUFBLElBQTlELGdFQUE4RDtBQUFBO0FBQUEsWUFBQUssT0FBQXZDLEdBSWpELE9BQWYsb0JBQWUsaUJBQVE7QUFBQSxZQUFBd0MsU0FBQXhDLEdBQUFnQjtBQUFBQSxJQUl2QjtBQUFBLFNBQUFTLElBQWtDLHFCQUFBQyxJQUMxQjtBQUFBLEtBRUU7QUFBQSxNQUVMO0FBQUE7QUFBQSxHQUFDO0FBQUEsWUFBQWUsTUFBQXpDLEdBQUE2QjtBQUFBQSxJQUdIO0FBQUEsY0FDRTtBQUFBLGNBQ0Esa0JBQWdCO0FBQUE7QUFBQSxZQUFBYSxlQUFBMUMsR0FBQWlDLEtBQUFDO0FBQUFBLElBU2xCO0FBQUEsS0FDRCxvREFPaUM7QUFBQSxRQUFBRSxPQUx0QjtBQUFBLElBRVI7QUFBQSxLQUdhLGtDQUFpQjtBQUFBLElBSFo7QUFBQSxTQUFBWCxJQVRmLG9CQUFlO0FBQUEsS0FDcEIsZ0NBQVcsMEJBQWlEO0FBQUE7QUFBQSxHQVc1QjtBQUFBO0FBQUEsUUQ3UHZDO0FBQUE7QUFBQSxZQUFBa0IsU0FBQTNDLEdBQUFnQjtBQUFBQSxJQ3FRSTtBQUFBO0FBQUEsTUFBQVMsSUFBUSwrQkFKUjtBQUFBLE1BQUFDLElBS1E7QUFBQSxLQUVFO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBVSxlQUFJO0FBQUEsTUFFbkI7QUFBQTtBQUFBLEdBQUM7QUFBQSxZQUFBa0IsTUFBQTVDLEdBQUE2QjtBQUFBQSxJQUdIO0FBQUEsY0FDRTtBQUFBLGNBQ0Esa0JBQWdCO0FBQUE7QUFBQSxZQUFBZ0IsZUFBQTdDLEdBQUFpQyxLQUFBQztBQUFBQSxJQVNsQjtBQUFBLEtBQ0Qsb0RBT2lDO0FBQUEsUUFBQUUsT0FMdEIsMkJBQVc7QUFBQSxJQUVuQjtBQUFBLEtBR2EsT0FBZCxvQkFBYyxrQkFBaUI7QUFBQSxJQUhaO0FBQUEsU0FBQVgsSUFUZjtBQUFBLEtBQ0wsZ0NBQVcsMEJBQWlEO0FBQUE7QUFBQSxHQVc1QjtBQUFBO0FBQUEsUURoU3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFxQjtBQUFBQSxNQUFBO0FBQUEsa0JBQUE5QyxHQ3FTcUMsZ0JBQVU7QUFBQSxrQkFBQUEsR0FwQzNDLE9BcUNjLG9CQXJDZCxpQkFxQzJDO0FBQUEsSUFBQStDO0FBQUFBLE1EdFMvQztBQUFBLGtCQUFBL0MsR0FBQTZCLE9DMlMyQyxzQkFBb0M7QUFBQTtBQUFBLFNBQUE3QixHQUFBNkI7QUFBQUEsU0FDM0IsT0FBNUIsb0JBQW1CLFNBQVMsNEJBQTJCO0FBQUE7QUFBQSxJQUFBbUI7QUFBQUEsTUQ1Uy9FO0FBQUEsa0JBQUFoRCxHQUFBaUMsS0FBQUMsS0NrVHlCLGtDQUMyQztBQUFBO0FBQUEsU0FBQWxDLEdBQUFpQyxLQUFBQztBQUFBQSxTQUd2RCxPQURQO0FBQUEsa0JBQW1CO0FBQUEsdUJBQ1osMEJBQThCLDBCQUF5QjtBQUFBO0FBQUEsWUFBQWUsTUFBQWpELEdBQUE2QjtBQUFBQSxJQUt4RDtBQUFBLFNBQUFaLElBQUEsa0JBQUFELElBQ0E7QUFBQSxLQUNMO0FBQUEsTUFBYSxzRUFHcUI7QUFBQTtBQUFBO0FBQUEsWUFBQWtDLEtBQUFsRCxHQUcxQix5Q0FBVztBQUFBLFlBQUFtRCxNQUFBbkQ7QUFBQUE7QUFBQUEsS0FBQUMsS0FsRXRCO0FBQUEsS0FBQUMsS0FBQTtBQUFBLEtBQUFDLEtBQUE7QUFBQSxLQUFBQyxLQUFBO0FBQUEsSUF3RUEseUJBQWM7QUFBQTtBQUFBLFlBQUFnRCxXQUFBdEQsT0FLaEIscUJBRzZCO0FBQUEsT0FBQXVELGFBRzdCO0FBQUEsWUFBQS9CLE9BQUF4QjtBQUFBQSxJQUV1QixPQUEyQixLQUEzQiw2Q0FBMkI7QUFBQTtBQUFBLFlBQUE4QixNQUFBQztBQUFBQSxJQUMxQixPQUEyQixJQUEzQixvREFBaUM7QUFBQTtBQUFBLFlBQUFFLFdBQUFGO0FBQUFBLElBQ3ZCLE9BQTJCLFNBQTNCLG9EQUFpQztBQUFBO0FBQUEsWUFBQVMsZUFBQUwsS0FBQUM7QUFBQUEsSUFFaEQsT0FBMkI7QUFBQSxhQUEzQix1REFBcUM7QUFBQTtBQUFBLFlBQUFPLFFBQUFaO0FBQUFBLElBQzVCLE9BQTJCLE1BQTNCLG9EQUFpQztBQUFBO0FBQUEsWUFBQWEsaUJBQUFULEtBQUFDO0FBQUFBLElBRXhDLE9BQTJCO0FBQUEsYUFBM0IsdURBQXFDO0FBQUE7QUFBQSxZQUFBYSxZQUFBbEI7QUFBQUEsSUFDdEIsT0FBMkIsVUFBM0Isb0RBQWlDO0FBQUE7QUFBQSxZQUFBbUIscUJBQUFmLEtBQUFDO0FBQUFBLElBRTVDLE9BQTJCO0FBQUEsYUFBM0IsdURBQXFDO0FBQUE7QUFBQSxZQUFBVSxRQUFBZjtBQUFBQSxJQUNsQyxPQUEyQixNQUEzQixvREFBaUM7QUFBQTtBQUFBLFlBQUFnQixpQkFBQVosS0FBQUM7QUFBQUEsSUFFeEMsT0FBMkI7QUFBQSxhQUEzQix1REFBcUM7QUFBQTtBQUFBLFlBQUFlLFFBQUFLO0FBQUFBLElBQzlCLE9BQTJCLE1BQTNCLG9EQUFpQztBQUFBO0FBQUEsWUFBQUosT0FBQXBEO0FBQUFBLElBQ3RDLE9BQTJCLEtBQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQXlDLFNBQUF6QztBQUFBQSxJQUN2QixPQUEyQixPQUEzQiw2Q0FBMkI7QUFBQTtBQUFBLFlBQUF5RCxPQUFBekQ7QUFBQUEsUUFBQUUsSUFDM0I7QUFBQSxJQXRHekIsdUJBc0dvRDtBQUFBO0FBQUEsWUFBQThDLGFBQUFoRDtBQUFBQSxJQUNuQixPQUEyQixXQUEzQiw2Q0FBMkI7QUFBQTtBQUFBLFlBQUEwRCxVQUFBekM7QUFBQUEsSUFFOUIsT0FBMkIsT0FBM0IsbURBQWdDO0FBQUE7QUFBQSxZQUFBMEMsS0FBQTFDLE1BQ2xELDJCQUFvQjtBQUFBLFlBQUEyQyxVQUFBNUQsT0FDUCxPQUFlLFVBQWYsd0JBQWU7QUFBQSxZQUFBcUQsUUFBQXJEO0FBQUFBLElBSWpCLE9BQTJCLE1BQTNCLDZDQUEyQjtBQUFBO0FBQUEsWUFBQTZELFVBQUE3RDtBQUFBQSxJQUl4QixPQUEyQixLQUEzQiw2Q0FBMkI7QUFBQTtBQUFBLFlBQUE4RCxVQUFBaEQ7QUFBQUEsUUFBQUMsTUFDMUI7QUFBQSxJQWhTM0IsNkJBZ1N3RDtBQUFBO0FBQUEsR0FqQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwVjlEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjM5MDgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaGFzaHRibC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiB0aGUgbG9hZCBmYWN0b3IgYmVjb21lcyB0b28gaGlnaC4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gQXRvbWljLm1ha2UgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSBBdG9taWMuc2V0IHJhbmRvbWl6ZWQgdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWRcblxubGV0IHBybmdfa2V5ID0gRG9tYWluLkRMUy5uZXdfa2V5IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdFxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gQXRvbWljLmdldCByYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkpIGVsc2UgMFxuICBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc2VlZGVkX2hhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5zZWVkZWRfaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBrZXkgbmV4dFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBtZW1faW5fYnVja2V0IGtleSBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBzZWVkZWRfaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IHJlYyBtZW1faW5fYnVja2V0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQga2V5IG5leHRcblxubGV0IG1lbSBoIGtleSA9XG4gIG1lbV9pbl9idWNrZXQga2V5IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gQXRvbWljLmdldCByYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKERvbWFpbi5ETFMuZ2V0IHBybmdfa2V5KVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY29tcGFyZSIsImNhbWxfaGFzaCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9TeXMiLCJTdGRsaWIiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9SYW5kb20iLCJTdGRsaWJfU2VxIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9TdHJpbmciLCJvbmdvaW5nX3RyYXZlcnNhbCIsImgiLCJmbGlwX29uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwiZXhuIiwicmFuZG9taXplZF9kZWZhdWx0IiwicmFuZG9taXplZCIsInJhbmRvbWl6ZSIsInBhcmFtIiwiaXNfcmFuZG9taXplZCIsInBybmdfa2V5IiwicG93ZXJfMl9hYm92ZSIsIngiLCJuIiwiY3JlYXRlIiwib3B0IiwiaW5pdGlhbF9zaXplIiwicmFuZG9tIiwicyIsInNlZWQiLCJjbGVhciIsInJlc2V0IiwibGVuIiwiY29weV9idWNrZXRsaXN0Iiwia2V5IiwiZGF0YSIsIm5leHQiLCJwcmVjIiwiY29weSIsImxlbmd0aCIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpIiwiY2VsbCIsIm5pZHgiLCJtYXRjaCIsInJlc2l6ZSIsIm9zaXplIiwiaXRlciIsIm9sZF90cmF2IiwiZCIsImZpbHRlcl9tYXBfaW5wbGFjZSIsInNsb3QiLCJmb2xkIiwiaW5pdCIsImFjY3UiLCJiIiwiYnVja2V0X2xlbmd0aCIsInN0YXRzIiwibWJsIiwibSIsImhpc3RvIiwibCIsInRvX3NlcSIsInRibCIsInRibF9kYXRhIiwiYXV4IiwiYnVjayIsInRvX3NlcV9rZXlzIiwidG9fc2VxX3ZhbHVlcyIsIk1ha2VTZWVkZWQiLCJIIiwia2V5X2luZGV4IiwiYWRkIiwiYnVja2V0IiwicmVtb3ZlIiwiayIsImZpbmQiLCJrMSIsImQxIiwibmV4dDEiLCJrMiIsImQyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX29wdCIsImZpbmRfYWxsIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJyZXBsYWNlIiwibWVtIiwiYWRkX3NlcSIsInYiLCJyZXBsYWNlX3NlcSIsIm9mX3NlcSIsIk1ha2UiLCJlcXVhbCIsInNlZWRlZF9oYXNoIiwiaW5jbHVkZSIsInN6IiwiaGFzaCIsImhhc2hfcGFyYW0iLCJuMSIsIm4yIiwicmVidWlsZCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFD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QUFBO0FBQUEsU0FFUDtBQUFBLEtBQUFsQixNQUVTO0FBQUEsSUFJVDtBQUFBLGtCQUFtQjtBQUFBLElBQW1DO0FBQUEsR0FDcEQ7QUFBQSxHQTlqQnlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEM0Q3RCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0NzIyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbGxiYWNrLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJTdGRsaWJfT2JqIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwibmFtZSIsImV4biIsInNsb3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsNEJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsWUFBQUMsbUJBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUN5QmdCO0FBQUEsS0FBQUMsT0FBQTtBQUFBLElBQ2QsNENBQThCO0FBQUE7QUFBQSxHRDFCaEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNDc0NSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfdHlwZXMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQ29yZSB0eXBlcyBmb3IgdGhlIFNYIGxhbmd1YWdlLlxuXG4gICAgVGhlIFt2YWx1ZV0gc3VtIHR5cGUgcmVwcmVzZW50cyBldmVyeSBwb3NzaWJsZSBTWCBydW50aW1lIHZhbHVlLlxuICAgIE9DYW1sJ3MgYWxnZWJyYWljIHR5cGVzIG1ha2UgdGhlIENFSyBtYWNoaW5lJ3MgZnJhbWUgZGlzcGF0Y2ggYVxuICAgIHBhdHRlcm4gbWF0Y2gg4oCUIGV4YWN0bHkgd2hhdCB0aGUgc3BlYyBkZXNjcmliZXMuICopXG5cbigqKiB7MSBTeW1ib2wgaW50ZXJuaW5nfSAqKVxuXG4oKiogTWFwIHN5bWJvbCBuYW1lcyB0byBzbWFsbCBpbnRlZ2VycyBmb3IgTygxKSBlbnYgbG9va3Vwcy5cbiAgICBUaGUgaW50ZXJuIHRhYmxlIGlzIHBvcHVsYXRlZCBvbmNlIHBlciB1bmlxdWUgc3ltYm9sIG5hbWU7XG4gICAgYWxsIHN1YnNlcXVlbnQgZW52IG9wZXJhdGlvbnMgdXNlIHRoZSBpbnRlZ2VyIGtleS4gKilcblxubGV0IHN5bV90b19pZCA6IChzdHJpbmcsIGludCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNTEyXG5sZXQgaWRfdG9fc3ltIDogKGludCwgc3RyaW5nKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA1MTJcbmxldCBzeW1fbmV4dCAgPSByZWYgMFxuXG5sZXQgaW50ZXJuIHMgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN5bV90b19pZCBzIHdpdGhcbiAgfCBTb21lIGlkIC0+IGlkXG4gIHwgTm9uZSAtPlxuICAgIGxldCBpZCA9ICFzeW1fbmV4dCBpblxuICAgIGluY3Igc3ltX25leHQ7XG4gICAgSGFzaHRibC5yZXBsYWNlIHN5bV90b19pZCBzIGlkO1xuICAgIEhhc2h0YmwucmVwbGFjZSBpZF90b19zeW0gaWQgcztcbiAgICBpZFxuXG5sZXQgdW5pbnRlcm4gaWQgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGlkX3RvX3N5bSBpZCB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IFwiPHN5bTpcIiBeIHN0cmluZ19vZl9pbnQgaWQgXiBcIj5cIlxuXG5cbigqKiB7MSBFbnZpcm9ubWVudH0gKilcblxuKCoqIExleGljYWwgc2NvcGUgY2hhaW4uICBFYWNoIGZyYW1lIGhvbGRzIGEgbXV0YWJsZSBiaW5kaW5nIHRhYmxlXG4gICAga2V5ZWQgYnkgaW50ZXJuZWQgc3ltYm9sIElEcyBmb3IgZmFzdCBsb29rdXAuICopXG50eXBlIGVudiA9IHtcbiAgYmluZGluZ3MgOiAoaW50LCB2YWx1ZSkgSGFzaHRibC50O1xuICBwYXJlbnQgICA6IGVudiBvcHRpb247XG59XG5cbigqKiB7MSBWYWx1ZXN9ICopXG5cbmFuZCB2YWx1ZSA9XG4gIHwgTmlsXG4gIHwgQm9vbCAgIG9mIGJvb2xcbiAgfCBOdW1iZXIgb2YgZmxvYXRcbiAgfCBTdHJpbmcgb2Ygc3RyaW5nXG4gIHwgU3ltYm9sIG9mIHN0cmluZ1xuICB8IEtleXdvcmQgb2Ygc3RyaW5nXG4gIHwgTGlzdCAgIG9mIHZhbHVlIGxpc3RcbiAgfCBEaWN0ICAgb2YgZGljdFxuICB8IExhbWJkYSBvZiBsYW1iZGFcbiAgfCBDb21wb25lbnQgb2YgY29tcG9uZW50XG4gIHwgSXNsYW5kIG9mIGlzbGFuZFxuICB8IE1hY3JvICBvZiBtYWNyb1xuICB8IFRodW5rICBvZiB2YWx1ZSAqIGVudlxuICB8IENvbnRpbnVhdGlvbiBvZiAodmFsdWUgLT4gdmFsdWUpICogZGljdCBvcHRpb25cbiAgfCBOYXRpdmVGbiBvZiBzdHJpbmcgKiAodmFsdWUgbGlzdCAtPiB2YWx1ZSlcbiAgfCBTaWduYWwgb2Ygc2lnbmFsXG4gIHwgUmF3SFRNTCBvZiBzdHJpbmdcbiAgfCBTcHJlYWQgb2YgKHN0cmluZyAqIHZhbHVlKSBsaXN0XG4gIHwgU3hFeHByIG9mIHN0cmluZyAgKCoqIE9wYXF1ZSBTWCB3aXJlLWZvcm1hdCBzdHJpbmcg4oCUIGFzZXIgb3V0cHV0LiAqKVxuICB8IEVudiBvZiBlbnYgICgqKiBGaXJzdC1jbGFzcyBlbnZpcm9ubWVudCDigJQgdXNlZCBieSBDRUsgbWFjaGluZSBzdGF0ZSBkaWN0cy4gKilcbiAgfCBMaXN0UmVmIG9mIHZhbHVlIGxpc3QgcmVmICAoKiogTXV0YWJsZSBsaXN0IOKAlCBKUy1zdHlsZSBhcnJheSBmb3IgYXBwZW5kISAqKVxuICB8IENla1N0YXRlIG9mIGNla19zdGF0ZSAgKCoqIE9wdGltaXplZCBDRUsgbWFjaGluZSBzdGF0ZSDigJQgYXZvaWRzIERpY3QgYWxsb2NhdGlvbi4gKilcbiAgfCBDZWtGcmFtZSBvZiBjZWtfZnJhbWUgICgqKiBPcHRpbWl6ZWQgQ0VLIGNvbnRpbnVhdGlvbiBmcmFtZS4gKilcbiAgfCBWbUNsb3N1cmUgb2Ygdm1fY2xvc3VyZSAgKCoqIFZNLWNvbXBpbGVkIGNsb3N1cmUg4oCUIGNhbGxhYmxlIHdpdGhpbiB0aGUgVk0gd2l0aG91dCBhbGxvY2F0aW5nIGEgbmV3IFZNLiAqKVxuXG4oKiogQ0VLIG1hY2hpbmUgc3RhdGUg4oCUIHJlY29yZCBpbnN0ZWFkIG9mIERpY3QgZm9yIHBlcmZvcm1hbmNlLlxuICAgIDUgZmllbGRzIMOXIDU1SyBzdGVwcy9zZWMgPSAyNzVLIEhhc2h0YmwgYWxsb2NhdGlvbnMvc2VjIGVsaW1pbmF0ZWQuICopXG5hbmQgY2VrX3N0YXRlID0ge1xuICBjc19jb250cm9sIDogdmFsdWU7XG4gIGNzX2VudiAgICAgOiB2YWx1ZTtcbiAgY3Nfa29udCAgICA6IHZhbHVlO1xuICBjc19waGFzZSAgIDogc3RyaW5nO1xuICBjc192YWx1ZSAgIDogdmFsdWU7XG59XG5cbigqKiBDRUsgY29udGludWF0aW9uIGZyYW1lIOKAlCB0YWdnZWQgcmVjb3JkIGNvdmVyaW5nIGFsbCAyOSBmcmFtZSB0eXBlcy5cbiAgICBGaWVsZHMgYXJlIG5hbWVkIGdlbmVyaWNhbGx5OyBub3QgYWxsIGFyZSB1c2VkIGJ5IGV2ZXJ5IGZyYW1lIHR5cGUuXG4gICAgRWxpbWluYXRlcyB+MTAwSyBIYXNodGJsIGFsbG9jYXRpb25zIHBlciBwYWdlIHJlbmRlci4gKilcbmFuZCBjZWtfZnJhbWUgPSB7XG4gIGNmX3R5cGUgICAgICA6IHN0cmluZzsgICAgICAgICgqIGZyYW1lIHR5cGUgdGFnOiBcImlmXCIsIFwibGV0XCIsIFwiY2FsbFwiLCBldGMuICopXG4gIGNmX2VudiAgICAgICA6IHZhbHVlOyAgICAgICAgICgqIGVudmlyb25tZW50IOKAlCBldmVyeSBmcmFtZSBoYXMgdGhpcyAqKVxuICBjZl9uYW1lICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiBsZXQvZGVmaW5lL3NldC9zY29wZTogYmluZGluZyBuYW1lICopXG4gIGNmX2JvZHkgICAgICA6IHZhbHVlOyAgICAgICAgICgqIHdoZW4vbGV0OiBib2R5IGV4cHIgKilcbiAgY2ZfcmVtYWluaW5nIDogdmFsdWU7ICAgICAgICAgKCogYmVnaW4vY29uZC9tYXAvZXRjOiByZW1haW5pbmcgZXhwcnMgKilcbiAgY2ZfZiAgICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbC9tYXAvZmlsdGVyL2V0YzogZnVuY3Rpb24gKilcbiAgY2ZfYXJncyAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbDogcmF3IGFyZ3M7IGFyZzogZXZhbGVkIGFyZ3MgKilcbiAgY2ZfcmVzdWx0cyAgIDogdmFsdWU7ICAgICAgICAgKCogbWFwL2ZpbHRlci9kaWN0OiBhY2N1bXVsYXRlZCByZXN1bHRzICopXG4gIGNmX2V4dHJhICAgICA6IHZhbHVlOyAgICAgICAgICgqIGV4dHJhIGZpZWxkOiBzY2hlbWUsIGluZGV4ZWQsIHZhbHVlLCBwaGFzZSwgZXRjLiAqKVxuICBjZl9leHRyYTIgICAgOiB2YWx1ZTsgICAgICAgICAoKiBzZWNvbmQgZXh0cmE6IGVtaXR0ZWQsIGV0Yy4gKilcbn1cblxuKCoqIE11dGFibGUgc3RyaW5nLWtleWVkIHRhYmxlIChTWCBkaWN0cyBzdXBwb3J0IFtkaWN0LXNldCFdKS4gKilcbmFuZCBkaWN0ID0gKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudFxuXG5hbmQgbGFtYmRhID0ge1xuICBsX3BhcmFtcyAgOiBzdHJpbmcgbGlzdDtcbiAgbF9ib2R5ICAgIDogdmFsdWU7XG4gIGxfY2xvc3VyZSA6IGVudjtcbiAgbXV0YWJsZSBsX25hbWUgOiBzdHJpbmcgb3B0aW9uO1xuICBtdXRhYmxlIGxfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxufVxuXG5hbmQgY29tcG9uZW50ID0ge1xuICBjX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgY19wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgY19oYXNfY2hpbGRyZW4gOiBib29sO1xuICBjX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBjX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgY19hZmZpbml0eSAgICAgOiBzdHJpbmc7ICAoKiogXCJhdXRvXCIgfCBcImNsaWVudFwiIHwgXCJzZXJ2ZXJcIiAqKVxuICBtdXRhYmxlIGNfZmlsZSA6IHN0cmluZyBvcHRpb247ICAoKiogU291cmNlIGZpbGUgcGF0aCAqKVxuICBtdXRhYmxlIGNfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxufVxuXG5hbmQgaXNsYW5kID0ge1xuICBpX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgaV9wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgaV9oYXNfY2hpbGRyZW4gOiBib29sO1xuICBpX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBpX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgbXV0YWJsZSBpX2ZpbGUgOiBzdHJpbmcgb3B0aW9uOyAgKCoqIFNvdXJjZSBmaWxlIHBhdGggKilcbn1cblxuYW5kIG1hY3JvID0ge1xuICBtX3BhcmFtcyAgICAgOiBzdHJpbmcgbGlzdDtcbiAgbV9yZXN0X3BhcmFtIDogc3RyaW5nIG9wdGlvbjtcbiAgbV9ib2R5ICAgICAgIDogdmFsdWU7XG4gIG1fY2xvc3VyZSAgICA6IGVudjtcbiAgbV9uYW1lICAgICAgIDogc3RyaW5nIG9wdGlvbjtcbn1cblxuYW5kIHNpZ25hbCA9IHtcbiAgbXV0YWJsZSBzX3ZhbHVlICAgICAgIDogdmFsdWU7XG4gIG11dGFibGUgc19zdWJzY3JpYmVycyA6ICh1bml0IC0+IHVuaXQpIGxpc3Q7XG4gIG11dGFibGUgc19kZXBzICAgICAgICA6IHNpZ25hbCBsaXN0O1xufVxuXG4oKiogezEgQnl0ZWNvZGUgVk0gdHlwZXN9XG5cbiAgICBEZWZpbmVkIGhlcmUgKG5vdCBpbiBzeF92bS5tbCkgYmVjYXVzZSBbdm1fY29kZS5jb25zdGFudHNdIHJlZmVyZW5jZXNcbiAgICBbdmFsdWVdIGFuZCBbbGFtYmRhLmxfY29tcGlsZWRdIHJlZmVyZW5jZXMgW3ZtX2Nsb3N1cmVdIOKAlCBtdXR1YWxcbiAgICByZWN1cnNpb24gcmVxdWlyZXMgYWxsIHR5cGVzIGluIG9uZSBbYW5kXSBjaGFpbi4gKilcblxuKCoqIENvbXBpbGVkIGZ1bmN0aW9uIGJvZHkg4oCUIGJ5dGVjb2RlICsgY29uc3RhbnQgcG9vbC4gKilcbmFuZCB2bV9jb2RlID0ge1xuICB2Y19hcml0eSAgICAgOiBpbnQ7XG4gIHZjX2xvY2FscyAgICA6IGludDtcbiAgdmNfYnl0ZWNvZGUgIDogaW50IGFycmF5O1xuICB2Y19jb25zdGFudHMgOiB2YWx1ZSBhcnJheTtcbn1cblxuKCoqIFVwdmFsdWUgY2VsbCDigJQgc2hhcmVkIG11dGFibGUgcmVmZXJlbmNlIHRvIGEgY2FwdHVyZWQgdmFyaWFibGUuICopXG5hbmQgdm1fdXB2YWx1ZV9jZWxsID0ge1xuICBtdXRhYmxlIHV2X3ZhbHVlIDogdmFsdWU7XG59XG5cbigqKiBDbG9zdXJlIOKAlCBjb21waWxlZCBjb2RlICsgY2FwdHVyZWQgdXB2YWx1ZXMgKyBsaXZlIGVudiByZWZlcmVuY2UuICopXG5hbmQgdm1fY2xvc3VyZSA9IHtcbiAgdm1fY29kZSAgICAgOiB2bV9jb2RlO1xuICB2bV91cHZhbHVlcyA6IHZtX3VwdmFsdWVfY2VsbCBhcnJheTtcbiAgdm1fbmFtZSAgICAgOiBzdHJpbmcgb3B0aW9uO1xuICB2bV9lbnZfcmVmICA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQ7XG4gIHZtX2Nsb3N1cmVfZW52IDogZW52IG9wdGlvbjsgICgqKiBPcmlnaW5hbCBjbG9zdXJlIGVudiBmb3IgaW5uZXIgZnVuY3Rpb25zICopXG59XG5cblxuKCoqIHsxIEZvcndhcmQgcmVmIGZvciBjYWxsaW5nIFZNIGNsb3N1cmVzIGZyb20gb3V0c2lkZSB0aGUgVk19ICopXG5cbmxldCBfdm1fY2FsbF9jbG9zdXJlX3JlZiA6ICh2bV9jbG9zdXJlIC0+IHZhbHVlIGxpc3QgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIF8gXyAtPiByYWlzZSAoRmFpbHVyZSBcIlZNIGNhbGxfY2xvc3VyZSBub3QgaW5pdGlhbGl6ZWRcIikpXG5cblxuKCoqIHsxIEVycm9yc30gKilcblxuZXhjZXB0aW9uIEV2YWxfZXJyb3Igb2Ygc3RyaW5nXG5leGNlcHRpb24gUGFyc2VfZXJyb3Igb2Ygc3RyaW5nXG5cblxuKCoqIHsxIEVudmlyb25tZW50IG9wZXJhdGlvbnN9ICopXG5cbmxldCBtYWtlX2VudiAoKSA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gTm9uZSB9XG5cbmxldCBlbnZfZXh0ZW5kIHBhcmVudCA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBwYXJlbnQgfVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgZXZlcnkgZW52X2JpbmQgd2l0aCAoZW52LCBuYW1lLCB2YWx1ZSkuXG4gICBVc2VkIGJ5IGJyb3dzZXIga2VybmVsIHRvIHN5bmMgVk0gZ2xvYmFscyB0YWJsZS4gKilcbmxldCBfZW52X2JpbmRfaG9vayA6IChlbnYgLT4gc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgVk0gR0xPQkFMX1NFVCB3cml0ZXMgdG8gdm0uZ2xvYmFscy5cbiAgIFVzZWQgYnkgYnJvd3NlciBrZXJuZWwgdG8gc3luYyBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LiAqKVxubGV0IF92bV9nbG9iYWxfc2V0X2hvb2sgOiAoc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgZW52X2JpbmQgZW52IG5hbWUgdiA9XG4gIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2O1xuICAobWF0Y2ggIV9lbnZfYmluZF9ob29rIHdpdGggU29tZSBmIC0+IGYgZW52IG5hbWUgdiB8IE5vbmUgLT4gKCkpO1xuICBOaWxcblxuKCogSW50ZXJuYWw6IHNjb3BlLWNoYWluIGxvb2t1cCB3aXRoIHByZS1pbnRlcm5lZCBJRCAqKVxubGV0IHJlYyBlbnZfaGFzX2lkIGVudiBpZCA9XG4gIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB8fFxuICBtYXRjaCBlbnYucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9oYXNfaWQgcCBpZCB8IE5vbmUgLT4gZmFsc2VcblxubGV0IGVudl9oYXMgZW52IG5hbWUgPSBlbnZfaGFzX2lkIGVudiAoaW50ZXJuIG5hbWUpXG5cbmxldCByZWMgZW52X2dldF9pZCBlbnYgaWQgbmFtZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZW52LmJpbmRpbmdzIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT5cbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfZ2V0X2lkIHAgaWQgbmFtZVxuICAgIHwgTm9uZSAtPlxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5kZWZpbmVkIHN5bWJvbDogXCIgXiBuYW1lKSlcblxubGV0IGVudl9nZXQgZW52IG5hbWUgPSBlbnZfZ2V0X2lkIGVudiAoaW50ZXJuIG5hbWUpIG5hbWVcblxubGV0IHJlYyBlbnZfc2V0X2lkIGVudiBpZCB2ID1cbiAgaWYgSGFzaHRibC5tZW0gZW52LmJpbmRpbmdzIGlkIHRoZW4gYmVnaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7XG4gICAgKG1hdGNoICFfZW52X2JpbmRfaG9vayB3aXRoIFNvbWUgZiAtPiBmIGVudiAodW5pbnRlcm4gaWQpIHYgfCBOb25lIC0+ICgpKTtcbiAgICBOaWxcbiAgZW5kIGVsc2VcbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfc2V0X2lkIHAgaWQgdlxuICAgIHwgTm9uZSAtPiBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7IE5pbFxuXG5sZXQgZW52X3NldCBlbnYgbmFtZSB2ID0gZW52X3NldF9pZCBlbnYgKGludGVybiBuYW1lKSB2XG5cbmxldCBlbnZfbWVyZ2UgYmFzZSBvdmVybGF5ID1cbiAgaWYgYmFzZSA9PSBvdmVybGF5IHRoZW5cbiAgICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IFNvbWUgYmFzZSB9XG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgcmVjIGlzX2Rlc2NlbmRhbnQgZSBkZXB0aCA9XG4gICAgICBpZiBkZXB0aCA+IDEwMCB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGUgPT0gYmFzZSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gaXNfZGVzY2VuZGFudCBwIChkZXB0aCArIDEpIHwgTm9uZSAtPiBmYWxzZVxuICAgIGluXG4gICAgaWYgaXNfZGVzY2VuZGFudCBvdmVybGF5IDAgdGhlblxuICAgICAgeyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCBlID0geyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfSBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgICAgICBpZiBub3QgKGVudl9oYXNfaWQgYmFzZSBpZCkgdGhlbiBIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCB2XG4gICAgICApIG92ZXJsYXkuYmluZGluZ3M7XG4gICAgICBlXG4gICAgZW5kXG4gIGVuZFxuXG5cbigqKiB7MSBWYWx1ZSBleHRyYWN0aW9uIGhlbHBlcnN9ICopXG5cbmxldCB2YWx1ZV90b19zdHJpbmcgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHMgfCBTeW1ib2wgcyAtPiBzIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBOdW1iZXIgbiAtPiBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbikgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCIgfCBfIC0+IFwiPHZhbHVlPlwiXG5cbmxldCB2YWx1ZV90b19zdHJpbmdfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gIHwgXyAtPiBbXVxuXG5sZXQgdmFsdWVfdG9fYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGIgfCBOaWwgLT4gZmFsc2UgfCBfIC0+IHRydWVcblxubGV0IHZhbHVlX3RvX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IFNvbWUgcyB8IFN5bWJvbCBzIC0+IFNvbWUgcyB8IE5pbCAtPiBOb25lIHwgXyAtPiBOb25lXG5cblxuKCoqIHsxIENvbnN0cnVjdG9ycyDigJQgYWNjZXB0IFt2YWx1ZV0gYXJncyBmcm9tIHRyYW5zcGlsZWQgY29kZX0gKilcblxubGV0IHVud3JhcF9lbnZfdmFsID0gZnVuY3Rpb25cbiAgfCBFbnYgZSAtPiBlXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2VfbGFtYmRhOiBleHBlY3RlZCBlbnYgZm9yIGNsb3N1cmVcIilcblxubGV0IG1ha2VfbGFtYmRhIHBhcmFtcyBib2R5IGNsb3N1cmUgPVxuICBsZXQgcHMgPSBtYXRjaCBwYXJhbXMgd2l0aFxuICAgIHwgTGlzdCBpdGVtcyAtPiBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgaXRlbXNcbiAgICB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zXG4gIGluXG4gIExhbWJkYSB7IGxfcGFyYW1zID0gcHM7IGxfYm9keSA9IGJvZHk7IGxfY2xvc3VyZSA9IHVud3JhcF9lbnZfdmFsIGNsb3N1cmU7IGxfbmFtZSA9IE5vbmU7IGxfY29tcGlsZWQgPSBOb25lIH1cblxubGV0IG1ha2VfY29tcG9uZW50IG5hbWUgcGFyYW1zIGhhc19jaGlsZHJlbiBib2R5IGNsb3N1cmUgYWZmaW5pdHkgPVxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZyBuYW1lIGluXG4gIGxldCBwcyA9IHZhbHVlX3RvX3N0cmluZ19saXN0IHBhcmFtcyBpblxuICBsZXQgaGMgPSB2YWx1ZV90b19ib29sIGhhc19jaGlsZHJlbiBpblxuICBsZXQgYWZmID0gbWF0Y2ggYWZmaW5pdHkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcImF1dG9cIiBpblxuICBDb21wb25lbnQge1xuICAgIGNfbmFtZSA9IG47IGNfcGFyYW1zID0gcHM7IGNfaGFzX2NoaWxkcmVuID0gaGM7XG4gICAgY19ib2R5ID0gYm9keTsgY19jbG9zdXJlID0gdW53cmFwX2Vudl92YWwgY2xvc3VyZTsgY19hZmZpbml0eSA9IGFmZjtcbiAgICBjX2ZpbGUgPSBOb25lOyBjX2NvbXBpbGVkID0gTm9uZTtcbiAgfVxuXG5sZXQgbWFrZV9pc2xhbmQgbmFtZSBwYXJhbXMgaGFzX2NoaWxkcmVuIGJvZHkgY2xvc3VyZSA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBoYyA9IHZhbHVlX3RvX2Jvb2wgaGFzX2NoaWxkcmVuIGluXG4gIElzbGFuZCB7XG4gICAgaV9uYW1lID0gbjsgaV9wYXJhbXMgPSBwczsgaV9oYXNfY2hpbGRyZW4gPSBoYztcbiAgICBpX2JvZHkgPSBib2R5OyBpX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlO1xuICAgIGlfZmlsZSA9IE5vbmU7XG4gIH1cblxubGV0IG1ha2VfbWFjcm8gcGFyYW1zIHJlc3RfcGFyYW0gYm9keSBjbG9zdXJlIG5hbWUgPVxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IHJwID0gdmFsdWVfdG9fc3RyaW5nX29wdCByZXN0X3BhcmFtIGluXG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nX29wdCBuYW1lIGluXG4gIE1hY3JvIHtcbiAgICBtX3BhcmFtcyA9IHBzOyBtX3Jlc3RfcGFyYW0gPSBycDtcbiAgICBtX2JvZHkgPSBib2R5OyBtX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBtX25hbWUgPSBuO1xuICB9XG5cbmxldCBtYWtlX3RodW5rIGV4cHIgZW52ID0gVGh1bmsgKGV4cHIsIHVud3JhcF9lbnZfdmFsIGVudilcblxubGV0IG1ha2Vfc3ltYm9sIG5hbWUgPSBTeW1ib2wgKHZhbHVlX3RvX3N0cmluZyBuYW1lKVxubGV0IG1ha2Vfa2V5d29yZCBuYW1lID0gS2V5d29yZCAodmFsdWVfdG9fc3RyaW5nIG5hbWUpXG5cblxuKCoqIHsxIFR5cGUgaW5zcGVjdGlvbn0gKilcblxubGV0IHR5cGVfb2YgPSBmdW5jdGlvblxuICB8IE5pbCAgICAgICAgICAgIC0+IFwibmlsXCJcbiAgfCBCb29sIF8gICAgICAgICAtPiBcImJvb2xlYW5cIlxuICB8IE51bWJlciBfICAgICAgIC0+IFwibnVtYmVyXCJcbiAgfCBTdHJpbmcgXyAgICAgICAtPiBcInN0cmluZ1wiXG4gIHwgU3ltYm9sIF8gICAgICAgLT4gXCJzeW1ib2xcIlxuICB8IEtleXdvcmQgXyAgICAgIC0+IFwia2V5d29yZFwiXG4gIHwgTGlzdCBfIHwgTGlzdFJlZiBfIC0+IFwibGlzdFwiXG4gIHwgRGljdCBfICAgICAgICAgLT4gXCJkaWN0XCJcbiAgfCBMYW1iZGEgXyAgICAgICAtPiBcImxhbWJkYVwiXG4gIHwgQ29tcG9uZW50IF8gICAgLT4gXCJjb21wb25lbnRcIlxuICB8IElzbGFuZCBfICAgICAgIC0+IFwiaXNsYW5kXCJcbiAgfCBNYWNybyBfICAgICAgICAtPiBcIm1hY3JvXCJcbiAgfCBUaHVuayBfICAgICAgICAtPiBcInRodW5rXCJcbiAgfCBDb250aW51YXRpb24gKF8sIF8pIC0+IFwiY29udGludWF0aW9uXCJcbiAgfCBOYXRpdmVGbiBfICAgICAtPiBcImZ1bmN0aW9uXCJcbiAgfCBTaWduYWwgXyAgICAgICAtPiBcInNpZ25hbFwiXG4gIHwgUmF3SFRNTCBfICAgICAgLT4gXCJyYXctaHRtbFwiXG4gIHwgU3ByZWFkIF8gICAgICAgLT4gXCJzcHJlYWRcIlxuICB8IFN4RXhwciBfICAgICAgIC0+IFwic3gtZXhwclwiXG4gIHwgRW52IF8gICAgICAgICAgLT4gXCJlbnZcIlxuICB8IENla1N0YXRlIF8gICAgIC0+IFwiZGljdFwiICAoKiBDRUsgc3RhdGUgYmVoYXZlcyBhcyBhIGRpY3QgZm9yIHR5cGUgY2hlY2tzICopXG4gIHwgQ2VrRnJhbWUgXyAgICAgLT4gXCJkaWN0XCJcbiAgfCBWbUNsb3N1cmUgXyAgICAtPiBcImZ1bmN0aW9uXCJcblxubGV0IGlzX25pbCA9IGZ1bmN0aW9uIE5pbCAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX2xhbWJkYSA9IGZ1bmN0aW9uIExhbWJkYSBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfY29tcG9uZW50ID0gZnVuY3Rpb24gQ29tcG9uZW50IF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19pc2xhbmQgPSBmdW5jdGlvbiBJc2xhbmQgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX21hY3JvID0gZnVuY3Rpb24gTWFjcm8gXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX3RodW5rID0gZnVuY3Rpb24gVGh1bmsgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX3NpZ25hbCA9IGZ1bmN0aW9uXG4gIHwgU2lnbmFsIF8gLT4gdHJ1ZVxuICB8IERpY3QgZCAtPiBIYXNodGJsLm1lbSBkIFwiX19zaWduYWxcIlxuICB8IF8gLT4gZmFsc2VcblxubGV0IGlzX2NhbGxhYmxlID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBDb250aW51YXRpb24gKF8sIF8pIHwgVm1DbG9zdXJlIF8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG4oKiogezEgVHJ1dGhpbmVzc30gKilcblxuKCoqIFNYIHRydXRoaW5lc3M6IGV2ZXJ5dGhpbmcgaXMgdHJ1dGh5IGV4Y2VwdCBbTmlsXSBhbmQgW0Jvb2wgZmFsc2VdLiAqKVxubGV0IHN4X3RydXRoeSA9IGZ1bmN0aW9uXG4gIHwgTmlsIHwgQm9vbCBmYWxzZSAtPiBmYWxzZVxuICB8IF8gLT4gdHJ1ZVxuXG5cbigqKiB7MSBBY2Nlc3NvcnN9ICopXG5cbmxldCBzeW1ib2xfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgU3ltYm9sIHMgLT4gU3RyaW5nIHNcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHN5bWJvbCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGtleXdvcmRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgS2V5d29yZCBrIC0+IFN0cmluZyBrXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBrZXl3b3JkLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBsLmxfcGFyYW1zKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX2JvZHkgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IGwubF9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gRW52IGwubF9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBzZXRfbGFtYmRhX25hbWUgbCBuID0gbWF0Y2ggbCB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gbC5sX25hbWUgPC0gU29tZSBuOyBOaWxcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWxhbWJkYS1uYW1lITogbm90IGEgbGFtYmRhXCIpXG5cbmxldCBjb21wb25lbnRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19uYW1lXG4gIHwgSXNsYW5kIGkgLT4gU3RyaW5nIGkuaV9uYW1lXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfZmlsZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gKG1hdGNoIGMuY19maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgSXNsYW5kIGkgLT4gKG1hdGNoIGkuaV9maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IGNvbXBvbmVudF9zZXRfZmlsZSB2IGYgPVxuICAobWF0Y2ggdiwgZiB3aXRoXG4gIHwgQ29tcG9uZW50IGMsIFN0cmluZyBzIC0+IGMuY19maWxlIDwtIFNvbWUgc1xuICB8IElzbGFuZCBpLCBTdHJpbmcgcyAtPiBpLmlfZmlsZSA8LSBTb21lIHNcbiAgfCBfIC0+ICgpKTsgTmlsXG5cbmxldCBjb21wb25lbnRfc2V0X2ZpbGVfYiA9IGNvbXBvbmVudF9zZXRfZmlsZVxuXG5sZXQgY29tcG9uZW50X3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICB8IElzbGFuZCBpIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9ib2R5ID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBjLmNfYm9keVxuICB8IElzbGFuZCBpIC0+IGkuaV9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gRW52IGMuY19jbG9zdXJlXG4gIHwgSXNsYW5kIGkgLT4gRW52IGkuaV9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfaGFzX2NoaWxkcmVuID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW5cbiAgfCBJc2xhbmQgaSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9hZmZpbml0eSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19hZmZpbml0eVxuICB8IElzbGFuZCBfIC0+IFN0cmluZyBcImNsaWVudFwiXG4gIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCJcblxubGV0IG1hY3JvX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIG0ubV9wYXJhbXMpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX3Jlc3RfcGFyYW0gPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gKG1hdGNoIG0ubV9yZXN0X3BhcmFtIHdpdGggU29tZSBzIC0+IFN0cmluZyBzIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX2JvZHkgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gbS5tX2JvZHlcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbWFjcm9fY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBFbnYgbS5tX2Nsb3N1cmVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZXhwciA9IGZ1bmN0aW9uXG4gIHwgVGh1bmsgKGUsIF8pIC0+IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZW52ID0gZnVuY3Rpb25cbiAgfCBUaHVuayAoXywgZSkgLT4gRW52IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5cbigqKiB7MSBEaWN0IG9wZXJhdGlvbnN9ICopXG5cbmxldCBtYWtlX2RpY3QgKCkgOiBkaWN0ID0gSGFzaHRibC5jcmVhdGUgOFxuXG5sZXQgZGljdF9nZXQgKGQgOiBkaWN0KSBrZXkgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQga2V5IHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbFxuXG5sZXQgZGljdF9oYXMgKGQgOiBkaWN0KSBrZXkgPSBIYXNodGJsLm1lbSBkIGtleVxuXG5sZXQgZGljdF9zZXQgKGQgOiBkaWN0KSBrZXkgdiA9IEhhc2h0YmwucmVwbGFjZSBkIGtleSB2XG5cbmxldCBkaWN0X2RlbGV0ZSAoZCA6IGRpY3QpIGtleSA9IEhhc2h0YmwucmVtb3ZlIGQga2V5XG5cbmxldCBkaWN0X2tleXMgKGQgOiBkaWN0KSA9XG4gIEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gU3RyaW5nIGsgOjogYWNjKSBkIFtdXG5cbmxldCBkaWN0X3ZhbHMgKGQgOiBkaWN0KSA9XG4gIEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhY2MgLT4gdiA6OiBhY2MpIGQgW11cblxuXG4oKiogezEgVmFsdWUgZGlzcGxheX0gKilcblxubGV0IHJlYyBpbnNwZWN0ID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gXCJuaWxcIlxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTnVtYmVyIG4gLT5cbiAgICBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBQcmludGYuc3ByaW50ZiBcIiVkXCIgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ1wiJyAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxuJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHRcIlxuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4gXCI6XCIgXiBrXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT5cbiAgICBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIGluc3BlY3QgaXRlbXMpIF4gXCIpXCJcbiAgfCBEaWN0IGQgLT5cbiAgICBsZXQgcGFpcnMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+XG4gICAgICAoUHJpbnRmLnNwcmludGYgXCI6JXMgJXNcIiBrIChpbnNwZWN0IHYpKSA6OiBhY2MpIGQgW10gaW5cbiAgICBcIntcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgcGFpcnMgXiBcIn1cIlxuICB8IExhbWJkYSBsIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibGFtYmRhXCIgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIjwlcyglcyk+XCIgdGFnIChTdHJpbmcuY29uY2F0IFwiLCBcIiBsLmxfcGFyYW1zKVxuICB8IENvbXBvbmVudCBjIC0+XG4gICAgUHJpbnRmLnNwcmludGYgXCI8Q29tcG9uZW50IH4lcyglcyk+XCIgYy5jX25hbWUgKFN0cmluZy5jb25jYXQgXCIsIFwiIGMuY19wYXJhbXMpXG4gIHwgSXNsYW5kIGkgLT5cbiAgICBQcmludGYuc3ByaW50ZiBcIjxJc2xhbmQgfiVzKCVzKT5cIiBpLmlfbmFtZSAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgaS5pX3BhcmFtcylcbiAgfCBNYWNybyBtIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIG0ubV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibWFjcm9cIiBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiPCVzKCVzKT5cIiB0YWcgKFN0cmluZy5jb25jYXQgXCIsIFwiIG0ubV9wYXJhbXMpXG4gIHwgVGh1bmsgXyAtPiBcIjx0aHVuaz5cIlxuICB8IENvbnRpbnVhdGlvbiAoXywgXykgLT4gXCI8Y29udGludWF0aW9uPlwiXG4gIHwgTmF0aXZlRm4gKG5hbWUsIF8pIC0+IFByaW50Zi5zcHJpbnRmIFwiPG5hdGl2ZTolcz5cIiBuYW1lXG4gIHwgU2lnbmFsIF8gLT4gXCI8c2lnbmFsPlwiXG4gIHwgUmF3SFRNTCBzIC0+IFByaW50Zi5zcHJpbnRmIFwiPHJhdy1odG1sOiVkIGNoYXJzPlwiIChTdHJpbmcubGVuZ3RoIHMpXG4gIHwgU3ByZWFkIF8gLT4gXCI8c3ByZWFkPlwiXG4gIHwgU3hFeHByIHMgLT4gUHJpbnRmLnNwcmludGYgXCI8c3gtZXhwcjolZCBjaGFycz5cIiAoU3RyaW5nLmxlbmd0aCBzKVxuICB8IEVudiBfIC0+IFwiPGVudj5cIlxuICB8IENla1N0YXRlIF8gLT4gXCI8Y2VrLXN0YXRlPlwiXG4gIHwgQ2VrRnJhbWUgZiAtPiBQcmludGYuc3ByaW50ZiBcIjxmcmFtZTolcz5cIiBmLmNmX3R5cGVcbiAgfCBWbUNsb3N1cmUgY2wgLT4gUHJpbnRmLnNwcmludGYgXCI8dm06JXM+XCIgKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJhbm9uXCIpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZnJlc2hfb29faWQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYiIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0Zsb2F0IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9MaXN0Iiwic3ltX3RvX2lkIiwiaWRfdG9fc3ltIiwic3ltX25leHQiLCJpbnRlcm4iLCJzIiwibWF0Y2giLCJpZCIsInVuaW50ZXJuIiwidm1fY2FsbF9jbG9zdXJlX3JlZiIsInBhcmFtIiwiRXZhbF9lcnJvciIsIlBhcnNlX2Vycm9yIiwibWFrZV9lbnYiLCJlbnZfZXh0ZW5kIiwicGFyZW50IiwiZW52X2JpbmRfaG9vayIsImVudl9iaW5kIiwiZW52IiwibmFtZSIsInYiLCJlbnZfaGFzX2lkIiwiZW52X2hhcyIsImVudl9nZXRfaWQiLCJlbnZfZ2V0IiwiZW52X3NldF9pZCIsImVudl9zZXQiLCJlbnZfbWVyZ2UiLCJiYXNlIiwib3ZlcmxheSIsImUiLCJkZXB0aCIsInAiLCJjc3RfZyIsImNzdF9mYWxzZSIsImNzdF90cnVlIiwidmFsdWVfdG9fc3RyaW5nIiwibiIsInZhbHVlX3RvX3N0cmluZ19saXN0IiwiaXRlbXMiLCJ2YWx1ZV90b19ib29sIiwiYiIsInZhbHVlX3RvX3N0cmluZ19vcHQiLCJ1bndyYXBfZW52X3ZhbCIsIm1ha2VfbGFtYmRhIiwicGFyYW1zIiwiYm9keSIsImNsb3N1cmUiLCJwcyIsImNzdF9hdXRvIiwibWFrZV9jb21wb25lbnQiLCJoYXNfY2hpbGRyZW4iLCJhZmZpbml0eSIsImhjIiwiYWZmIiwibWFrZV9pc2xhbmQiLCJtYWtlX21hY3JvIiwicmVzdF9wYXJhbSIsInJwIiwibWFrZV90aHVuayIsImV4cHIiLCJtYWtlX3N5bWJvbCIsIm1ha2Vfa2V5d29yZCIsImNzdF9sYW1iZGEiLCJjc3RfbWFjcm8iLCJjc3RfbmlsIiwidHlwZV9vZiIsImNzdF9kaWN0IiwiY3N0X2Z1bmN0aW9uIiwiaXNfbmlsIiwiaXNfbGFtYmRhIiwiaXNfY29tcG9uZW50IiwiaXNfaXNsYW5kIiwiaXNfbWFjcm8iLCJpc190aHVuayIsImlzX3NpZ25hbCIsImQiLCJpc19jYWxsYWJsZSIsInN4X3RydXRoeSIsInN5bWJvbF9uYW1lIiwia2V5d29yZF9uYW1lIiwiayIsImNzdF9FeHBlY3RlZF9sYW1iZGFfZ290IiwibGFtYmRhX3BhcmFtcyIsImwiLCJsYW1iZGFfYm9keSIsImxhbWJkYV9jbG9zdXJlIiwibGFtYmRhX25hbWUiLCJzZXRfbGFtYmRhX25hbWUiLCJjc3RfRXhwZWN0ZWRfY29tcG9uZW50X2dvdCIsImNvbXBvbmVudF9uYW1lIiwiYyIsImNvbXBvbmVudF9maWxlIiwiaSIsImNvbXBvbmVudF9zZXRfZmlsZSIsImNvbXBvbmVudF9wYXJhbXMiLCJjb21wb25lbnRfYm9keSIsImNvbXBvbmVudF9jbG9zdXJlIiwiY29tcG9uZW50X2hhc19jaGlsZHJlbiIsImNvbXBvbmVudF9hZmZpbml0eSIsImNzdF9FeHBlY3RlZF9tYWNyb19nb3QiLCJtYWNyb19wYXJhbXMiLCJtIiwibWFjcm9fcmVzdF9wYXJhbSIsIm1hY3JvX2JvZHkiLCJtYWNyb19jbG9zdXJlIiwiY3N0X0V4cGVjdGVkX3RodW5rX2dvdCIsInRodW5rX2V4cHIiLCJ0aHVua19lbnYiLCJtYWtlX2RpY3QiLCJkaWN0X2dldCIsImtleSIsImRpY3RfaGFzIiwiZGljdF9zZXQiLCJkaWN0X2RlbGV0ZSIsImRpY3Rfa2V5cyIsImFjYyIsImRpY3RfdmFscyIsImNzdF9jaGFycyIsImNzdCIsImNzdF9zX3MiLCJpbnNw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LE9BSHBGO0FBQUE7QUFBQSxXQUFBa0MsUUE1Q0s7QUFBQTtBQUFBLE9BNkNBO0FBQUE7QUFBQSxXQUFBcEQsTUE3Q0EsY0E4Q0E7QUFBQSwyREFDK0U7QUFBQTtBQUFBLFdBQUEwSSxLQS9DL0UsVUFBQXZILFVBK0NFO0FBQUEsdUJBQUErQixNQUFBLFlBQUFBLE1BQTBELGNBQUFBLE1BQTFEO0FBQUEsNkRBQTZFO0FBQUE7QUFBQTtBQUFBLFNBekJyRTtBQUFBLFNBQWxCO0FBQUE7QUFBQSxJQUFnRCxvQ0F5QnVDO0FBQUE7QUFBQSxHQTlnQnJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRGI1RCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI1NTU5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF9wYXJzZXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogUy1leHByZXNzaW9uIHBhcnNlci5cblxuICAgIFJlY3Vyc2l2ZSBkZXNjZW50IG92ZXIgYSBzdHJpbmcsIHByb2R1Y2luZyBbU3hfdHlwZXMudmFsdWUgbGlzdF0uXG4gICAgU3VwcG9ydHM6IGxpc3RzLCBkaWN0cywgc3ltYm9scywga2V5d29yZHMsIHN0cmluZ3MgKHdpdGggZXNjYXBlcyksXG4gICAgbnVtYmVycywgYm9vbGVhbnMsIG5pbCwgY29tbWVudHMsIHF1b3RlL3F1YXNpcXVvdGUvdW5xdW90ZSBzdWdhci4gKilcblxub3BlbiBTeF90eXBlc1xuXG50eXBlIHN0YXRlID0ge1xuICBzcmMgOiBzdHJpbmc7XG4gIGxlbiA6IGludDtcbiAgbXV0YWJsZSBwb3MgOiBpbnQ7XG59XG5cbmxldCBtYWtlX3N0YXRlIHNyYyA9IHsgc3JjOyBsZW4gPSBTdHJpbmcubGVuZ3RoIHNyYzsgcG9zID0gMCB9XG5cbmxldCBwZWVrIHMgPSBpZiBzLnBvcyA8IHMubGVuIHRoZW4gU29tZSBzLnNyYy5bcy5wb3NdIGVsc2UgTm9uZVxubGV0IGFkdmFuY2UgcyA9IHMucG9zIDwtIHMucG9zICsgMVxubGV0IGF0X2VuZCBzID0gcy5wb3MgPj0gcy5sZW5cblxubGV0IHNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcyA9XG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gKClcbiAgICBlbHNlIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+IGFkdmFuY2UgczsgZ28gKClcbiAgICB8ICc7JyAtPlxuICAgICAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdIDw+ICdcXG4nIGRvIGFkdmFuY2UgcyBkb25lO1xuICAgICAgaWYgcy5wb3MgPCBzLmxlbiB0aGVuIGFkdmFuY2UgcztcbiAgICAgIGdvICgpXG4gICAgfCBfIC0+ICgpXG4gIGluIGdvICgpXG5cbigqIENoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiDigJQgbWF0Y2hlcyBzcGVjL3BhcnNlci5zeCBpZGVudC1zdGFydC9pZGVudC1jaGFyLlxuICAgaWRlbnQtc3RhcnQ6IGEteiBBLVogXyB+ICogKyAtID4gPCA9IC8gISA/ICZcbiAgIGlkZW50LWNoYXI6ICBpZGVudC1zdGFydCBwbHVzIDAtOSAuIDogLyAjICwgKilcbmxldCBpc19pZGVudF9zdGFydCA9IGZ1bmN0aW9uXG4gIHwgJ2EnLi4neicgfCAnQScuLidaJyB8ICdfJyB8ICd+JyB8ICcqJyB8ICcrJyB8ICctJ1xuICB8ICc+JyB8ICc8JyB8ICc9JyB8ICcvJyB8ICchJyB8ICc/JyB8ICcmJyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgaXNfaWRlbnRfY2hhciA9IGZ1bmN0aW9uXG4gIHwgYyB3aGVuIGlzX2lkZW50X3N0YXJ0IGMgLT4gdHJ1ZVxuICB8ICcwJy4uJzknIHwgJy4nIHwgJzonIHwgJyMnIHwgJywnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbigqIFN5bWJvbCByZWFkaW5nIHVzZXMgaWRlbnRfY2hhcjsgZmlyc3QgY2hhciBtdXN0IGJlIGlkZW50X3N0YXJ0IG9yIGRpZ2l0L2NvbG9uICopXG5sZXQgaXNfc3ltYm9sX2NoYXIgPSBpc19pZGVudF9jaGFyXG5cbmxldCByZWFkX3N0cmluZyBzID1cbiAgKCogcy5wb3MgaXMgb24gdGhlIG9wZW5pbmcgcXVvdGUgKilcbiAgYWR2YW5jZSBzO1xuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBzdHJpbmdcIik7XG4gICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgYWR2YW5jZSBzO1xuICAgIGlmIGMgPSAnXCInIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICAgIGVsc2UgaWYgYyA9ICdcXFxcJyB0aGVuIGJlZ2luXG4gICAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCBzdHJpbmcgZXNjYXBlXCIpO1xuICAgICAgbGV0IGVzYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIChtYXRjaCBlc2Mgd2l0aFxuICAgICAgIHwgJ24nIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbidcbiAgICAgICB8ICd0JyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHQnXG4gICAgICAgfCAncicgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxyJ1xuICAgICAgIHwgJ1wiJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICAgICB8ICdcXFxcJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXFxcJ1xuICAgICAgIHwgJ3UnIC0+XG4gICAgICAgICAoKiBcXHVYWFhYIOKAlCByZWFkIDQgaGV4IGRpZ2l0cywgZW5jb2RlIGFzIFVURi04ICopXG4gICAgICAgICBpZiBzLnBvcyArIDQgPiBzLmxlbiB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIkluY29tcGxldGUgXFxcXHUgZXNjYXBlXCIpO1xuICAgICAgICAgbGV0IGhleCA9IFN0cmluZy5zdWIgcy5zcmMgcy5wb3MgNCBpblxuICAgICAgICAgcy5wb3MgPC0gcy5wb3MgKyA0O1xuICAgICAgICAgbGV0IGNvZGUgPSBpbnRfb2Zfc3RyaW5nIChcIjB4XCIgXiBoZXgpIGluXG4gICAgICAgICBsZXQgdWJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNCBpblxuICAgICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciB1YnVmIChVY2hhci5vZl9pbnQgY29kZSk7XG4gICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKEJ1ZmZlci5jb250ZW50cyB1YnVmKVxuICAgICAgIHwgJ2AnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ2AnXG4gICAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcXFwnOyBCdWZmZXIuYWRkX2NoYXIgYnVmIGVzYyk7XG4gICAgICBnbyAoKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5sZXQgcmVhZF9zeW1ib2wgcyA9XG4gIGxldCBzdGFydCA9IHMucG9zIGluXG4gIHdoaWxlIHMucG9zIDwgcy5sZW4gJiYgaXNfc3ltYm9sX2NoYXIgcy5zcmMuW3MucG9zXSBkbyBhZHZhbmNlIHMgZG9uZTtcbiAgU3RyaW5nLnN1YiBzLnNyYyBzdGFydCAocy5wb3MgLSBzdGFydClcblxubGV0IHRyeV9udW1iZXIgc3RyID1cbiAgbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzdHIgd2l0aFxuICB8IFNvbWUgbiAtPiBTb21lIChOdW1iZXIgbilcbiAgfCBOb25lIC0+IE5vbmVcblxubGV0IHJlYyByZWFkX3ZhbHVlIHMgOiB2YWx1ZSA9XG4gIHNraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMgcztcbiAgaWYgYXRfZW5kIHMgdGhlbiBiZWdpblxuICAgIGxldCBsaW5lID0gcmVmIDEgaW5cbiAgICBTdHJpbmcuaXRlciAoZnVuIGMgLT4gaWYgYyA9ICdcXG4nIHRoZW4gaW5jciBsaW5lKSBzLnNyYztcbiAgICByYWlzZSAoUGFyc2VfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgYXQgbGluZSAlZCAocG9zICVkKVwiICFsaW5lIHMucG9zKSlcbiAgZW5kO1xuICBtYXRjaCBzLnNyYy5bcy5wb3NdIHdpdGhcbiAgfCAnKCcgLT4gcmVhZF9saXN0IHMgJyknXG4gIHwgJ1snIC0+IHJlYWRfbGlzdCBzICddJ1xuICB8ICd7JyAtPiByZWFkX2RpY3Qgc1xuICB8ICdcIicgLT4gU3RyaW5nIChyZWFkX3N0cmluZyBzKVxuICB8ICdcXCcnIC0+IGFkdmFuY2UgczsgTGlzdCBbU3ltYm9sIFwicXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8ICdgJyAtPiBhZHZhbmNlIHM7IExpc3QgW1N5bWJvbCBcInF1YXNpcXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJzsnIC0+XG4gICAgKCogRGF0dW0gY29tbWVudDogIzsgZGlzY2FyZHMgbmV4dCBleHByZXNzaW9uICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgaWdub3JlIChyZWFkX3ZhbHVlIHMpO1xuICAgIHJlYWRfdmFsdWUgc1xuICB8ICcjJyB3aGVuIHMucG9zICsgMSA8IHMubGVuICYmIHMuc3JjLltzLnBvcyArIDFdID0gJ1xcJycgLT5cbiAgICAoKiBRdW90ZSBzaG9ydGhhbmQ6ICMnZXhwciAtPiAocXVvdGUgZXhwcikgKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnfCcgLT5cbiAgICAoKiBSYXcgc3RyaW5nOiAjfC4uLnwgIOKAlCBlbmRzIGF0IG5leHQgfCAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgbGV0IHJlYyBnbyAoKSA9XG4gICAgICBpZiBhdF9lbmQgcyB0aGVuIHJhaXNlIChQYXJzZV9lcnJvciBcIlVudGVybWluYXRlZCByYXcgc3RyaW5nXCIpO1xuICAgICAgbGV0IGMgPSBzLnNyYy5bcy5wb3NdIGluXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBpZiBjID0gJ3wnIHRoZW5cbiAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgIGdvICgpXG4gICAgICBlbmRcbiAgICBpbiBnbyAoKVxuICB8ICcsJyAtPlxuICAgICgqIFVucXVvdGUgLyBzcGxpY2UtdW5xdW90ZSDigJQgbWF0Y2hlcyBzcGVjOiAsIGFsd2F5cyB0cmlnZ2VycyB1bnF1b3RlICopXG4gICAgYWR2YW5jZSBzO1xuICAgIGlmIHMucG9zIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zXSA9ICdAJyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBMaXN0IFtTeW1ib2wgXCJzcGxpY2UtdW5xdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gICAgZW5kIGVsc2VcbiAgICAgIExpc3QgW1N5bWJvbCBcInVucXVvdGVcIjsgcmVhZF92YWx1ZSBzXVxuICB8IF8gLT5cbiAgICBiZWdpblxuICAgICAgKCogU3ltYm9sLCBrZXl3b3JkLCBudW1iZXIsIG9yIGJvb2xlYW4gKilcbiAgICAgIGxldCB0b2tlbiA9IHJlYWRfc3ltYm9sIHMgaW5cbiAgICAgIGlmIHRva2VuID0gXCJcIiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBsaW5lID0gcmVmIDEgYW5kIGNvbCA9IHJlZiAxIGluXG4gICAgICAgIGZvciBpID0gMCB0byBzLnBvcyAtIDEgZG9cbiAgICAgICAgICBpZiBzLnNyYy5baV0gPSAnXFxuJyB0aGVuIChpbmNyIGxpbmU7IGNvbCA6PSAxKSBlbHNlIGluY3IgY29sXG4gICAgICAgIGRvbmU7XG4gICAgICAgIHJhaXNlIChQYXJzZV9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmV4cGVjdGVkIGNoYXI6ICVjIGF0IGxpbmUgJWQgY29sICVkIChwb3MgJWQpXCJcbiAgICAgICAgICBzLnNyYy5bcy5wb3NdICFsaW5lICFjb2wgcy5wb3MpKVxuICAgICAgZW5kO1xuICAgICAgbWF0Y2ggdG9rZW4gd2l0aFxuICAgICAgfCBcInRydWVcIiAtPiBCb29sIHRydWVcbiAgICAgIHwgXCJmYWxzZVwiIC0+IEJvb2wgZmFsc2VcbiAgICAgIHwgXCJuaWxcIiAtPiBOaWxcbiAgICAgIHwgXyB3aGVuIHRva2VuLlswXSA9ICc6JyAtPlxuICAgICAgICBLZXl3b3JkIChTdHJpbmcuc3ViIHRva2VuIDEgKFN0cmluZy5sZW5ndGggdG9rZW4gLSAxKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBtYXRjaCB0cnlfbnVtYmVyIHRva2VuIHdpdGhcbiAgICAgICAgfCBTb21lIG4gLT4gblxuICAgICAgICB8IE5vbmUgLT4gU3ltYm9sIHRva2VuXG4gICAgZW5kXG5cbmFuZCByZWFkX2xpc3QgcyBjbG9zZV9jaGFyID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIG9wZW5pbmcgcGFyZW4vYnJhY2tldCAqKVxuICBsZXQgaXRlbXMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGxpc3RcIik7XG4gICAgaWYgcy5zcmMuW3MucG9zXSA9IGNsb3NlX2NoYXIgdGhlbiBiZWdpblxuICAgICAgYWR2YW5jZSBzO1xuICAgICAgTGlzdCAoTGlzdC5yZXYgIWl0ZW1zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBpdGVtcyA6PSByZWFkX3ZhbHVlIHMgOjogIWl0ZW1zO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW4gZ28gKClcblxuYW5kIHJlYWRfZGljdCBzID1cbiAgYWR2YW5jZSBzOyAoKiBza2lwIHsgKilcbiAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIGRpY3RcIik7XG4gICAgaWYgcy5zcmMuW3MucG9zXSA9ICd9JyB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBEaWN0IGRcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgbGV0IGtleSA9IHJlYWRfdmFsdWUgcyBpblxuICAgICAgbGV0IGtleV9zdHIgPSBtYXRjaCBrZXkgd2l0aFxuICAgICAgICB8IEtleXdvcmQgayAtPiBrXG4gICAgICAgIHwgU3RyaW5nIGsgLT4ga1xuICAgICAgICB8IFN5bWJvbCBrIC0+IGtcbiAgICAgICAgfCBfIC0+IHJhaXNlIChQYXJzZV9lcnJvciBcIkRpY3Qga2V5IG11c3QgYmUga2V5d29yZCwgc3RyaW5nLCBvciBzeW1ib2xcIilcbiAgICAgIGluXG4gICAgICBsZXQgdiA9IHJlYWRfdmFsdWUgcyBpblxuICAgICAgZGljdF9zZXQgZCBrZXlfc3RyIHY7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5cbigqKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBTWCB2YWx1ZXMuICopXG5sZXQgcGFyc2VfYWxsIHNyYyA9XG4gIGxldCBzID0gbWFrZV9zdGF0ZSBzcmMgaW5cbiAgbGV0IHJlc3VsdHMgPSByZWYgW10gaW5cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICAgIGlmIGF0X2VuZCBzIHRoZW4gTGlzdC5yZXYgIXJlc3VsdHNcbiAgICBlbHNlIGJlZ2luXG4gICAgICByZXN1bHRzIDo9IHJlYWRfdmFsdWUgcyA6OiAhcmVzdWx0cztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cbigqKiBQYXJzZSBhIGZpbGUgaW50byBhIGxpc3Qgb2YgU1ggdmFsdWVzLiAqKVxubGV0IHBhcnNlX2ZpbGUgcGF0aCA9XG4gIGxldCBpYyA9IG9wZW5faW4gcGF0aCBpblxuICBsZXQgbiA9IGluX2NoYW5uZWxfbGVuZ3RoIGljIGluXG4gIGxldCBzcmMgPSByZWFsbHlfaW5wdXRfc3RyaW5nIGljIG4gaW5cbiAgY2xvc2VfaW4gaWM7XG4gIHBhcnNlX2FsbCBzcmNcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9jYWxsMiIsImYiLCJhMCIsImExIiwiY2FtbF9jYWxsNCIsImEyIiwiYTMiLCJnbG9iYWxfZGF0YSIsIlN4X3R5cGVzIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0xpc3QiLCJTdGRsaWIiLCJTdGRsaWJfVWNoYXIiLCJtYWtlX3N0YXRlIiwic3JjIiwicGVlayIsInMiLCJhZHZhbmNlIiwiYXRfZW5kIiwic2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyIsIm1hdGNoIiwiaXNfaWRlbnRfc3RhcnQiLCJwYXJhbSIsImlzX2lkZW50X2NoYXIiLCJjIiwicmVhZF9zdHJpbmciLCJidWYiLCJlc2MiLCJoZXgiLCJjb2RlIiwidWJ1ZiIsInJlYWRfc3ltYm9sIiwic3RhcnQiLCJ0cnlfbnVtYmVyIiwic3RyIiwibiIsImNzdF9wb3MiLCJjc3RfcXVvdGUiLCJyZWFkX3ZhbHVlIiwidG9rZW4iLCJjb2wiLCJsaW5lIiwiaSIsInJlYWRfbGlzdCIsImNsb3NlX2NoYXIiLCJpdGVtcyIsInJlYWRfZGljdCIsImQiLCJrZXkiLCJrZXlfc3RyIiwidiIsInBhcnNlX2FsbCIsInJlc3VsdHMiLCJwYXJzZV9maWxlIiwicGF0aCIsImljIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSCxHQUFBQyxJQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtB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QUFBQTtBQUFBO0FBQUEsVUFHWjtBQUFBO0FBQUEsVUFEaUI7QUFBQSxLQUNjO0FBQUE7QUFBQSxRQUFBQSxPQXREdEI7QUFBQSxJQUVmO0FBQUE7QUFBQSxlQUFBakI7QUFBQUEsV0FBQSxJQUFzQjtBQUFBO0FBQUEsTUFBMEI7QUFBQTtBQUFBO0FBQUEsU0FDN0I7QUFBQTtBQUFBO0FBQUEsSUFBMEU7QUFBQSxHQStEMUY7QUFBQSxZQUFBbUIsVUFBQTNCLEdBQUE0QjtBQUFBQSxJQUdMO0FBQUEsUUFBQUMsUUFHRTtBQUFBO0FBQUE7QUFBQSxLQUNHO0FBQUEsTUFBYztBQUFBO0FBQUEsS0FDZDtBQUFBLE1BQ0Q7QUFBQSxNQUNLLDZDQUFpQjtBQUFBO0FBQUEsS0FHdEIsWUFEUztBQUFBO0FBQUEsR0FHTDtBQUFBLFlBQUFDLFVBQUE5QjtBQUFBQSxJQUdSO0FBQUEsUUFBQStCLElBQ1E7QUFBQSxJQUVOO0FBQUE7QUFBQSxLQUNHO0FBQUEsTUFBYztBQUFBO0FBQUEsS0FDZCx3Q0FDRCxZQUFTO0FBQUEsU0FBQUMsTUFHQztBQUFBLEtBQ1Y7QUFBQSxVQUFBQyxVQUFBLFFBQUFDLElBTVE7QUFBQSxNQUNSO0FBQUE7QUFBQTtBQUFBLEtBSFM7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU1MO0FBQUEsWUFBQUMsVUFBQXJDO0FBQUFBLFFBQUFFLElBS0EsaUJBQUFvQyxVQUdOO0FBQUE7QUFBQTtBQUFBLEtBQ0csY0FBYywwQ0FLWDtBQUFBLEtBRkosY0FEVztBQUFBO0FBQUEsR0FHUDtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBO0FBQUFBLEtBQUFDLEtBSUM7QUFBQSxLQUFBcEIsSUFDRDtBQUFBLEtBQUFyQixNQUNFO0FBQUEsSUFDVjtBQUFBLElBQVcscUJBQ0U7QUFBQTtBQUFBLEdEL05mIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjU5NjEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3ByaW1pdGl2ZXMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQnVpbHQtaW4gcHJpbWl0aXZlIGZ1bmN0aW9ucyAofjgwIHB1cmUgZnVuY3Rpb25zKS5cblxuICAgIFJlZ2lzdGVyZWQgaW4gYSBnbG9iYWwgdGFibGU7IHRoZSBldmFsdWF0b3IgY2hlY2tzIHRoaXMgdGFibGVcbiAgICB3aGVuIGEgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBsZXhpY2FsIGVudmlyb25tZW50LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbmxldCBwcmltaXRpdmVzIDogKHN0cmluZywgdmFsdWUgbGlzdCAtPiB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMTI4XG5cbigqKiBGb3J3YXJkIHJlZnMgZm9yIGNhbGxpbmcgU1ggZnVuY3Rpb25zIGZyb20gcHJpbWl0aXZlcyAoYnJlYWtzIGN5Y2xlKS4gKilcbmxldCBfc3hfY2FsbF9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSBsaXN0IC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biBfIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeF9jYWxsIG5vdCBpbml0aWFsaXplZFwiKSlcbmxldCBfc3hfdHJhbXBvbGluZV9mbiA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID1cbiAgcmVmIChmdW4gdiAtPiB2KVxubGV0IF9pc19jbGllbnQgOiBib29sIHJlZiA9IHJlZiBmYWxzZVxuXG5sZXQgcmVnaXN0ZXIgbmFtZSBmbiA9IEhhc2h0YmwucmVwbGFjZSBwcmltaXRpdmVzIG5hbWUgZm5cblxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gSGFzaHRibC5tZW0gcHJpbWl0aXZlcyBuYW1lXG5cbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmbiAtPiBOYXRpdmVGbiAobmFtZSwgZm4pXG4gIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJVbmtub3duIHByaW1pdGl2ZTogXCIgXiBuYW1lKSlcblxuKCogLS0tIEhlbHBlcnMgLS0tICopXG5cbigqIFRyYW1wb2xpbmUgaG9vayDigJQgc2V0IGJ5IHN4X3JlZiBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicmVhayBjaXJjdWxhciBkZXAgKilcbmxldCB0cmFtcG9saW5lX2hvb2sgOiAodmFsdWUgLT4gdmFsdWUpIHJlZiA9IHJlZiAoZnVuIHYgLT4gdilcblxubGV0IHJlYyBhc19udW1iZXIgPSBmdW5jdGlvblxuICB8IE51bWJlciBuIC0+IG5cbiAgfCBCb29sIHRydWUgLT4gMS4wXG4gIHwgQm9vbCBmYWxzZSAtPiAwLjBcbiAgfCBOaWwgLT4gMC4wXG4gIHwgU3RyaW5nIHMgLT4gKG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgcyB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBGbG9hdC5uYW4pXG4gIHwgVGh1bmsgXyBhcyB0IC0+XG4gICAgKCogVHJhbXBvbGluZSB0aHVua3Mg4oCUIHRoZXkgc2hvdWxkbid0IGxlYWsgYnV0IHNvbWV0aW1lcyBkbyAqKVxuICAgIGFzX251bWJlciAoIXRyYW1wb2xpbmVfaG9vayB0KVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIgXiB0eXBlX29mIHYgXiBcIjogXCIgXiAobWF0Y2ggdiB3aXRoIERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX19zaWduYWxcIiB3aXRoIFNvbWUgXyAtPiBcInNpZ25hbHt2YWx1ZT1cIiBeIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ2YWx1ZVwiIHdpdGggU29tZSB2JyAtPiB2YWx1ZV90b19zdHJpbmcgdicgfCBOb25lIC0+IFwiP1wiKSBeIFwifVwiIHwgTm9uZSAtPiBcImRpY3RcIikgfCBfIC0+IFwiXCIpKSlcblxubGV0IGFzX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgc3RyaW5nLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgcmVjIGFzX2xpc3QgPSBmdW5jdGlvblxuICB8IExpc3QgbCAtPiBsXG4gIHwgTGlzdFJlZiByIC0+ICFyXG4gIHwgTmlsIC0+IFtdXG4gIHwgVGh1bmsgXyBhcyB0IC0+IGFzX2xpc3QgKCFfc3hfdHJhbXBvbGluZV9mbiB0KVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGFzX2Jvb2wgPSBmdW5jdGlvblxuICB8IEJvb2wgYiAtPiBiXG4gIHwgdiAtPiBzeF90cnV0aHkgdlxuXG5sZXQgcmVjIHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nIHMgLT4gc1xuICB8IE51bWJlciBuIC0+XG4gICAgaWYgRmxvYXQuaXNfaW50ZWdlciBuIHRoZW4gc3RyaW5nX29mX2ludCAoaW50X29mX2Zsb2F0IG4pXG4gICAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCJcbiAgfCBTeW1ib2wgcyAtPiBzXG4gIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBUaHVuayBfIGFzIHQgLT4gdG9fc3RyaW5nICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxubGV0ICgpID1cbiAgKCogPT09IEFyaXRobWV0aWMgPT09ICopXG4gIHJlZ2lzdGVyIFwiK1wiIChmdW4gYXJncyAtPlxuICAgIE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBhY2MgKy4gYXNfbnVtYmVyIGEpIDAuMCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwiLVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gTnVtYmVyIDAuMFxuICAgIHwgW2FdIC0+IE51bWJlciAoLS4gKGFzX251bWJlciBhKSlcbiAgICB8IGEgOjogcmVzdCAtPiBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gYWNjIC0uIGFzX251bWJlciB4KSAoYXNfbnVtYmVyIGEpIHJlc3QpKTtcbiAgcmVnaXN0ZXIgXCIqXCIgKGZ1biBhcmdzIC0+XG4gICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyAqLiBhc19udW1iZXIgYSkgMS4wIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCIvXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChhc19udW1iZXIgYSAvLiBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCIvOiBleHBlY3RlZCAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1vZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+IE51bWJlciAoRmxvYXQucmVtIChhc19udW1iZXIgYSkgKGFzX251bWJlciBiKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtb2Q6IGV4cGVjdGVkIDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhICsuIDEuMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5jOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZGVjXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKGFzX251bWJlciBhIC0uIDEuMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGVjOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiYWJzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKEZsb2F0LmFicyAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhYnM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJmbG9vclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChmbG9vciAoYXNfbnVtYmVyIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZsb29yOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2VpbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChjZWlsIChhc19udW1iZXIgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VpbDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInJvdW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYV0gLT4gTnVtYmVyIChGbG9hdC5yb3VuZCAoYXNfbnVtYmVyIGEpKVxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgbiA9IGFzX251bWJlciBhIGFuZCBwbGFjZXMgPSBpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBiKSBpblxuICAgICAgbGV0IGZhY3RvciA9IDEwLjAgKiogZmxvYXRfb2ZfaW50IHBsYWNlcyBpblxuICAgICAgTnVtYmVyIChGbG9hdC5yb3VuZCAobiAqLiBmYWN0b3IpIC8uIGZhY3RvcilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyb3VuZDogMS0yIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1pblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtaW46IGF0IGxlYXN0IDEgYXJnXCIpXG4gICAgfCBfIC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBGbG9hdC5taW4gYWNjIChhc19udW1iZXIgYSkpIEZsb2F0LmluZmluaXR5IGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCJtYXhcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtdIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWF4OiBhdCBsZWFzdCAxIGFyZ1wiKVxuICAgIHwgXyAtPiBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gRmxvYXQubWF4IGFjYyAoYXNfbnVtYmVyIGEpKSBGbG9hdC5uZWdfaW5maW5pdHkgYXJncykpO1xuICByZWdpc3RlciBcInNxcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuc3FydCAoYXNfbnVtYmVyIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcXJ0OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicG93XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBOdW1iZXIgKGFzX251bWJlciBhICoqIGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBvdzogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbGFtcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3g7IGxvOyBoaV0gLT5cbiAgICAgIGxldCB4ID0gYXNfbnVtYmVyIHggYW5kIGxvID0gYXNfbnVtYmVyIGxvIGFuZCBoaSA9IGFzX251bWJlciBoaSBpblxuICAgICAgTnVtYmVyIChGbG9hdC5tYXggbG8gKEZsb2F0Lm1pbiBoaSB4KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjbGFtcDogMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJwYXJzZS1pbnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gKG1hdGNoIGludF9vZl9zdHJpbmdfb3B0IHMgd2l0aCBTb21lIG4gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbikgfCBOb25lIC0+IE5pbClcbiAgICB8IFtTdHJpbmcgczsgZGVmYXVsdF92YWxdIC0+XG4gICAgICAobWF0Y2ggaW50X29mX3N0cmluZ19vcHQgcyB3aXRoIFNvbWUgbiAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBuKSB8IE5vbmUgLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoaW50X29mX2Zsb2F0IG4pKVxuICAgIHwgW187IGRlZmF1bHRfdmFsXSAtPiBkZWZhdWx0X3ZhbFxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcInBhcnNlLWZsb2F0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IChtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgd2l0aCBTb21lIG4gLT4gTnVtYmVyIG4gfCBOb25lIC0+IE5pbClcbiAgICB8IFtOdW1iZXIgbl0gLT4gTnVtYmVyIG5cbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiA9PT0gQ29tcGFyaXNvbiA9PT0gKilcbiAgKCogU2FmZSBlcXVhbGl0eTogcGh5c2ljYWwgZXF1YWxpdHkgZm9yIHBvdGVudGlhbGx5LWNpcmN1bGFyIHR5cGVzXG4gICAgIChEaWN0LCBMYW1iZGEsIENvbXBvbmVudCwgSXNsYW5kLCBTaWduYWwsIE5hdGl2ZUZuKSxcbiAgICAgc3RydWN0dXJhbCBlcXVhbGl0eSBmb3IgYWN5Y2xpYyB0eXBlcyAoTnVtYmVyLCBTdHJpbmcsIEJvb2wsIGV0Yy4pLlxuICAgICBMaXN0cyBhcmUgY29tcGFyZWQgZWxlbWVudC13aXNlIHJlY3Vyc2l2ZWx5IHdpdGggdGhlIHNhbWUgc2FmZXR5LiAqKVxuICBsZXQgcmVjIHNhZmVfZXEgYSBiID1cbiAgICBpZiBhID09IGIgdGhlbiB0cnVlICAoKiBwaHlzaWNhbCBlcXVhbGl0eSBmYXN0IHBhdGggKilcbiAgICBlbHNlIG1hdGNoIGEsIGIgd2l0aFxuICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4geCA9IHlcbiAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgfCBOaWwsIE5pbCAtPiB0cnVlXG4gICAgfCBTeW1ib2wgeCwgU3ltYm9sIHkgLT4geCA9IHlcbiAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgfCAoTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH0pLFxuICAgICAgKExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9KSAtPlxuICAgICAgTGlzdC5sZW5ndGggbGEgPSBMaXN0Lmxlbmd0aCBsYiAmJlxuICAgICAgTGlzdC5mb3JfYWxsMiBzYWZlX2VxIGxhIGxiXG4gICAgKCogRGljdDogY2hlY2sgX19ob3N0X2hhbmRsZSBmb3IgRE9NIG5vZGUgaWRlbnRpdHkgKilcbiAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBhIFwiX19ob3N0X2hhbmRsZVwiLCBIYXNodGJsLmZpbmRfb3B0IGIgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICAgIHwgU29tZSAoTnVtYmVyIGhhKSwgU29tZSAoTnVtYmVyIGhiKSAtPiBoYSA9IGhiXG4gICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICgqIExhbWJkYS9Db21wb25lbnQvSXNsYW5kL1NpZ25hbC9OYXRpdmVGbjogcGh5c2ljYWwgb25seSAqKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICByZWdpc3RlciBcIj1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPiBCb29sIChzYWZlX2VxIGEgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIiE9XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAobm90IChzYWZlX2VxIGEgYikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiIT06IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPCBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI8OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPiBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhID4gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI8PVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8PSBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhIDw9IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIjw9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj49XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhID49IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPj0gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPj06IDIgYXJnc1wiKSk7XG5cbiAgKCogPT09IExvZ2ljID09PSAqKVxuICByZWdpc3RlciBcIm5vdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAobm90IChzeF90cnV0aHkgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdDogMSBhcmdcIikpO1xuXG4gICgqID09PSBQcmVkaWNhdGVzID09PSAqKVxuICByZWdpc3RlciBcIm5pbD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGlzX25pbCBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJuaWw/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnVtYmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTnVtYmVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmc/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImJvb2xlYW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtCb29sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJvb2xlYW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRpY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Q/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ltYm9sP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJrZXl3b3JkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbS2V5d29yZCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXl3b3JkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImVtcHR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbU3RyaW5nIFwiXCJdIC0+IEJvb2wgdHJ1ZSB8IFtTdHJpbmcgX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBbTmlsXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW1wdHk/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwib2RkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoaW50X29mX2Zsb2F0IChhc19udW1iZXIgYSkgbW9kIDIgPD4gMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwib2RkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV2ZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBhKSBtb2QgMiA9IDApIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2ZW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiemVybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGFzX251bWJlciBhID0gMC4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ6ZXJvPzogMSBhcmdcIikpO1xuXG4gICgqID09PSBTdHJpbmdzID09PSAqKVxuICByZWdpc3RlciBcInN0clwiIChmdW4gYXJncyAtPiBTdHJpbmcgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgdG9fc3RyaW5nIGFyZ3MpKSk7XG4gIHJlZ2lzdGVyIFwidXBwZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAoU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1cHBlcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInVwY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVwY2FzZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvd2VyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG93ZXI6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkb3duY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcubG93ZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRvd25jYXNlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJpbVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudHJpbSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmltOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFN0cmluZy5sZW5ndGggKGFzX3N0cmluZyBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWxlbmd0aDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZy1jb250YWlucz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgaGF5c3RhY2s7IFN0cmluZyBuZWVkbGVdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIG5lZWRsZSA+IFN0cmluZy5sZW5ndGggaGF5c3RhY2sgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGlmIFN0cmluZy5zdWIgaGF5c3RhY2sgaSAoU3RyaW5nLmxlbmd0aCBuZWVkbGUpID0gbmVlZGxlIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1jb250YWlucz86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN0YXJ0cy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgcHJlZml4XSAtPlxuICAgICAgQm9vbCAoU3RyaW5nLmxlbmd0aCBzID49IFN0cmluZy5sZW5ndGggcHJlZml4ICYmXG4gICAgICAgICAgICBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBwcmVmaXgpID0gcHJlZml4KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0YXJ0cy13aXRoPzogMiBzdHJpbmcgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiZW5kcy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgc3VmZml4XSAtPlxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGFuZCB4bCA9IFN0cmluZy5sZW5ndGggc3VmZml4IGluXG4gICAgICBCb29sIChzbCA+PSB4bCAmJiBTdHJpbmcuc3ViIHMgKHNsIC0geGwpIHhsID0gc3VmZml4KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVuZHMtd2l0aD86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImluZGV4LW9mXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhheXN0YWNrOyBTdHJpbmcgbmVlZGxlXSAtPlxuICAgICAgbGV0IG5sID0gU3RyaW5nLmxlbmd0aCBuZWVkbGUgYW5kIGhsID0gU3RyaW5nLmxlbmd0aCBoYXlzdGFjayBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPVxuICAgICAgICBpZiBpICsgbmwgPiBobCB0aGVuIE51bWJlciAoLTEuMClcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIGhheXN0YWNrIGkgbmwgPSBuZWVkbGUgdGhlbiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gZmluZCAwXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5kZXgtb2Y6IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN1YnN0cmluZ1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBOdW1iZXIgc3RhcnQ7IE51bWJlciBlbmRfXSAtPlxuICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgc3RhcnQgYW5kIGogPSBpbnRfb2ZfZmxvYXQgZW5kXyBpblxuICAgICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGkgPSBtYXggMCAobWluIGkgbGVuKSBhbmQgaiA9IG1heCAwIChtaW4gaiBsZW4pIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChtYXggMCAoaiAtIGkpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzdWJzdHJpbmc6IDMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic3Vic3RyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IE51bWJlciBzdGFydDsgTnVtYmVyIGxlbl0gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IHN0YXJ0IGFuZCBuID0gaW50X29mX2Zsb2F0IGxlbiBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBzbCkgaW5cbiAgICAgIGxldCBuID0gbWF4IDAgKG1pbiBuIChzbCAtIGkpKSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKVxuICAgIHwgW1N0cmluZyBzOyBOdW1iZXIgc3RhcnRdIC0+XG4gICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBzdGFydCBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaSA9IG1heCAwIChtaW4gaSBzbCkgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgKHNsIC0gaSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3Vic3RyOiAyLTMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic3BsaXRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHNlcF0gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4gcCAtPiBTdHJpbmcgcCkgKFN0cmluZy5zcGxpdF9vbl9jaGFyIHNlcC5bMF0gcykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3BsaXQ6IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiam9pblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzZXA7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBTdHJpbmcgKFN0cmluZy5jb25jYXQgc2VwIChMaXN0Lm1hcCB0b19zdHJpbmcgaXRlbXMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImpvaW46IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVwbGFjZVwiIChmdW4gYXJncyAtPlxuICAgIGxldCB0b19zdHIgPSBmdW5jdGlvblxuICAgICAgfCBTdHJpbmcgcyAtPiBzIHwgU3hFeHByIHMgLT4gcyB8IFJhd0hUTUwgcyAtPiBzXG4gICAgICB8IEtleXdvcmQgayAtPiBrIHwgU3ltYm9sIHMgLT4gc1xuICAgICAgfCBOaWwgLT4gXCJcIiB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gICAgICB8IE51bWJlciBuIC0+IGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKSBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJWdcIiBuXG4gICAgICB8IFRodW5rIF8gYXMgdCAtPiAobWF0Y2ggIV9zeF90cmFtcG9saW5lX2ZuIHQgd2l0aCBTdHJpbmcgcyAtPiBzIHwgdiAtPiB0b19zdHJpbmcgdilcbiAgICAgIHwgdiAtPiB0b19zdHJpbmcgdlxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbczsgb2xkX3M7IG5ld19zXSAtPlxuICAgICAgbGV0IHMgPSB0b19zdHIgcyBhbmQgb2xkX3MgPSB0b19zdHIgb2xkX3MgYW5kIG5ld19zID0gdG9fc3RyIG5ld19zIGluXG4gICAgICBsZXQgb2wgPSBTdHJpbmcubGVuZ3RoIG9sZF9zIGluXG4gICAgICBpZiBvbCA9IDAgdGhlbiBTdHJpbmcgc1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgICAgICBsZXQgcmVjIGdvIGkgPVxuICAgICAgICAgIGlmIGkgPj0gU3RyaW5nLmxlbmd0aCBzIHRoZW4gKClcbiAgICAgICAgICBlbHNlIGlmIGkgKyBvbCA8PSBTdHJpbmcubGVuZ3RoIHMgJiYgU3RyaW5nLnN1YiBzIGkgb2wgPSBvbGRfcyB0aGVuIGJlZ2luXG4gICAgICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgbmV3X3M7XG4gICAgICAgICAgICBnbyAoaSArIG9sKVxuICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuW2ldO1xuICAgICAgICAgICAgZ28gKGkgKyAxKVxuICAgICAgICAgIGVuZFxuICAgICAgICBpbiBnbyAwO1xuICAgICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgICBlbmRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXBsYWNlOiAzIHN0cmluZyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaGFyLWZyb20tY29kZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW051bWJlciBuXSAtPlxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNCBpblxuICAgICAgQnVmZmVyLmFkZF91dGZfOF91Y2hhciBidWYgKFVjaGFyLm9mX2ludCAoaW50X29mX2Zsb2F0IG4pKTtcbiAgICAgIFN0cmluZyAoQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjaGFyLWZyb20tY29kZTogMSBhcmdcIikpO1xuXG4gICgqID09PSBDb2xsZWN0aW9ucyA9PT0gKilcbiAgcmVnaXN0ZXIgXCJsaXN0XCIgKGZ1biBhcmdzIC0+IExpc3RSZWYgKHJlZiBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwibGVuXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCBsKSlcbiAgICB8IFtTdHJpbmcgc10gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpXG4gICAgfCBbRGljdCBkXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoSGFzaHRibC5sZW5ndGggZCkpXG4gICAgfCBbTmlsXSB8IFtCb29sIGZhbHNlXSAtPiBOdW1iZXIgMC4wXG4gICAgfCBbQm9vbCB0cnVlXSAtPiBOdW1iZXIgMS4wXG4gICAgfCBbTnVtYmVyIF9dIC0+IE51bWJlciAxLjBcbiAgICB8IFtSYXdIVE1MIHNdIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgIHwgW1N4RXhwciBzXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSlcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCBwYWlycykpXG4gICAgfCBbQ29tcG9uZW50IF9dIHwgW0lzbGFuZCBfXSB8IFtMYW1iZGEgX10gfCBbTmF0aXZlRm4gX11cbiAgICB8IFtNYWNybyBfXSB8IFtUaHVuayBfXSB8IFtLZXl3b3JkIF9dIHwgW1N5bWJvbCBfXSAtPiBOdW1iZXIgMC4wXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImxlbjogJWQgYXJnc1wiXG4gICAgICAgIChMaXN0Lmxlbmd0aCBhcmdzKSkpKTtcbiAgcmVnaXN0ZXIgXCJsZW5ndGhcIiAoSGFzaHRibC5maW5kIHByaW1pdGl2ZXMgXCJsZW5cIik7XG4gIHJlZ2lzdGVyIFwiZmlyc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0ICh4IDo6IF8pXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfV0gLT4geFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IE5pbCB8IFtOaWxdIC0+IE5pbFxuICAgIHwgW3hdIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImZpcnN0OiBleHBlY3RlZCBsaXN0LCBnb3QgXCIgXiBpbnNwZWN0IHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpcnN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJyZXN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoXyA6OiB4cyldIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IF8gOjogeHMgfV0gLT4gTGlzdCB4c1xuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IExpc3QgW10gfCBbTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGFzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPlxuICAgICAgKG1hdGNoIExpc3QucmV2IGwgd2l0aCB4IDo6IF8gLT4geCB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsYXN0OiAxIGxpc3QgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbml0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+XG4gICAgICAobWF0Y2ggTGlzdC5yZXYgbCB3aXRoIF8gOjogcmVzdCAtPiBMaXN0IChMaXN0LnJldiByZXN0KSB8IFtdIC0+IExpc3QgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5pdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnRoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBOdW1iZXIgbl0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9OyBOdW1iZXIgbl0gLT5cbiAgICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IG4pIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IE51bWJlciBuXSAtPlxuICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgbiBpblxuICAgICAgaWYgaSA+PSAwICYmIGkgPCBTdHJpbmcubGVuZ3RoIHMgdGhlbiBTdHJpbmcgKFN0cmluZy5tYWtlIDEgcy5baV0pXG4gICAgICBlbHNlIE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm50aDogbGlzdC9zdHJpbmcgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY29uc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3g7IExpc3QgbF0gfCBbeDsgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0ICh4IDo6IGwpXG4gICAgfCBbeDsgTmlsXSAtPiBMaXN0IFt4XVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNvbnM6IHZhbHVlIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJhcHBlbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfTsgTGlzdCBsYiB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxiIH1dIC0+XG4gICAgICBMaXN0IChsYSBAIGxiKVxuICAgIHwgW0xpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9OyBOaWxdIC0+IExpc3QgbGFcbiAgICB8IFtOaWw7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IGxiXG4gICAgfCBbTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH07IHZdIC0+IExpc3QgKGxhIEAgW3ZdKVxuICAgIHwgW3Y7IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPiBMaXN0IChbdl0gQCBsYilcbiAgICB8IF8gLT5cbiAgICAgIGxldCBhbGwgPSBMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzIGluXG4gICAgICBMaXN0IGFsbCk7XG4gIHJlZ2lzdGVyIFwicmV2ZXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBMaXN0IChMaXN0LnJldiBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJldmVyc2U6IDEgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiZmxhdHRlblwiIChmdW4gYXJncyAtPlxuICAgIGxldCByZWMgZmxhdCA9IGZ1bmN0aW9uXG4gICAgICB8IExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9IC0+IExpc3QuY29uY2F0X21hcCBmbGF0IGl0ZW1zXG4gICAgICB8IHggLT4gW3hdXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5jb25jYXRfbWFwIGZsYXQgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmbGF0dGVuOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcImNvbmNhdFwiIChmdW4gYXJncyAtPiBMaXN0IChMaXN0LmNvbmNhdF9tYXAgYXNfbGlzdCBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwiY29udGFpbnM/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsOyBpdGVtXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IGl0ZW1dIC0+XG4gICAgICAoKiBQaHlzaWNhbCBlcXVhbGl0eSBmaXJzdCAoaGFuZGxlcyBzaWduYWxzL2RpY3RzL2Nsb3N1cmVzIHNhZmVseSksXG4gICAgICAgICBzdHJ1Y3R1cmFsIGZhbGxiYWNrIG9ubHkgZm9yIGFjeWNsaWMgdHlwZXMgKHN0cmluZy9udW1iZXIvYm9vbC9uaWwvc3ltYm9sL2tleXdvcmQpICopXG4gICAgICBsZXQgc2FmZV9lcSBhIGIgPVxuICAgICAgICBhID09IGIgfHxcbiAgICAgICAgKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4geCA9IHlcbiAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5XG4gICAgICAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgICAgICB8IE5pbCwgTmlsIC0+IHRydWVcbiAgICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5XG4gICAgICAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgICAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGEgXCJfX2hvc3RfaGFuZGxlXCIsIEhhc2h0YmwuZmluZF9vcHQgYiBcIl9faG9zdF9oYW5kbGVcIiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKE51bWJlciBoYSksIFNvbWUgKE51bWJlciBoYikgLT4gaGEgPSBoYlxuICAgICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICAgaW5cbiAgICAgIEJvb2wgKExpc3QuZXhpc3RzIChmdW4geCAtPiBzYWZlX2VxIHggaXRlbSkgbClcbiAgICB8IFtTdHJpbmcgczsgU3RyaW5nIHN1Yl0gLT5cbiAgICAgIGxldCByZWMgZmluZCBpID1cbiAgICAgICAgaWYgaSArIFN0cmluZy5sZW5ndGggc3ViID4gU3RyaW5nLmxlbmd0aCBzIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIHMgaSAoU3RyaW5nLmxlbmd0aCBzdWIpID0gc3ViIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNvbnRhaW5zPzogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJyYW5nZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW051bWJlciBzdG9wXSAtPlxuICAgICAgbGV0IG4gPSBpbnRfb2ZfZmxvYXQgc3RvcCBpblxuICAgICAgTGlzdCAoTGlzdC5pbml0IChtYXggMCBuKSAoZnVuIGkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkpKVxuICAgIHwgW051bWJlciBzdGFydDsgTnVtYmVyIHN0b3BdIC0+XG4gICAgICBsZXQgcyA9IGludF9vZl9mbG9hdCBzdGFydCBhbmQgZSA9IGludF9vZl9mbG9hdCBzdG9wIGluXG4gICAgICBsZXQgbGVuID0gbWF4IDAgKGUgLSBzKSBpblxuICAgICAgTGlzdCAoTGlzdC5pbml0IGxlbiAoZnVuIGkgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKHMgKyBpKSkpKVxuICAgIHwgW051bWJlciBzdGFydDsgTnVtYmVyIHN0b3A7IE51bWJlciBzdGVwXSAtPlxuICAgICAgbGV0IHMgPSBzdGFydCBhbmQgZSA9IHN0b3AgYW5kIHN0ID0gc3RlcCBpblxuICAgICAgaWYgc3QgPSAwLjAgdGhlbiBMaXN0IFtdXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICAgICAgICBsZXQgaSA9IHJlZiBzIGluXG4gICAgICAgIGlmIHN0ID4gMC4wIHRoZW5cbiAgICAgICAgICAod2hpbGUgIWkgPCBlIGRvIGl0ZW1zIDo9IE51bWJlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKy4gc3QgZG9uZSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgICh3aGlsZSAhaSA+IGUgZG8gaXRlbXMgOj0gTnVtYmVyICFpIDo6ICFpdGVtczsgaSA6PSAhaSArLiBzdCBkb25lKTtcbiAgICAgICAgTGlzdCAoTGlzdC5yZXYgIWl0ZW1zKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJhbmdlOiAxLTMgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwic2xpY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgTnVtYmVyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoaW50X29mX2Zsb2F0IHN0YXJ0KSBpblxuICAgICAgbGV0IHJlYyBkcm9wIG4gPSBmdW5jdGlvbiBfIDo6IHhzIHdoZW4gbiA+IDAgLT4gZHJvcCAobi0xKSB4cyB8IGwgLT4gbCBpblxuICAgICAgTGlzdCAoZHJvcCBpIGwpXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IE51bWJlciBzdGFydDsgTnVtYmVyIGVuZF9dIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChpbnRfb2ZfZmxvYXQgc3RhcnQpIGFuZCBqID0gaW50X29mX2Zsb2F0IGVuZF8gaW5cbiAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICBsZXQgaiA9IG1pbiBqIGxlbiBpblxuICAgICAgbGV0IHJlYyB0YWtlX3JhbmdlIGlkeCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW11cbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgaWYgaWR4ID49IGogdGhlbiBbXVxuICAgICAgICAgIGVsc2UgaWYgaWR4ID49IGkgdGhlbiB4IDo6IHRha2VfcmFuZ2UgKGlkeCsxKSB4c1xuICAgICAgICAgIGVsc2UgdGFrZV9yYW5nZSAoaWR4KzEpIHhzXG4gICAgICBpbiBMaXN0ICh0YWtlX3JhbmdlIDAgbClcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoaW50X29mX2Zsb2F0IHN0YXJ0KSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKFN0cmluZy5sZW5ndGggcyAtIGkpKSlcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIHN0YXJ0OyBOdW1iZXIgZW5kX10gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGludF9vZl9mbG9hdCBzdGFydCkgYW5kIGogPSBpbnRfb2ZfZmxvYXQgZW5kXyBpblxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBsZXQgaiA9IG1pbiBqIHNsIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChtYXggMCAoaiAtIGkpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzbGljZTogMi0zIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInNvcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5zb3J0IGNvbXBhcmUgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzb3J0OiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcInppcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgbGEgPSBhc19saXN0IGEgYW5kIGxiID0gYXNfbGlzdCBiIGluXG4gICAgICBsZXQgcmVjIGdvIGwxIGwyIGFjYyA9IG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgICAgIHwgeCA6OiB4cywgeSA6OiB5cyAtPiBnbyB4cyB5cyAoTGlzdCBbeDsgeV0gOjogYWNjKVxuICAgICAgICB8IF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgICBpbiBMaXN0IChnbyBsYSBsYiBbXSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ6aXA6IDIgbGlzdHNcIikpO1xuICByZWdpc3RlciBcInppcC1wYWlyc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3ZdIC0+XG4gICAgICBsZXQgbCA9IGFzX2xpc3QgdiBpblxuICAgICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgYSA6OiBiIDo6IHJlc3QgLT4gTGlzdCBbYTsgYl0gOjogZ28gcmVzdFxuICAgICAgICB8IF8gLT4gW11cbiAgICAgIGluIExpc3QgKGdvIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiemlwLXBhaXJzOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcInRha2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgTnVtYmVyIG5dIC0+XG4gICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgfCB4IDo6IHhzIHdoZW4gaSA+IDAgLT4geCA6OiB0YWtlX24gKGktMSkgeHNcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0ICh0YWtlX24gKGludF9vZl9mbG9hdCBuKSBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRha2U6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiZHJvcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBOdW1iZXIgbl0gLT5cbiAgICAgIGxldCByZWMgZHJvcF9uIGkgPSBmdW5jdGlvblxuICAgICAgICB8IF8gOjogeHMgd2hlbiBpID4gMCAtPiBkcm9wX24gKGktMSkgeHNcbiAgICAgICAgfCBsIC0+IGxcbiAgICAgIGluIExpc3QgKGRyb3BfbiAoaW50X29mX2Zsb2F0IG4pIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZHJvcDogbGlzdCBhbmQgbnVtYmVyXCIpKTtcbiAgcmVnaXN0ZXIgXCJjaHVuay1ldmVyeVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBzaXplID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtdXG4gICAgICAgIHwgbCAtPlxuICAgICAgICAgIGxldCByZWMgdGFrZV9uIGkgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCB4IDo6IHhzIHdoZW4gaSA+IDAgLT4geCA6OiB0YWtlX24gKGktMSkgeHNcbiAgICAgICAgICAgIHwgXyAtPiBbXVxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHJlYyBkcm9wX24gaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IF8gOjogeHMgd2hlbiBpID4gMCAtPiBkcm9wX24gKGktMSkgeHNcbiAgICAgICAgICAgIHwgbCAtPiBsXG4gICAgICAgICAgaW5cbiAgICAgICAgICBMaXN0ICh0YWtlX24gc2l6ZSBsKSA6OiBnbyAoZHJvcF9uIHNpemUgbClcbiAgICAgIGluIExpc3QgKGdvIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2h1bmstZXZlcnk6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwidW5pcXVlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSldIC0+XG4gICAgICBsZXQgc2VlbiA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gICAgICBsZXQgcmVzdWx0ID0gTGlzdC5maWx0ZXIgKGZ1biB4IC0+XG4gICAgICAgIGxldCBrZXkgPSBpbnNwZWN0IHggaW5cbiAgICAgICAgaWYgSGFzaHRibC5tZW0gc2VlbiBrZXkgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIChIYXNodGJsLnJlcGxhY2Ugc2VlbiBrZXkgdHJ1ZTsgdHJ1ZSlcbiAgICAgICkgbCBpblxuICAgICAgTGlzdCByZXN1bHRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1bmlxdWU6IDEgbGlzdFwiKSk7XG5cbiAgKCogPT09IERpY3QgPT09ICopXG4gIHJlZ2lzdGVyIFwiZGljdFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBkID0gbWFrZV9kaWN0ICgpIGluXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IERpY3QgZFxuICAgICAgfCBLZXl3b3JkIGsgOjogdiA6OiByZXN0IC0+IGRpY3Rfc2V0IGQgayB2OyBnbyByZXN0XG4gICAgICB8IFN0cmluZyBrIDo6IHYgOjogcmVzdCAtPiBkaWN0X3NldCBkIGsgdjsgZ28gcmVzdFxuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdDogcGFpcnMgb2Yga2V5IHZhbHVlXCIpXG4gICAgaW4gZ28gYXJncyk7XG4gIHJlZ2lzdGVyIFwiZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9nZXQgZCBrXG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0xpc3QgbDsgTnVtYmVyIG5dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfTsgTnVtYmVyIG5dIC0+XG4gICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBuKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW05pbDsgX10gLT4gTmlsICAoKiBuaWwuYW55dGhpbmcg4oaSIG5pbCAqKVxuICAgIHwgW187IF9dIC0+IE5pbCAgICAoKiB0eXBlIG1pc21hdGNoIOKGkiBuaWwgKG1hdGNoZXMgSlMvUHl0aG9uIGJlaGF2aW9yKSAqKVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImhhcy1rZXk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gQm9vbCAoZGljdF9oYXMgZCBrKVxuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBCb29sIChkaWN0X2hhcyBkIGspXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaGFzLWtleT86IGRpY3QgYW5kIGtleVwiKSk7XG4gIHJlZ2lzdGVyIFwiYXNzb2NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IERpY3QgZCA6OiByZXN0IC0+XG4gICAgICBsZXQgZDIgPSBIYXNodGJsLmNvcHkgZCBpblxuICAgICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gRGljdCBkMlxuICAgICAgICB8IFN0cmluZyBrIDo6IHYgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZDIgayB2OyBnbyByZXN0XG4gICAgICAgIHwgS2V5d29yZCBrIDo6IHYgOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZDIgayB2OyBnbyByZXN0XG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc29jOiBwYWlyc1wiKVxuICAgICAgaW4gZ28gcmVzdFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc29jOiBkaWN0ICsgcGFpcnNcIikpO1xuICByZWdpc3RlciBcImRpc3NvY1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgRGljdCBkIDo6IGtleXMgLT5cbiAgICAgIGxldCBkMiA9IEhhc2h0YmwuY29weSBkIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biBrIC0+IEhhc2h0YmwucmVtb3ZlIGQyICh0b19zdHJpbmcgaykpIGtleXM7XG4gICAgICBEaWN0IGQyXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGlzc29jOiBkaWN0ICsga2V5c1wiKSk7XG4gIHJlZ2lzdGVyIFwibWVyZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgRGljdCBzcmMgLT4gSGFzaHRibC5pdGVyIChmdW4gayB2IC0+IEhhc2h0YmwucmVwbGFjZSBkIGsgdikgc3JjXG4gICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtZXJnZTogYWxsIGFyZ3MgbXVzdCBiZSBkaWN0c1wiKVxuICAgICkgYXJncztcbiAgICBEaWN0IGQpO1xuICByZWdpc3RlciBcImtleXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gTGlzdCAoZGljdF9rZXlzIGQpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImtleXM6IDEgZGljdFwiKSk7XG4gIHJlZ2lzdGVyIFwidmFsc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbRGljdCBkXSAtPiBMaXN0IChkaWN0X3ZhbHMgZCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidmFsczogMSBkaWN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJtdXRhYmxlLWxpc3RcIiAoZnVuIF9hcmdzIC0+IExpc3RSZWYgKHJlZiBbXSkpO1xuICByZWdpc3RlciBcInNldC1udGghXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyBOdW1iZXIgbjsgdl0gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGxldCBsID0gIXIgaW5cbiAgICAgIHIgOj0gTGlzdC5tYXBpIChmdW4gaiB4IC0+IGlmIGogPSBpIHRoZW4gdiBlbHNlIHgpIGw7XG4gICAgICBOaWxcbiAgICB8IFtMaXN0IF87IF87IF9dIC0+XG4gICAgICByYWlzZSAoRXZhbF9lcnJvciBcInNldC1udGghOiBsaXN0IGlzIGltbXV0YWJsZSwgdXNlIExpc3RSZWZcIilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbnRoITogZXhwZWN0ZWQgKGxpc3QgaWR4IHZhbClcIikpO1xuICByZWdpc3RlciBcImRpY3Qtc2V0IVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGs7IHZdIC0+IGRpY3Rfc2V0IGQgayB2OyB2XG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGs7IHZdIC0+IGRpY3Rfc2V0IGQgayB2OyB2XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1zZXQhOiBkaWN0IGtleSB2YWxcIikpO1xuICByZWdpc3RlciBcImRpY3QtZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9nZXQgZCBrXG4gICAgfCBbRGljdCBkOyBLZXl3b3JkIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3QtZ2V0OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImRpY3QtaGFzP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IEJvb2wgKGRpY3RfaGFzIGQgaylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWhhcz86IGRpY3QgYW5kIGtleVwiKSk7XG4gIHJlZ2lzdGVyIFwiZGljdC1kZWxldGUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkOyBTdHJpbmcga10gLT4gZGljdF9kZWxldGUgZCBrOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWRlbGV0ZSE6IGRpY3QgYW5kIGtleVwiKSk7XG5cbiAgKCogPT09IE1pc2MgPT09ICopXG4gIHJlZ2lzdGVyIFwidHlwZS1vZlwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nICh0eXBlX29mIGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInR5cGUtb2Y6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbnNwZWN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKGluc3BlY3QgYSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaW5zcGVjdDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInNlcmlhbGl6ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2FdIC0+IFN0cmluZyAoaW5zcGVjdCBhKSAgKCogdXNlZCBmb3IgZGVkdXAga2V5cyBpbiBjb21waWxlciAqKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNlcmlhbGl6ZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcIm1ha2Utc3ltYm9sXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IFN5bWJvbCBzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1zeW1ib2w6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiZXJyb3JcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBtc2ddIC0+IHJhaXNlIChFdmFsX2Vycm9yIG1zZylcbiAgICB8IFthXSAtPiByYWlzZSAoRXZhbF9lcnJvciAodG9fc3RyaW5nIGEpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVycm9yOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJ5LWNhdGNoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdHJ5X2ZuOyBjYXRjaF9mbl0gLT5cbiAgICAgICh0cnkgIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gdHJ5X2ZuIFtdKVxuICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIGNhdGNoX2ZuIFtTdHJpbmcgbXNnXSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidHJ5LWNhdGNoOiBleHBlY3RlZCAodHJ5LWZuIGNhdGNoLWZuKVwiKSk7XG4gICgqIGNsaWVudD8g4oCUIGZhbHNlIGJ5IGRlZmF1bHQgKHNlcnZlcik7IHN4X2Jyb3dzZXIubWwgc2V0cyBfaXNfY2xpZW50IDo9IHRydWUgKilcbiAgcmVnaXN0ZXIgXCJjbGllbnQ/XCIgKGZ1biBfYXJncyAtPiBCb29sICFfaXNfY2xpZW50KTtcbiAgKCogTmFtZWQgc3RvcmVzIOKAlCBnbG9iYWwgbXV0YWJsZSByZWdpc3RyeSwgYnlwYXNzZXMgZW52IHNjb3BpbmcgaXNzdWVzICopXG4gIGxldCBzdG9yZV9yZWdpc3RyeSA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSAxNiBpblxuICByZWdpc3RlciBcImRlZi1zdG9yZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lOyBpbml0X2ZuXSAtPlxuICAgICAgaWYgbm90IChIYXNodGJsLm1lbSBzdG9yZV9yZWdpc3RyeSBuYW1lKSB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBzdG9yZSA9ICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIGluaXRfZm4gW10pIGluXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBzdG9yZV9yZWdpc3RyeSBuYW1lIHN0b3JlXG4gICAgICBlbmQ7XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBzdG9yZV9yZWdpc3RyeSBuYW1lIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkZWYtc3RvcmU6IGV4cGVjdGVkIChuYW1lIGluaXQtZm4pXCIpKTtcbiAgcmVnaXN0ZXIgXCJ1c2Utc3RvcmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN0b3JlX3JlZ2lzdHJ5IG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiU3RvcmUgbm90IGZvdW5kOiBcIiBeIG5hbWUpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1c2Utc3RvcmU6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG4gIHJlZ2lzdGVyIFwiY2xlYXItc3RvcmVzXCIgKGZ1biBfYXJncyAtPiBIYXNodGJsLmNsZWFyIHN0b3JlX3JlZ2lzdHJ5OyBOaWwpO1xuICAoKiBTU1Igc3R1YnMg4oCUIHJlc291cmNlIHJldHVybnMgbG9hZGluZyBzdGF0ZSBvbiBzZXJ2ZXIuXG4gICAgIE5PVEU6IGVmZmVjdCBhbmQgcmVnaXN0ZXItaW4tc2NvcGUgbXVzdCBOT1QgYmUgcmVnaXN0ZXJlZCBhcyBwcmltaXRpdmVzXG4gICAgIGhlcmUg4oCUIHRoZSBieXRlY29kZSBjb21waWxlciB1c2VzIHByaW1pdGl2ZT8gdG8gZGVjaWRlIENBTExfUFJJTSB2c1xuICAgICBHTE9CQUxfR0VUK0NBTEwuIElmIGVmZmVjdCBpcyBhIHByaW1pdGl2ZSwgYnl0ZWNvZGVkIG1vZHVsZXMgZW1pdFxuICAgICBDQUxMX1BSSU0gd2hpY2ggcmV0dXJucyBOaWwgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSByZWFsIGVmZmVjdCBmdW5jdGlvblxuICAgICBmcm9tIGNvcmUtc2lnbmFscy5zeC4gVGhlIHNlcnZlciBvdmVycmlkZXMgZWZmZWN0IGluIHN4X3NlcnZlci5tbCB2aWFcbiAgICAgZW52X2JpbmQgQUZURVIgY29tcGlsYXRpb24uICopXG4gICgqIHJlZ2lzdGVyIFwiZWZmZWN0XCIg4oCUIFJFTU9WRUQ6IHNlZSBub3RlIGFib3ZlICopXG4gICgqIHJlZ2lzdGVyIFwicmVnaXN0ZXItaW4tc2NvcGVcIiDigJQgUkVNT1ZFRDogc2VlIG5vdGUgYWJvdmUgKilcbiAgKCogcmVzb3VyY2Ug4oCUIFNTUiBzdHViOiByZXR1cm4gc2lnbmFsIHdpdGgge2xvYWRpbmc6IHRydWV9LCBjbGllbnQgaHlkcmF0ZXMgcmVhbCBmZXRjaCAqKVxuICByZWdpc3RlciBcInJlc291cmNlXCIgKGZ1biBfYXJncyAtPlxuICAgIGxldCBzdGF0ZSA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICBIYXNodGJsLnJlcGxhY2Ugc3RhdGUgXCJsb2FkaW5nXCIgKEJvb2wgdHJ1ZSk7XG4gICAgSGFzaHRibC5yZXBsYWNlIHN0YXRlIFwiZGF0YVwiIE5pbDtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc3RhdGUgXCJlcnJvclwiIE5pbDtcbiAgICBsZXQgc2lnX2QgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgSGFzaHRibC5yZXBsYWNlIHNpZ19kIFwiX19zaWduYWxcIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJ2YWx1ZVwiIChEaWN0IHN0YXRlKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJzdWJzY3JpYmVyc1wiIChMaXN0IFtdKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJkZXBzXCIgKExpc3QgW10pO1xuICAgIERpY3Qgc2lnX2QpO1xuICByZWdpc3RlciBcImFwcGx5XCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGNhbGwgZiBhID1cbiAgICAgIG1hdGNoIGYgd2l0aFxuICAgICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFcbiAgICAgIHwgXyAtPiAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiBmIGEpXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYSB9KV0gLT4gY2FsbCBmIGFcbiAgICB8IFtmOyBOaWxdIC0+IGNhbGwgZiBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGx5OiBmdW5jdGlvbiBhbmQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiaWRlbnRpY2FsP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYTsgYl0gLT4gQm9vbCAoYSA9PSBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpZGVudGljYWw/OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIm1ha2Utc3ByZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbRGljdCBkXSAtPlxuICAgICAgbGV0IHBhaXJzID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiAoaywgdikgOjogYWNjKSBkIFtdIGluXG4gICAgICBTcHJlYWQgcGFpcnNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXNwcmVhZDogMSBkaWN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTcHJlYWQgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2VcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQ/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ByZWFkLWF0dHJzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPlxuICAgICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBkaWN0X3NldCBkIGsgdikgcGFpcnM7XG4gICAgICBEaWN0IGRcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzcHJlYWQtYXR0cnM6IDEgc3ByZWFkXCIpKTtcblxuICAoKiBIaWdoZXItb3JkZXIgZm9ybXMgYXMgY2FsbGFibGUgcHJpbWl0aXZlcyDigJQgdXNlZCBieSB0aGUgVk0uXG4gICAgIFRoZSBDRUsgbWFjaGluZSBoYW5kbGVzIHRoZXNlIGFzIHNwZWNpYWwgZm9ybXMgd2l0aCBkZWRpY2F0ZWQgZnJhbWVzO1xuICAgICB0aGUgVk0gbmVlZHMgdGhlbSBhcyBwbGFpbiBjYWxsYWJsZSB2YWx1ZXMuICopXG4gICgqIENhbGwgYW55IFNYIGNhbGxhYmxlIOKAlCBoYW5kbGVzIE5hdGl2ZUZuLCBMYW1iZGEgKHZpYSB0cmFtcG9saW5lKSwgVk0gY2xvc3VyZXMgKilcbiAgbGV0IGNhbGxfYW55IGYgYXJncyA9XG4gICAgbWF0Y2ggZiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgICB8IF8gLT4gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gZiBhcmdzKVxuICBpblxuICByZWdpc3RlciBcIm1hcFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gY2FsbF9hbnkgZiBbeF0pIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1hcDogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJtYXAtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcGkgKGZ1biBpIHggLT4gY2FsbF9hbnkgZiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IExpc3QgW11cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYXAtaW5kZXhlZDogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmaWx0ZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdCAoTGlzdC5maWx0ZXIgKGZ1biB4IC0+IHN4X3RydXRoeSAoY2FsbF9hbnkgZiBbeF0pKSBpdGVtcylcbiAgICB8IFtfOyBOaWxdIC0+IExpc3QgW11cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaWx0ZXI6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZm9yLWVhY2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBpZ25vcmUgKGNhbGxfYW55IGYgW3hdKSkgaXRlbXM7IE5pbFxuICAgIHwgW187IE5pbF0gLT4gTmlsICAoKiBuaWwgY29sbGVjdGlvbiA9IG5vLW9wICopXG4gICAgfCBfIC0+XG4gICAgICBsZXQgdHlwZXMgPSBTdHJpbmcuY29uY2F0IFwiLCBcIiAoTGlzdC5tYXAgKGZ1biB2IC0+IHR5cGVfb2YgdikgYXJncykgaW5cbiAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZiBcImZvci1lYWNoOiBleHBlY3RlZCAoZm4gbGlzdCksIGdvdCAoJXMpICVkIGFyZ3NcIiB0eXBlcyAoTGlzdC5sZW5ndGggYXJncykpKSk7XG4gIHJlZ2lzdGVyIFwicmVkdWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgaW5pdDsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gY2FsbF9hbnkgZiBbYWNjOyB4XSkgaW5pdCBpdGVtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlZHVjZTogZXhwZWN0ZWQgKGZuIGluaXQgbGlzdClcIikpO1xuICByZWdpc3RlciBcInNvbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBCb29sIGZhbHNlXG4gICAgICAgIHwgeCA6OiByZXN0IC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGNhbGxfYW55IGYgW3hdIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHJlc3VsdCB0aGVuIHJlc3VsdCBlbHNlIGZpbmQgcmVzdFxuICAgICAgaW4gZmluZCBpdGVtc1xuICAgIHwgW187IE5pbF0gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNvbWU6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwiZXZlcnk/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHggLT4gc3hfdHJ1dGh5IChjYWxsX2FueSBmIFt4XSkpIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gQm9vbCB0cnVlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZlcnk/OiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuXG4gICgqIC0tLS0gVk0gc3RhY2sgcHJpbWl0aXZlcyAodm0uc3ggcGxhdGZvcm0gaW50ZXJmYWNlKSAtLS0tICopXG4gIHJlZ2lzdGVyIFwibWFrZS12bS1zdGFja1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW051bWJlciBuXSAtPiBMaXN0UmVmIChyZWYgKExpc3QuaW5pdCAoaW50X29mX2Zsb2F0IG4pIChmdW4gXyAtPiBOaWwpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXZtLXN0YWNrOiBleHBlY3RlZCAoc2l6ZSlcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgTnVtYmVyIG5dIC0+IExpc3QubnRoICFyIChpbnRfb2ZfZmxvYXQgbilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1nZXQ6IGV4cGVjdGVkIChzdGFjayBpZHgpXCIpKTtcbiAgcmVnaXN0ZXIgXCJ2bS1zdGFjay1zZXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyBOdW1iZXIgbjsgdl0gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIHIgOj0gTGlzdC5tYXBpIChmdW4gaiB4IC0+IGlmIGogPSBpIHRoZW4gdiBlbHNlIHgpICFyOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1zZXQhOiBleHBlY3RlZCAoc3RhY2sgaWR4IHZhbClcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcl0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoICFyKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ2bS1zdGFjay1sZW5ndGg6IGV4cGVjdGVkIChzdGFjaylcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLWNvcHkhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiBzcmM7IExpc3RSZWYgZHN0OyBOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBjb3VudCA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBsZXQgc3JjX2l0ZW1zID0gIXNyYyBpblxuICAgICAgZHN0IDo9IExpc3QubWFwaSAoZnVuIGkgeCAtPiBpZiBpIDwgY291bnQgdGhlbiBMaXN0Lm50aCBzcmNfaXRlbXMgaSBlbHNlIHgpICFkc3Q7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWNvcHkhOiBleHBlY3RlZCAoc3JjIGRzdCBjb3VudClcIikpO1xuICByZWdpc3RlciBcInByaW1pdGl2ZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT4gQm9vbCAoSGFzaHRibC5tZW0gcHJpbWl0aXZlcyBuYW1lKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcblxuICAoKiBTY29wZSBzdGFjayBwcmltaXRpdmVzIGFyZSByZWdpc3RlcmVkIGJ5IHN4X3NlcnZlci5tbCAvIHJ1bl90ZXN0cy5tbFxuICAgICBiZWNhdXNlIHRoZXkgdXNlIGEgc2hhcmVkIHNjb3BlIHN0YWNrcyB0YWJsZSB3aXRoIGNvbGxlY3QhL2NvbGxlY3RlZC4gKilcblxuICAoKiAtLS0tIFByZWRpY2F0ZXMgbmVlZGVkIGJ5IGFkYXB0ZXItaHRtbC5zeCAtLS0tICopXG4gIHJlZ2lzdGVyIFwibGFtYmRhP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiaXNsYW5kP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiaXMtZWxzZS1jbGF1c2U/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbS2V5d29yZCBcImVsc2VcIl0gLT4gQm9vbCB0cnVlXG4gICAgfCBbQm9vbCB0cnVlXSAtPiBCb29sIHRydWVcbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiY29uZC1zY2hlbWU/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBjbGF1c2VzXSAtPlxuICAgICAgQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4gYyAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCBMaXN0IGwgLT4gTGlzdC5sZW5ndGggbCA9IDJcbiAgICAgICAgfCBfIC0+IGZhbHNlKSBjbGF1c2VzKVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgX10gLT4gQm9vbCB0cnVlIHwgW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImxhbWJkYS1jbG9zdXJlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gRW52IGwubF9jbG9zdXJlIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1jbG9zdXJlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IEVudiBjLmNfY2xvc3VyZVxuICAgIHwgW0lzbGFuZCBpXSAtPiBFbnYgaS5pX2Nsb3N1cmVcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW5cbiAgICB8IFtJc2xhbmQgaV0gLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1uYW1lXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfbmFtZVxuICAgIHwgW0lzbGFuZCBpXSAtPiBTdHJpbmcgaS5pX25hbWVcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtcGFyYW1zXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYy5jX3BhcmFtcylcbiAgICB8IFtJc2xhbmQgaV0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBpLmlfcGFyYW1zKVxuICAgIHwgXyAtPiBMaXN0IFtdKTtcbiAgcmVnaXN0ZXIgXCJjb21wb25lbnQtYm9keVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBjLmNfYm9keVxuICAgIHwgW0lzbGFuZCBpXSAtPiBpLmlfYm9keVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1maWxlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBjb21wb25lbnRfZmlsZSB2IHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1zZXQtZmlsZSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3Y7IGZdIC0+IGNvbXBvbmVudF9zZXRfZmlsZSB2IGYgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwibWFjcm8/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtNYWNybyBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImZvci1lYWNoLWluZGV4ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgeCAtPiBpZ25vcmUgKGNhbGxfYW55IGYgW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyB4XSkpIGl0ZW1zOyBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmb3ItZWFjaC1pbmRleGVkOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImxhbWJkYS1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMYW1iZGEgbF0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBsLmxfcGFyYW1zKVxuICAgIHwgXyAtPiBMaXN0IFtdKTtcbiAgcmVnaXN0ZXIgXCJsYW1iZGEtYm9keVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IGwubF9ib2R5IHwgXyAtPiBOaWwpO1xuICAoKiBleHBhbmQtbWFjcm8gaXMgcmVnaXN0ZXJlZCBsYXRlciBieSBydW5fdGVzdHMubWwgLyBzeF9zZXJ2ZXIubWxcbiAgICAgYmVjYXVzZSBpdCBuZWVkcyBldmFsX2V4cHIgd2hpY2ggY3JlYXRlcyBhIGRlcGVuZGVuY3kgY3ljbGUgKik7XG4gIHJlZ2lzdGVyIFwiZW1wdHktZGljdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGRdIC0+IEJvb2wgKEhhc2h0YmwubGVuZ3RoIGQgPSAwKVxuICAgIHwgXyAtPiBCb29sIHRydWUpO1xuICByZWdpc3RlciBcIm1ha2UtcmF3LWh0bWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBSYXdIVE1MIHMgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwicmF3LWh0bWwtY29udGVudFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbUmF3SFRNTCBzXSAtPiBTdHJpbmcgcyB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICByZWdpc3RlciBcImdldC1wcmltaXRpdmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZV0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIGZuIC0+IE5hdGl2ZUZuIChuYW1lLCBmbilcbiAgICAgICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk0gdW5kZWZpbmVkOiBcIiBeIG5hbWUpKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJnZXQtcHJpbWl0aXZlOiBleHBlY3RlZCAobmFtZSlcIikpO1xuICByZWdpc3RlciBcImNhbGwtcHJpbWl0aXZlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgZm4gLT4gZm4gYVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgW1N0cmluZyBuYW1lOyBOaWxdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSBmbiAtPiBmbiBbXVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNhbGwtcHJpbWl0aXZlOiBleHBlY3RlZCAobmFtZSBhcmdzLWxpc3QpXCIpKTtcbiAgKClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9yb3VuZF9mbG9hdCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfSGFzaHRibCIsIlN4X3R5cGVzIiwiU3RkbGliIiwiU3RkbGliX0Zsb2F0IiwiU3RkbGliX1ByaW50ZiIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfVWNoYXIiLCJwcmltaXRpdmVzIiwic3hfY2FsbF9mbiIsInBhcmFtIiwic3hfdHJhbXBvbGluZV9mbiIsInYiLCJyZWdpc3RlciIsIm5hbWUiLCJmbiIsImlzX3ByaW1pdGl2ZSIsImdldF9wcmltaXRpdmUiLCJtYXRjaCIsInRyYW1wb2xpbmVfaG9vayIsImNzdCIsImNzdF9zaWduYWwiLCJjc3RfZGljdCIsImNzdF92YWx1ZSIsImFzX251bWJlciIsInQiLCJuIiwicyIsImQiLCJhc19zdHJpbmciLCJhc19saXN0IiwibCIsInIiLCJhc19ib29sIiwiYiIsImNzdF9nIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJ0b19zdHJpbmciLCJhcmdzIiwiYWNjIiwiYSIsInJlc3QiLCJ4IiwicGxhY2VzIiwiZmFjdG9yIiwiaGkiLCJsbyIsImRlZmF1bHRfdmFsIiwiY3N0X2hvc3RfaGFuZGxlIiwic2FmZV9lcSIsInkiLCJsYSIsImhiIiwiaGEiLCJsYiIsIm5lZWRsZSIsImhheXN0YWNrIiwiaSIsInByZWZpeCIsInN1ZmZpeCIsInNsIiwieGwiLCJubCIsImhsIiwiZW5kIiwic3RhcnQiLCJqIiwibGVuIiwic2VwIiwicCIsIml0ZW1zIiwidG9fc3RyIiwibmV3X3MiLCJvbGRfcyIsIm9sIiwiYnVmIiwiY3N0X2FyZ3MiLCJjc3RfbGVuIiwicGFpcnMiLCJ4cyIsImV4biIsImFsbCIsImZsYXQiLCJzdWIiLCJpdGVtIiwic3RvcCIsImUiLCJzdGVwIiwidGFrZV9yYW5nZSIsImlkeCIsImwxIiwibDIiLCJ5cyIsImdvIiwidGFrZV9uIiwic2l6ZSIsInNlZW4iLCJyZXN1bHQiLCJrZXkiLCJrIiwiZDIiLCJrZXlzIiwic3JjIiwiY3N0X2Vycm9yIiwibXNnIiwiY2F0Y2hfZm4iLCJ0cnlfZm4iLCJpc19jbGllbnQiLCJzdG9yZV9yZWdpc3RyeSIsImluaXRfZm4iLCJzdG9yZSIsInN0YXRlIiwic2lnX2QiLCJjYWxsIiwiY2FsbF9hbnkiLCJ0eXBlcyIsImluaXQiLCJkc3QiLCJjb3VudCIsInNyY19pdGVtcyIsImNsYXVzZXMiLCJjIiwiY3N0X1ZNX3Vu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QUFBQTtBQUFBLEVEaDZCMUUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTM2MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBSdW50aW1lIGhlbHBlcnMgZm9yIHRyYW5zcGlsZWQgY29kZS5cblxuICAgIFRoZXNlIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIHRyYW5zcGlsZXIncyBvdXRwdXQgYW5kIHRoZVxuICAgIGZvdW5kYXRpb24gdHlwZXMvcHJpbWl0aXZlcy4gVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHRoZXNlXG4gICAgZnVuY3Rpb25zIGRpcmVjdGx5LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBDYWxsIGEgcmVnaXN0ZXJlZCBwcmltaXRpdmUgYnkgbmFtZS4gKilcbmxldCBwcmltX2NhbGwgbmFtZSBhcmdzID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmIC0+IGYgYXJnc1xuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5rbm93biBwcmltaXRpdmU6IFwiIF4gbmFtZSkpXG5cbigqKiBDb252ZXJ0IGFueSBTWCB2YWx1ZSB0byBhbiBPQ2FtbCBzdHJpbmcgKGludGVybmFsKS4gKilcbmxldCB2YWx1ZV90b19zdHIgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHNcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICB8IE5pbCAtPiBcIlwiXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBrXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxuKCoqIHN4X3RvX3N0cmluZyByZXR1cm5zIGEgdmFsdWUgKFN0cmluZykgZm9yIHRyYW5zcGlsZWQgY29kZS4gKilcbmxldCBzeF90b19zdHJpbmcgdiA9IFN0cmluZyAodmFsdWVfdG9fc3RyIHYpXG5cbigqKiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBoZWxwZXIg4oCUIFtzeF9zdHJdIHRha2VzIGEgbGlzdCBvZiB2YWx1ZXMuICopXG5sZXQgc3hfc3RyIGFyZ3MgPVxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIHZhbHVlX3RvX3N0ciBhcmdzKVxuXG4oKiogQ29udmVydCBhIHZhbHVlIHRvIGEgbGlzdC4gKilcbmxldCBzeF90b19saXN0ID0gZnVuY3Rpb25cbiAgfCBMaXN0IGwgLT4gbFxuICB8IExpc3RSZWYgciAtPiAhclxuICB8IE5pbCAtPiBbXVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuKCoqIENhbGwgYW4gU1ggY2FsbGFibGUgKGxhbWJkYSwgbmF0aXZlIGZuLCBjb250aW51YXRpb24pLiAqKVxubGV0IHN4X2NhbGwgZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgTmF0aXZlRm4gKF8sIGZuKSAtPiBmbiBhcmdzXG4gIHwgVm1DbG9zdXJlIGNsIC0+ICFTeF90eXBlcy5fdm1fY2FsbF9jbG9zdXJlX3JlZiBjbCBhcmdzXG4gIHwgTGFtYmRhIGwgLT5cbiAgICBsZXQgbG9jYWwgPSBTeF90eXBlcy5lbnZfZXh0ZW5kIGwubF9jbG9zdXJlIGluXG4gICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIGxvY2FsIHAgYSkpIGwubF9wYXJhbXMgYXJncztcbiAgICBUaHVuayAobC5sX2JvZHksIGxvY2FsKVxuICB8IENvbnRpbnVhdGlvbiAoaywgXykgLT5cbiAgICBrIChtYXRjaCBhcmdzIHdpdGggeCA6OiBfIC0+IHggfCBbXSAtPiBOaWwpXG4gIHwgXyAtPlxuICAgIGxldCBuYXJncyA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgICBsZXQgYXJnc19wcmV2aWV3ID0gaWYgbmFyZ3MgPSAwIHRoZW4gXCJcIiBlbHNlXG4gICAgICBsZXQgcyA9IFN0cmluZy5jb25jYXQgXCIsIFwiIChMaXN0Lm1hcCAoZnVuIGEgLT4gbGV0IHMgPSBpbnNwZWN0IGEgaW4gaWYgU3RyaW5nLmxlbmd0aCBzID4gNDAgdGhlbiBTdHJpbmcuc3ViIHMgMCA0MCBeIFwiLi5cIiBlbHNlIHMpIGFyZ3MpIGluXG4gICAgICBcIiB3aXRoIGFyZ3M9W1wiIF4gcyBeIFwiXVwiIGluXG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiTm90IGNhbGxhYmxlOiBcIiBeIGluc3BlY3QgZiBeIGFyZ3NfcHJldmlldykpXG5cbigqIEluaXRpYWxpemUgZm9yd2FyZCByZWYgc28gcHJpbWl0aXZlcyBjYW4gY2FsbCBTWCBmdW5jdGlvbnMgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuX3N4X2NhbGxfZm4gOj0gc3hfY2FsbFxuKCogVHJhbXBvbGluZSByZWYgaXMgc2V0IGJ5IHN4X3JlZi5tbCBhZnRlciBpdCdzIGxvYWRlZCAqKVxuXG4oKiogQXBwbHkgYSBmdW5jdGlvbiB0byBhIGxpc3Qgb2YgYXJncy4gKilcbmxldCBzeF9hcHBseSBmIGFyZ3NfbGlzdCA9XG4gIHN4X2NhbGwgZiAoc3hfdG9fbGlzdCBhcmdzX2xpc3QpXG5cbigqKiBNdXRhYmxlIGFwcGVuZCDigJQgYWRkIGl0ZW0gdG8gYSBsaXN0IHJlZiBvciBhY2N1bXVsYXRvci5cbiAgICBJbiB0cmFuc3BpbGVkIGNvZGUsIGxpc3RzIHRoYXQgZ2V0IGFwcGVuZGVkIHRvIGFyZSBtdXRhYmxlIHJlZnMuICopXG5sZXQgc3hfYXBwZW5kX2IgbHN0IGl0ZW0gPVxuICBtYXRjaCBsc3Qgd2l0aFxuICB8IExpc3QgaXRlbXMgLT4gTGlzdCAoaXRlbXMgQCBbaXRlbV0pXG4gIHwgTGlzdFJlZiByIC0+IHIgOj0gIXIgQCBbaXRlbV07IGxzdCAgKCogbXV0YXRlIGluIHBsYWNlLCByZXR1cm4gc2FtZSByZWYgKilcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QsIGdvdCBcIiBeIHR5cGVfb2YgbHN0KSlcblxuKCoqIE11dGFibGUgZGljdC1zZXQg4oCUIHNldCBrZXkgaW4gZGljdCwgcmV0dXJuIHZhbHVlLiAqKVxubGV0IHN4X2RpY3Rfc2V0X2IgZCBrIHYgPVxuICBtYXRjaCBkLCBrIHdpdGhcbiAgfCBEaWN0IHRibCwgU3RyaW5nIGtleSAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGtleSB2OyB2XG4gIHwgRGljdCB0YmwsIEtleXdvcmQga2V5IC0+IEhhc2h0YmwucmVwbGFjZSB0Ymwga2V5IHY7IHZcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1zZXQhOiBleHBlY3RlZCBkaWN0IGFuZCBzdHJpbmcga2V5XCIpXG5cbigqKiBHZXQgZnJvbSBkaWN0IG9yIGxpc3QuICopXG5sZXQgZ2V0X3ZhbCBjb250YWluZXIga2V5ID1cbiAgbWF0Y2ggY29udGFpbmVyLCBrZXkgd2l0aFxuICB8IENla1N0YXRlIHMsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwiY29udHJvbFwiIC0+IHMuY3NfY29udHJvbCB8IFwiZW52XCIgLT4gcy5jc19lbnZcbiAgICAgfCBcImtvbnRcIiAtPiBzLmNzX2tvbnQgfCBcInBoYXNlXCIgLT4gU3RyaW5nIHMuY3NfcGhhc2VcbiAgICAgfCBcInZhbHVlXCIgLT4gcy5jc192YWx1ZSB8IF8gLT4gTmlsKVxuICB8IENla0ZyYW1lIGYsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwidHlwZVwiIC0+IFN0cmluZyBmLmNmX3R5cGUgfCBcImVudlwiIC0+IGYuY2ZfZW52XG4gICAgIHwgXCJuYW1lXCIgLT4gZi5jZl9uYW1lIHwgXCJib2R5XCIgLT4gZi5jZl9ib2R5XG4gICAgIHwgXCJyZW1haW5pbmdcIiAtPiBmLmNmX3JlbWFpbmluZyB8IFwiZlwiIC0+IGYuY2ZfZlxuICAgICB8IFwiYXJnc1wiIC0+IGYuY2ZfYXJncyB8IFwiZXZhbGVkXCIgLT4gZi5jZl9hcmdzXG4gICAgIHwgXCJyZXN1bHRzXCIgLT4gZi5jZl9yZXN1bHRzIHwgXCJyYXctYXJnc1wiIC0+IGYuY2ZfcmVzdWx0c1xuICAgICB8IFwidGhlblwiIC0+IGYuY2ZfYm9keSB8IFwiZWxzZVwiIC0+IGYuY2ZfbmFtZVxuICAgICB8IFwiaG8tdHlwZVwiIC0+IGYuY2ZfZXh0cmEgfCBcInNjaGVtZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcImluZGV4ZWRcIiAtPiBmLmNmX2V4dHJhIHwgXCJ2YWx1ZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcInBoYXNlXCIgLT4gZi5jZl9leHRyYSB8IFwiaGFzLWVmZmVjdHNcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJtYXRjaC12YWxcIiAtPiBmLmNmX2V4dHJhIHwgXCJjdXJyZW50LWl0ZW1cIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJ1cGRhdGUtZm5cIiAtPiBmLmNmX2V4dHJhIHwgXCJoZWFkLW5hbWVcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJlbWl0dGVkXCIgLT4gZi5jZl9leHRyYTIgfCBcImVmZmVjdC1saXN0XCIgLT4gZi5jZl9leHRyYTJcbiAgICAgfCBcImZpcnN0LXJlbmRlclwiIC0+IGYuY2ZfZXh0cmEyIHwgXCJmaWxlXCIgLT4gZi5jZl9lbnZcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBEaWN0IGQsIFN0cmluZyBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IERpY3QgZCwgS2V5d29yZCBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgbiAtPlxuICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IG4pIHdpdGggXyAtPiBOaWwpXG4gIHwgTmlsLCBfIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgfCBfLCBfIC0+IE5pbCAgICAoKiB0eXBlIG1pc21hdGNoIOKGkiBuaWwgKG1hdGNoZXMgSlMvUHl0aG9uIGJlaGF2aW9yKSAqKVxuXG4oKiogUmVnaXN0ZXIgZ2V0IGFzIGEgcHJpbWl0aXZlIG92ZXJyaWRlIOKAlCB0cmFuc3BpbGVkIGNvZGUgY2FsbHMgKGdldCBkIGspLiAqKVxubGV0ICgpID1cbiAgU3hfcHJpbWl0aXZlcy5yZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2M7IGtdIC0+IGdldF92YWwgYyBrXG4gICAgfCBbYzsgazsgZGVmYXVsdF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHYgPSBnZXRfdmFsIGMgayBpblxuICAgICAgICBpZiB2ID0gTmlsIHRoZW4gZGVmYXVsdCBlbHNlIHZcbiAgICAgIHdpdGggXyAtPiBkZWZhdWx0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldDogMi0zIGFyZ3NcIikpXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUHJpbWl0aXZlIGFsaWFzZXMg4oCUIHRvcC1sZXZlbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRyYW5zcGlsZWQgY29kZSAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHByaW1pdGl2ZXMgZGlyZWN0bHkgYnkgdGhlaXIgbWFuZ2xlZFxuICAgIE9DYW1sIG5hbWUuIFRoZXNlIGFsaWFzZXMgZGVsZWdhdGUgdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgc28gdGhlXG4gICAgdHJhbnNwaWxlZCBjb2RlIGNvbXBpbGVzIHdpdGhvdXQgbmVlZGluZyBbcHJpbV9jYWxsXSBldmVyeXdoZXJlLiAqKVxuXG5sZXQgX3ByaW0gbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIG5hbWUgd2l0aFxuICB8IFNvbWUgZiAtPiBmIHwgTm9uZSAtPiAoZnVuIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiTWlzc2luZyBwcmltOiBcIiBeIG5hbWUpKSlcblxuKCogQ29sbGVjdGlvbiBvcHMgKilcbmxldCBmaXJzdCBhcmdzID0gX3ByaW0gXCJmaXJzdFwiIFthcmdzXVxubGV0IHJlc3QgYXJncyA9IF9wcmltIFwicmVzdFwiIFthcmdzXVxubGV0IGxhc3QgYXJncyA9IF9wcmltIFwibGFzdFwiIFthcmdzXVxubGV0IG50aCBjb2xsIGkgPSBfcHJpbSBcIm50aFwiIFtjb2xsOyBpXVxubGV0IGNvbnMgeCBsID0gX3ByaW0gXCJjb25zXCIgW3g7IGxdXG5sZXQgYXBwZW5kIGEgYiA9IF9wcmltIFwiYXBwZW5kXCIgW2E7IGJdXG5sZXQgcmV2ZXJzZSBsID0gX3ByaW0gXCJyZXZlcnNlXCIgW2xdXG5sZXQgZmxhdHRlbiBsID0gX3ByaW0gXCJmbGF0dGVuXCIgW2xdXG5sZXQgY29uY2F0IGEgYiA9IF9wcmltIFwiY29uY2F0XCIgW2E7IGJdXG5sZXQgc2xpY2UgYSBiID0gX3ByaW0gXCJzbGljZVwiIFthOyBiXVxubGV0IGxlbiBhID0gX3ByaW0gXCJsZW5cIiBbYV1cbmxldCBnZXQgYSBiID0gZ2V0X3ZhbCBhIGJcbmxldCBzb3J0JyBhID0gX3ByaW0gXCJzb3J0XCIgW2FdXG5sZXQgcmFuZ2UnIGEgPSBfcHJpbSBcInJhbmdlXCIgW2FdXG5sZXQgdW5pcXVlIGEgPSBfcHJpbSBcInVuaXF1ZVwiIFthXVxubGV0IHppcCBhIGIgPSBfcHJpbSBcInppcFwiIFthOyBiXVxubGV0IHppcF9wYWlycyBhID0gX3ByaW0gXCJ6aXAtcGFpcnNcIiBbYV1cbmxldCB0YWtlIGEgYiA9IF9wcmltIFwidGFrZVwiIFthOyBiXVxubGV0IGRyb3AgYSBiID0gX3ByaW0gXCJkcm9wXCIgW2E7IGJdXG5sZXQgY2h1bmtfZXZlcnkgYSBiID0gX3ByaW0gXCJjaHVuay1ldmVyeVwiIFthOyBiXVxuXG4oKiBQcmVkaWNhdGVzICopXG5sZXQgZW1wdHlfcCBhID0gX3ByaW0gXCJlbXB0eT9cIiBbYV1cbmxldCBuaWxfcCBhID0gX3ByaW0gXCJuaWw/XCIgW2FdXG5sZXQgbnVtYmVyX3AgYSA9IF9wcmltIFwibnVtYmVyP1wiIFthXVxubGV0IHN0cmluZ19wIGEgPSBfcHJpbSBcInN0cmluZz9cIiBbYV1cbmxldCBib29sZWFuX3AgYSA9IF9wcmltIFwiYm9vbGVhbj9cIiBbYV1cbmxldCBsaXN0X3AgYSA9IF9wcmltIFwibGlzdD9cIiBbYV1cbmxldCBkaWN0X3AgYSA9IF9wcmltIFwiZGljdD9cIiBbYV1cbmxldCBzeW1ib2xfcCBhID0gX3ByaW0gXCJzeW1ib2w/XCIgW2FdXG5sZXQga2V5d29yZF9wIGEgPSBfcHJpbSBcImtleXdvcmQ/XCIgW2FdXG5sZXQgY29udGFpbnNfcCBhIGIgPSBfcHJpbSBcImNvbnRhaW5zP1wiIFthOyBiXVxubGV0IGhhc19rZXlfcCBhIGIgPSBfcHJpbSBcImhhcy1rZXk/XCIgW2E7IGJdXG5sZXQgc3RhcnRzX3dpdGhfcCBhIGIgPSBfcHJpbSBcInN0YXJ0cy13aXRoP1wiIFthOyBiXVxubGV0IGVuZHNfd2l0aF9wIGEgYiA9IF9wcmltIFwiZW5kcy13aXRoP1wiIFthOyBiXVxubGV0IHN0cmluZ19jb250YWluc19wIGEgYiA9IF9wcmltIFwic3RyaW5nLWNvbnRhaW5zP1wiIFthOyBiXVxubGV0IG9kZF9wIGEgPSBfcHJpbSBcIm9kZD9cIiBbYV1cbmxldCBldmVuX3AgYSA9IF9wcmltIFwiZXZlbj9cIiBbYV1cbmxldCB6ZXJvX3AgYSA9IF9wcmltIFwiemVybz9cIiBbYV1cblxuKCogU3RyaW5nIG9wcyAqKVxubGV0IHN0cicgYXJncyA9IFN0cmluZyAoc3hfc3RyIGFyZ3MpXG5sZXQgdXBwZXIgYSA9IF9wcmltIFwidXBwZXJcIiBbYV1cbmxldCB1cGNhc2UgYSA9IF9wcmltIFwidXBjYXNlXCIgW2FdXG5sZXQgbG93ZXIgYSA9IF9wcmltIFwibG93ZXJcIiBbYV1cbmxldCBkb3duY2FzZSBhID0gX3ByaW0gXCJkb3duY2FzZVwiIFthXVxubGV0IHRyaW0gYSA9IF9wcmltIFwidHJpbVwiIFthXVxubGV0IHNwbGl0IGEgYiA9IF9wcmltIFwic3BsaXRcIiBbYTsgYl1cbmxldCBqb2luIGEgYiA9IF9wcmltIFwiam9pblwiIFthOyBiXVxubGV0IHJlcGxhY2UgYSBiIGMgPSBfcHJpbSBcInJlcGxhY2VcIiBbYTsgYjsgY11cbmxldCBpbmRleF9vZiBhIGIgPSBfcHJpbSBcImluZGV4LW9mXCIgW2E7IGJdXG5sZXQgc3Vic3RyaW5nIGEgYiBjID0gX3ByaW0gXCJzdWJzdHJpbmdcIiBbYTsgYjsgY11cbmxldCBzdHJpbmdfbGVuZ3RoIGEgPSBfcHJpbSBcInN0cmluZy1sZW5ndGhcIiBbYV1cbmxldCBjaGFyX2Zyb21fY29kZSBhID0gX3ByaW0gXCJjaGFyLWZyb20tY29kZVwiIFthXVxuXG4oKiBEaWN0IG9wcyAqKVxubGV0IGFzc29jIGQgayB2ID0gX3ByaW0gXCJhc3NvY1wiIFtkOyBrOyB2XVxubGV0IGRpc3NvYyBkIGsgPSBfcHJpbSBcImRpc3NvY1wiIFtkOyBrXVxubGV0IG1lcmdlJyBhIGIgPSBfcHJpbSBcIm1lcmdlXCIgW2E7IGJdXG5sZXQga2V5cyBhID0gX3ByaW0gXCJrZXlzXCIgW2FdXG5sZXQgdmFscyBhID0gX3ByaW0gXCJ2YWxzXCIgW2FdXG5sZXQgZGljdF9zZXQgYSBiIGMgPSBfcHJpbSBcImRpY3Qtc2V0IVwiIFthOyBiOyBjXVxubGV0IGRpY3RfZ2V0IGEgYiA9IF9wcmltIFwiZGljdC1nZXRcIiBbYTsgYl1cbmxldCBkaWN0X2hhc19wIGEgYiA9IF9wcmltIFwiZGljdC1oYXM/XCIgW2E7IGJdXG5sZXQgZGljdF9kZWxldGUgYSBiID0gX3ByaW0gXCJkaWN0LWRlbGV0ZSFcIiBbYTsgYl1cblxuKCogTWF0aCAqKVxubGV0IGFicycgYSA9IF9wcmltIFwiYWJzXCIgW2FdXG5sZXQgc3FydCcgYSA9IF9wcmltIFwic3FydFwiIFthXVxubGV0IHBvdycgYSBiID0gX3ByaW0gXCJwb3dcIiBbYTsgYl1cbmxldCBmbG9vcicgYSA9IF9wcmltIFwiZmxvb3JcIiBbYV1cbmxldCBjZWlsJyBhID0gX3ByaW0gXCJjZWlsXCIgW2FdXG5sZXQgcm91bmQnIGEgPSBfcHJpbSBcInJvdW5kXCIgW2FdXG5sZXQgbWluJyBhIGIgPSBfcHJpbSBcIm1pblwiIFthOyBiXVxubGV0IG1heCcgYSBiID0gX3ByaW0gXCJtYXhcIiBbYTsgYl1cbmxldCBjbGFtcCBhIGIgYyA9IF9wcmltIFwiY2xhbXBcIiBbYTsgYjsgY11cbmxldCBwYXJzZV9pbnQgYSA9IF9wcmltIFwicGFyc2UtaW50XCIgW2FdXG5sZXQgcGFyc2VfZmxvYXQgYSA9IF9wcmltIFwicGFyc2UtZmxvYXRcIiBbYV1cblxuKCogTWlzYyAqKVxubGV0IGVycm9yIG1zZyA9IHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgbXNnKSlcblxuKCogaW5zcGVjdCB3cmFwcGVyIOKAlCByZXR1cm5zIFN0cmluZyB2YWx1ZSBpbnN0ZWFkIG9mIE9DYW1sIHN0cmluZyAqKVxubGV0IGluc3BlY3QgdiA9IFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KVxubGV0IGFwcGx5JyBmIGFyZ3MgPSBzeF9hcHBseSBmIGFyZ3NcbmxldCBpZGVudGljYWxfcCBhIGIgPSBfcHJpbSBcImlkZW50aWNhbD9cIiBbYTsgYl1cbmxldCBfaXNfc3ByZWFkX3ByaW0gYSA9IF9wcmltIFwic3ByZWFkP1wiIFthXVxubGV0IHNwcmVhZF9hdHRycyBhID0gX3ByaW0gXCJzcHJlYWQtYXR0cnNcIiBbYV1cbmxldCBtYWtlX3NwcmVhZCBhID0gX3ByaW0gXCJtYWtlLXNwcmVhZFwiIFthXVxuXG4oKiBTY29wZSBwcmltaXRpdmVzIOKAlCBkZWxlZ2F0ZSB0byBzeF9yZWYucHkncyBzaGFyZWQgc2NvcGUgc3RhY2tzICopXG5sZXQgc3hfY29sbGVjdCBhIGIgPSBwcmltX2NhbGwgXCJjb2xsZWN0IVwiIFthOyBiXVxubGV0IHN4X2NvbGxlY3RlZCBhID0gcHJpbV9jYWxsIFwiY29sbGVjdGVkXCIgW2FdXG5sZXQgc3hfY2xlYXJfY29sbGVjdGVkIGEgPSBwcmltX2NhbGwgXCJjbGVhci1jb2xsZWN0ZWQhXCIgW2FdXG5sZXQgc3hfZW1pdCBhIGIgPSBwcmltX2NhbGwgXCJlbWl0IVwiIFthOyBiXVxubGV0IHN4X2VtaXR0ZWQgYSA9IHByaW1fY2FsbCBcImVtaXR0ZWRcIiBbYV1cbmxldCBzeF9jb250ZXh0IGEgYiA9IHByaW1fY2FsbCBcImNvbnRleHRcIiBbYTsgYl1cblxuKCogVHJhbXBvbGluZSDigJQgZm9yd2FyZC1kZWNsYXJlZCBpbiBzeF9yZWYubWwsIGRlbGVnYXRlcyB0byBDRUsgZXZhbF9leHByICopXG4oKiBUaGlzIGlzIGEgc3R1YjsgdGhlIHJlYWwgdHJhbXBvbGluZSBpcyB3aXJlZCB1cCBpbiBzeF9yZWYubWwgYWZ0ZXIgZXZhbF9leHByIGlzIGRlZmluZWQgKilcbmxldCB0cmFtcG9saW5lIHYgPSB2XG5cbigqIFZhbHVlLXJldHVybmluZyB0eXBlIHByZWRpY2F0ZXMg4oCUIHRoZSB0cmFuc3BpbGVkIGNvZGUgcGFzc2VzIHRoZXNlIHRocm91Z2hcbiAgIHN4X3RydXRoeSwgc28gdGhleSBuZWVkIHRvIHJldHVybiBCb29sLCBub3QgT0NhbWwgYm9vbC4gKilcbigqIHR5cGVfb2YgcmV0dXJucyB2YWx1ZSwgbm90IHN0cmluZyAqKVxubGV0IHR5cGVfb2YgdiA9IFN0cmluZyAoU3hfdHlwZXMudHlwZV9vZiB2KVxuXG4oKiBFbnYgb3BlcmF0aW9ucyDigJQgYWNjZXB0IEVudi13cmFwcGVkIHZhbHVlcyBhbmQgdmFsdWUga2V5cy5cbiAgIFRoZSB0cmFuc3BpbGVkIENFSyBtYWNoaW5lIHN0b3JlcyBlbnZzIGluIGRpY3RzIGFzIEVudiB2YWx1ZXMuICopXG5sZXQgdW53cmFwX2VudiA9IGZ1bmN0aW9uXG4gIHwgRW52IGUgLT4gZVxuICB8IERpY3QgZCAtPlxuICAgICgqIERpY3QgdXNlZCBhcyBlbnYg4oCUIHdyYXAgaXQuIE5lZWRlZCBieSBhZGFwdGVyLWh0bWwuc3ggd2hpY2hcbiAgICAgICBwYXNzZXMgZGljdHMgYXMgZW52IGFyZ3MgKGUuZy4gZW1wdHkge30gYXMgY2FsbGVyIGVudikuICopXG4gICAgbGV0IGUgPSBTeF90eXBlcy5tYWtlX2VudiAoKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIGUgayB2KSkgZDtcbiAgICBlXG4gIHwgTmlsIC0+XG4gICAgU3hfdHlwZXMubWFrZV9lbnYgKClcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGVudiwgZ290IFwiIF4gU3hfdHlwZXMudHlwZV9vZiB2KSlcblxubGV0IGVudl9oYXMgZSBuYW1lID0gQm9vbCAoU3hfdHlwZXMuZW52X2hhcyAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpKVxubGV0IGVudl9nZXQgZSBuYW1lID0gU3hfdHlwZXMuZW52X2dldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpXG5sZXQgZW52X2JpbmQgZSBuYW1lIHYgPSBTeF90eXBlcy5lbnZfYmluZCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcbmxldCBlbnZfc2V0IGUgbmFtZSB2ID0gU3hfdHlwZXMuZW52X3NldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcblxubGV0IG1ha2VfZW52ICgpID0gRW52IChTeF90eXBlcy5tYWtlX2VudiAoKSlcbmxldCBlbnZfZXh0ZW5kIGUgPSBFbnYgKFN4X3R5cGVzLmVudl9leHRlbmQgKHVud3JhcF9lbnYgZSkpXG5sZXQgZW52X21lcmdlIGEgYiA9IEVudiAoU3hfdHlwZXMuZW52X21lcmdlICh1bndyYXBfZW52IGEpICh1bndyYXBfZW52IGIpKVxuXG4oKiBzZXRfbGFtYmRhX25hbWUgd3JhcHBlciDigJQgYWNjZXB0cyB2YWx1ZSwgZXh0cmFjdHMgc3RyaW5nICopXG5sZXQgc2V0X2xhbWJkYV9uYW1lIGwgbiA9IFN4X3R5cGVzLnNldF9sYW1iZGFfbmFtZSBsICh2YWx1ZV90b19zdHIgbilcblxubGV0IGlzX25pbCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfbmlsIHYpXG5sZXQgaXNfdGh1bmsgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX3RodW5rIHYpXG5sZXQgaXNfbGFtYmRhIHYgPSBCb29sIChTeF90eXBlcy5pc19sYW1iZGEgdilcbmxldCBpc19jb21wb25lbnQgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2NvbXBvbmVudCB2KVxubGV0IGlzX2lzbGFuZCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfaXNsYW5kIHYpXG5sZXQgaXNfbWFjcm8gdiA9IEJvb2wgKFN4X3R5cGVzLmlzX21hY3JvIHYpXG5sZXQgaXNfc2lnbmFsIHYgPSBCb29sIChTeF90eXBlcy5pc19zaWduYWwgdilcbmxldCBpc19jYWxsYWJsZSB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfY2FsbGFibGUgdilcbmxldCBpc19pZGVudGljYWwgYSBiID0gQm9vbCAoYSA9PSBiKVxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gQm9vbCAoU3hfcHJpbWl0aXZlcy5pc19wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKSlcbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKVxubGV0IGlzX3NwcmVhZCB2ID0gbWF0Y2ggdiB3aXRoIFNwcmVhZCBfIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiBTdHVicyBmb3IgZnVuY3Rpb25zIGRlZmluZWQgaW4gc3hfcmVmLm1sIOKAlCByZXNvbHZlZCBhdCBsaW5rIHRpbWUgKilcbigqIFRoZXNlIGFyZSBmb3J3YXJkLWRlY2xhcmVkIGhlcmU7IHN4X3JlZi5tbCBkZWZpbmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb25zICopXG5cbigqIHN0cmlwLXByZWZpeCAqKVxuKCogU3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMg4oCUIGRlZmluZWQgaW4gc3hfcmVmLm1sIGJ1dFxuICAgc29tZXRpbWVzIHJlZmVyZW5jZWQgYmVmb3JlIHRoZWlyIGRlZmluaXRpb24gdmlhIGZvcndhcmQgY2FsbHMuXG4gICBUaGVzZSBnZXQgb3ZlcnJpZGRlbiBieSB0aGUgYWN0dWFsIHRyYW5zcGlsZWQgZGVmaW5pdGlvbnMuICopXG5cbmxldCBtYXBfaW5kZXhlZCBmbiBjb2xsID1cbiAgTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB4IC0+IHN4X2NhbGwgZm4gW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyB4XSkgKHN4X3RvX2xpc3QgY29sbCkpXG5cbmxldCBtYXBfZGljdCBmbiBkID1cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgRGljdCB0YmwgLT5cbiAgICBsZXQgcmVzdWx0ID0gSGFzaHRibC5jcmVhdGUgKEhhc2h0YmwubGVuZ3RoIHRibCkgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBrIChzeF9jYWxsIGZuIFtTdHJpbmcgazsgdl0pKSB0Ymw7XG4gICAgRGljdCByZXN1bHRcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwLWRpY3Q6IGV4cGVjdGVkIGRpY3RcIilcblxubGV0IGZvcl9lYWNoIGZuIGNvbGwgPVxuICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGlnbm9yZSAoc3hfY2FsbCBmbiBbeF0pKSAoc3hfdG9fbGlzdCBjb2xsKTtcbiAgTmlsXG5cbmxldCBmb3JfZWFjaF9pbmRleGVkIGZuIGNvbGwgPVxuICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoc3hfY2FsbCBmbiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgKHN4X3RvX2xpc3QgY29sbCk7XG4gIE5pbFxuXG4oKiBDb250aW51YXRpb24gc3VwcG9ydCAqKVxubGV0IGNvbnRpbnVhdGlvbl9wIHYgPSBtYXRjaCB2IHdpdGggQ29udGludWF0aW9uIChfLCBfKSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxubGV0IG1ha2VfY2VrX2NvbnRpbnVhdGlvbiBjYXB0dXJlZCByZXN0X2tvbnQgPVxuICBsZXQgZGF0YSA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGRhdGEgXCJjYXB0dXJlZFwiIGNhcHR1cmVkO1xuICBIYXNodGJsLnJlcGxhY2UgZGF0YSBcInJlc3Qta29udFwiIHJlc3Rfa29udDtcbiAgQ29udGludWF0aW9uICgoZnVuIHYgLT4gdiksIFNvbWUgZGF0YSlcblxubGV0IGNvbnRpbnVhdGlvbl9kYXRhIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBDb250aW51YXRpb24gKF8sIFNvbWUgZCkgLT4gRGljdCBkXG4gIHwgQ29udGludWF0aW9uIChfLCBOb25lKSAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBjb250aW51YXRpb25cIilcblxuKCogRHluYW1pYyB3aW5kIOKAlCBzaW1wbGlmaWVkIGZvciBPQ2FtbCAobm8gYXN5bmMpICopXG5sZXQgZHluYW1pY193aW5kX2NhbGwgYmVmb3JlIGJvZHkgYWZ0ZXIgX2VudiA9XG4gIGlnbm9yZSAoc3hfY2FsbCBiZWZvcmUgW10pO1xuICBsZXQgcmVzdWx0ID0gc3hfY2FsbCBib2R5IFtdIGluXG4gIGlnbm9yZSAoc3hfY2FsbCBhZnRlciBbXSk7XG4gIHJlc3VsdFxuXG4oKiBTY29wZSBzdGFjayDigJQgYWxsIGRlbGVnYXRlZCB0byBwcmltaXRpdmVzIHJlZ2lzdGVyZWQgaW4gc3hfc2VydmVyLm1sICopXG5sZXQgc2NvcGVfcHVzaCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtcHVzaCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgc2NvcGVfcG9wIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1wb3AhXCIgW25hbWVdXG5sZXQgc2NvcGVfcGVlayBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtcGVla1wiIFtuYW1lXVxubGV0IHNjb3BlX2VtaXQgbmFtZSB2YWx1ZSA9IHByaW1fY2FsbCBcInNjb3BlLWVtaXQhXCIgW25hbWU7IHZhbHVlXVxubGV0IHByb3ZpZGVfcHVzaCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtcHVzaCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgcHJvdmlkZV9wb3AgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLXBvcCFcIiBbbmFtZV1cblxuKCogQ3VzdG9tIHNwZWNpYWwgZm9ybXMgcmVnaXN0cnkg4oCUIG11dGFibGUgZGljdCAqKVxubGV0IGN1c3RvbV9zcGVjaWFsX2Zvcm1zID0gRGljdCAoSGFzaHRibC5jcmVhdGUgNClcblxuKCogcmVnaXN0ZXItc3BlY2lhbC1mb3JtISDigJQgYWRkIGEgaGFuZGxlciB0byB0aGUgY3VzdG9tIHJlZ2lzdHJ5ICopXG5sZXQgcmVnaXN0ZXJfc3BlY2lhbF9mb3JtIG5hbWUgaGFuZGxlciA9XG4gIChtYXRjaCBjdXN0b21fc3BlY2lhbF9mb3JtcyB3aXRoXG4gICB8IERpY3QgdGJsIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgKHZhbHVlX3RvX3N0ciBuYW1lKSBoYW5kbGVyOyBoYW5kbGVyXG4gICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjdXN0b21fc3BlY2lhbF9mb3JtcyBub3QgYSBkaWN0XCIpKVxuXG4oKiBSZW5kZXIgY2hlY2svZm4gaG9va3Mg4oCUIG5pbCBieSBkZWZhdWx0LCBzZXQgYnkgcGxhdGZvcm0gaWYgbmVlZGVkICopXG5sZXQgcmVuZGVyX2NoZWNrID0gTmlsXG5sZXQgcmVuZGVyX2ZuID0gTmlsXG5cbigqIGlzLWVsc2UtY2xhdXNlPyDigJQgY2hlY2sgaWYgYSBjb25kL2Nhc2UgdGVzdCBpcyBhbiBlbHNlIG1hcmtlciAqKVxubGV0IGlzX2Vsc2VfY2xhdXNlIHYgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBLZXl3b3JkIGsgLT4gQm9vbCAoayA9IFwiZWxzZVwiIHx8IGsgPSBcImRlZmF1bHRcIilcbiAgfCBTeW1ib2wgcyAtPiBCb29sIChzID0gXCJlbHNlXCIgfHwgcyA9IFwiZGVmYXVsdFwiKVxuICB8IEJvb2wgdHJ1ZSAtPiBCb29sIHRydWVcbiAgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCogU2lnbmFsIGFjY2Vzc29ycyAqKVxubGV0IHNpZ25hbF92YWx1ZSBzID0gbWF0Y2ggcyB3aXRoXG4gIHwgU2lnbmFsIHNpZycgLT4gc2lnJy5zX3ZhbHVlXG4gIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ2YWx1ZVwiIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgc2lnbmFsXCIpXG5sZXQgc2lnbmFsX3NldF92YWx1ZSBzIHYgPSBtYXRjaCBzIHdpdGggU2lnbmFsIHNpZycgLT4gc2lnJy5zX3ZhbHVlIDwtIHY7IHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgc2lnbmFsXCIpXG5sZXQgc2lnbmFsX3N1YnNjcmliZXJzIHMgPSBtYXRjaCBzIHdpdGggU2lnbmFsIHNpZycgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBfIC0+IE5pbCkgc2lnJy5zX3N1YnNjcmliZXJzKSB8IF8gLT4gTGlzdCBbXVxubGV0IHNpZ25hbF9hZGRfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSAhciBAIFtmXTsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0UmVmIChyZWYgKGl0ZW1zIEAgW2ZdKSkpOyBOaWxcbiAgICAgfCBfIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdFJlZiAocmVmIFtmXSkpOyBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IHNpZ25hbF9yZW1vdmVfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSAhcjsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSBpdGVtcykpOyBOaWxcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxuXG5sZXQgc2lnbmFsX2RlcHMgcyA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZGVwc1wiIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IExpc3QgW10pXG4gIHwgXyAtPiBMaXN0IFtdXG5cbmxldCBzaWduYWxfc2V0X2RlcHMgcyBkID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCB0YmwgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBcImRlcHNcIiBkOyBOaWxcbiAgfCBfIC0+IE5pbFxuXG5sZXQgbm90aWZ5X3N1YnNjcmliZXJzIHMgPVxuICBsZXQgc3VicyA9IG1hdGNoIHMgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgICB8IFNvbWUgKExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gaXRlbXNcbiAgICAgICB8IF8gLT4gW10pXG4gICAgfCBfIC0+IFtdXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIGYgLT4gaWdub3JlIChzeF9jYWxsIGYgW10pKSBzdWJzO1xuICBOaWxcblxubGV0IGZsdXNoX3N1YnNjcmliZXJzIF9zID0gTmlsXG5sZXQgZGlzcG9zZV9jb21wdXRlZCBfcyA9IE5pbFxuXG4oKiBJc2xhbmQgc2NvcGUgc3R1YnMg4oCUIGFjY2VwdCBib3RoIGJhcmUgT0NhbWwgZm5zIGFuZCBOYXRpdmVGbiB2YWx1ZXNcbiAgIGZyb20gdHJhbnNwaWxlZCBjb2RlIChOYXRpdmVGbiB3cmFwcGluZyBmb3IgdmFsdWUtc3RvcmFibGUgbGFtYmRhcykuICopXG5sZXQgd2l0aF9pc2xhbmRfc2NvcGUgX3JlZ2lzdGVyX2ZuIGJvZHlfZm4gPVxuICBtYXRjaCBib2R5X2ZuIHdpdGhcbiAgfCBOYXRpdmVGbiAoXywgZikgLT4gZiBbXVxuICB8IF8gLT4gTmlsXG5sZXQgcmVnaXN0ZXJfaW5fc2NvcGUgX2Rpc3Bvc2VfZm4gPSBOaWxcblxuKCogQ29tcG9uZW50IHR5cGUgYW5ub3RhdGlvbiBzdHViICopXG5sZXQgY29tcG9uZW50X3NldF9wYXJhbV90eXBlc19iIF9jb21wIF90eXBlcyA9IE5pbFxuXG4oKiBQYXJzZSBrZXl3b3JkIGFyZ3MgZnJvbSBhIGNhbGwg4oCUIHRoaXMgaXMgZGVmaW5lZCBpbiBldmFsdWF0b3Iuc3gsXG4gICB0aGUgdHJhbnNwaWxlZCB2ZXJzaW9uIHdpbGwgb3ZlcnJpZGUgdGhpcyBzdHViLiAqKVxuKCogRm9yd2FyZC1yZWZlcmVuY2Ugc3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMgdXNlZCBiZWZvcmUgZGVmaW5pdGlvbiAqKVxubGV0IHBhcnNlX2NvbXBfcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWw7IEJvb2wgZmFsc2VdXG5sZXQgcGFyc2VfbWFjcm9fcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWxdXG5cbmxldCBwYXJzZV9rZXl3b3JkX2FyZ3MgX3Jhd19hcmdzIF9lbnYgPVxuICAoKiBTdHViIOKAlCB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBpcyB0cmFuc3BpbGVkIGZyb20gZXZhbHVhdG9yLnN4ICopXG4gIExpc3QgW0RpY3QgKEhhc2h0YmwuY3JlYXRlIDApOyBMaXN0IFtdXVxuXG4oKiBNYWtlIGhhbmRsZXIvcXVlcnkvYWN0aW9uL3BhZ2UgZGVmIHN0dWJzICopXG5sZXQgbWFrZV9oYW5kbGVyX2RlZiBuYW1lIHBhcmFtcyBib2R5IF9lbnYgPSBEaWN0IChsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJ0eXBlXCIgKFN0cmluZyBcImhhbmRsZXJcIik7IEhhc2h0YmwucmVwbGFjZSBkIFwibmFtZVwiIG5hbWU7IEhhc2h0YmwucmVwbGFjZSBkIFwicGFyYW1zXCIgcGFyYW1zOyBIYXNodGJsLnJlcGxhY2UgZCBcImJvZHlcIiBib2R5OyBkKVxubGV0IG1ha2VfcXVlcnlfZGVmIG5hbWUgcGFyYW1zIGJvZHkgX2VudiA9IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52XG5sZXQgbWFrZV9hY3Rpb25fZGVmIG5hbWUgcGFyYW1zIGJvZHkgX2VudiA9IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52XG5sZXQgbWFrZV9wYWdlX2RlZiBuYW1lIF9vcHRzID0gRGljdCAobGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgXCJwYWdlXCIpOyBIYXNodGJsLnJlcGxhY2UgZCBcIm5hbWVcIiBuYW1lOyBkKVxuXG4oKiBzZi1kZWYqIHN0dWJzIOKAlCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWYtZm9ybXMsIG5vdCBpbiB0aGUgU1ggc3BlYyAqKVxubGV0IHNmX2RlZmhhbmRsZXIgYXJncyBlbnYgPVxuICBsZXQgbmFtZSA9IGZpcnN0IGFyZ3MgaW4gbGV0IHJlc3RfYXJncyA9IHJlc3QgYXJncyBpblxuICBtYWtlX2hhbmRsZXJfZGVmIG5hbWUgKGZpcnN0IHJlc3RfYXJncykgKG50aCByZXN0X2FyZ3MgKE51bWJlciAxLjApKSBlbnZcbmxldCBzZl9kZWZxdWVyeSBhcmdzIGVudiA9IHNmX2RlZmhhbmRsZXIgYXJncyBlbnZcbmxldCBzZl9kZWZhY3Rpb24gYXJncyBlbnYgPSBzZl9kZWZoYW5kbGVyIGFyZ3MgZW52XG5sZXQgc2ZfZGVmcGFnZSBhcmdzIF9lbnYgPVxuICBsZXQgbmFtZSA9IGZpcnN0IGFyZ3MgaW4gbWFrZV9wYWdlX2RlZiBuYW1lIChyZXN0IGFyZ3MpXG5cbmxldCBzdHJpcF9wcmVmaXggcyBwcmVmaXggPVxuICBtYXRjaCBzLCBwcmVmaXggd2l0aFxuICB8IFN0cmluZyBzLCBTdHJpbmcgcCAtPlxuICAgIGxldCBwbCA9IFN0cmluZy5sZW5ndGggcCBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA+PSBwbCAmJiBTdHJpbmcuc3ViIHMgMCBwbCA9IHBcbiAgICB0aGVuIFN0cmluZyAoU3RyaW5nLnN1YiBzIHBsIChTdHJpbmcubGVuZ3RoIHMgLSBwbCkpXG4gICAgZWxzZSBTdHJpbmcgc1xuICB8IF8gLT4gc1xuXG4oKiBkZWJ1Z19sb2cg4oCUIG5vLW9wIGluIHByb2R1Y3Rpb24sIHVzZWQgYnkgQ0VLIGV2YWx1YXRvciBmb3IgY29tcG9uZW50IHdhcm5pbmdzICopXG5sZXQgZGVidWdfbG9nIF8gXyA9IE5pbFxuXG4oKiBtdXRhYmxlX2xpc3Qg4oCUIG11dGFibGUgbGlzdCBmb3IgYnl0ZWNvZGUgY29tcGlsZXIgcG9vbCBlbnRyaWVzICopXG5sZXQgbXV0YWJsZV9saXN0ICgpID0gTGlzdFJlZiAocmVmIFtdKVxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlN4X3R5cGVzIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9GbG9hdCIsIlN0ZGxpYl9QcmludGYiLCJwcmltX2NhbGwiLCJuYW1lIiwiYXJncyIsIm1hdGNoIiwiY3N0IiwidmFsdWVfdG9fc3RyIiwidiIsIm4iLCJzIiwic3hfdG9fc3RyaW5nIiwic3hfc3RyIiwic3hfdG9fbGlzdCIsImwiLCJyIiwic3hfY2FsbCIsImxvY2FsIiwicCIsImEiLCJrIiwieCIsImZuIiwiY2wiLCJuYXJncyIsImFyZ3NfcHJldmlldyIsInN4X2FwcGx5IiwiYXJnc19saXN0Iiwic3hfYXBwZW5kX2IiLCJsc3QiLCJpdGVtIiwiaXRlbXMiLCJzeF9kaWN0X3NldF9iIiwiZCIsInRibCIsImtleSIsImNzdF9ib2R5IiwiY3N0X2Vsc2UiLCJjc3RfZW1pdHRlZCIsImNzdF9uYW1lIiwiY3N0X3R5cGUiLCJjc3RfdmFsdWUiLCJnZXRfdmFsIiwiY29udGFpbmVyIiwiY3N0X2VudiIsImNzdF9waGFzZSIsInN3aXRjaCQiLCJleG4iLCJjIiwiZGVmYXVsdCQiLCJwcmltIiwicGFyYW0iLCJmaXJzdCIsInJlc3QiLCJsYXN0IiwibnRoIiwiY29sbCIsImkiLCJjb25zIiwiYXBwZW5kIiwiYiIsInJldmVyc2UiLCJmbGF0dGVuIiwiY29uY2F0Iiwic2xpY2UiLCJsZW4iLCJnZXQiLCJzb3J0IiwicmFuZ2UiLCJ1bmlxdWUiLCJ6aXAiLCJ6aXBfcGFpcnMiLCJ0YWtlIiwiZHJvcCIsImNodW5rX2V2ZXJ5IiwiZW1wdHlfcCIsIm5pbF9wIiwibnVtYmVyX3AiLCJzdHJpbmdfcCIsImJvb2xlYW5fcCIsImxpc3RfcCIsImRpY3RfcCIsInN5bWJvbF9wIiwia2V5d29yZF9wIiwiY29udGFpbnNfcCIsImhhc19rZXlfcCIsInN0YXJ0c193aXRoX3AiLCJlbmRzX3dpdGhfcCIsInN0cmluZ19jb250YWluc19wIiwib2RkX3AiLCJldmVuX3AiLCJ6ZXJvX3AiLCJzdHIiLCJ1cHBlciIsInVwY2FzZSIsImxvd2VyIiwiZG93bmNhc2UiLCJ0cmltIiwic3BsaXQiLCJqb2luIiwicmVwbGFjZSIsImluZGV4X29mIiwic3Vic3RyaW5nIiwic3RyaW5nX2xlbmd0aCIsImNoYXJfZnJvbV9jb2RlIiwiYXNzb2MiLCJkaXNzb2MiLCJtZXJnZSIsImtleXMiLCJ2YWxzIiwiZGljdF9zZXQiLCJkaWN0X2dldCIsImRpY3RfaGFzX3AiLCJkaWN0X2RlbGV0ZSIsImFicyIsInNxcnQiLCJwb3ciLCJmbG9vciIsImNlaWwiLCJyb3VuZCIsIm1pbiIsIm1heCIsImNsYW1wIiwicGFyc2VfaW50IiwicGFyc2VfZmxvYXQiLCJlcnJvciIsIm1zZyIsImluc3BlY3QiLCJhcHBseSIsImlkZW50aWNhbF9wIiwiaXNfc3ByZWFkX3ByaW0iLCJzcHJlYWRfYXR0cnMiLCJtYWtlX3NwcmVhZCIsInN4X2NvbGxlY3QiLCJzeF9jb2xsZWN0ZWQiLCJzeF9jbGVhcl9jb2xsZWN0ZWQiLCJzeF9lbWl0Iiwic3hfZW1pdHRlZCIsInN4X2NvbnRleHQiLCJ0cmFtcG9saW5lIiwidHlwZV9vZiIsInVud3JhcF9lbnYiLCJlIiwiZW52X2hhcyIsImVudl9nZXQiLCJlbnZfYmluZCIsImVudl9zZXQiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJlbnZfbWVyZ2UiLCJzZXRfbGFtYmRhX25hbWUiLCJpc19uaWwiLCJpc190aHVuayIsImlzX2xhbWJkYSIsImlzX2NvbXBvbmVudCIsImlzX2lzbGFuZCIsImlzX21hY3JvIiwiaXNfc2lnbmFsIiwiaXNfY2FsbGFibGUiLCJpc19pZGVudGljYWwiLCJpc19wcmltaXRpdmUiLCJnZXRfcHJpbWl0aXZlIiwiaXNfc3ByZWFkIiwibWFwX2luZGV4ZWQiLCJtYXBfZGljdCIsInJlc3VsdCIsImZvcl9lYWNoIiwiZm9yX2VhY2hfaW5kZXhlZCIsImNvbnRpbnVhdGlvbl9wIiwibWFrZV9jZWtfY29udGludWF0aW9uIiwiY2FwdHVyZWQiLCJyZXN0X2tvbnQiLCJkYXRhIiwiY29udGludWF0aW9uX2RhdGEiLCJkeW5hbWljX3dpbmRfY2FsbCIsImJlZm9yZSIsImJvZHkiLCJhZnRlciIsImVudiIsImNzdF9zY29wZV9wdXNoIiwic2NvcGVfcHVzaCIsInZhbHVlIiwiY3N0X3Njb3BlX3BvcCIsInNjb3BlX3BvcCIsInNjb3BlX3BlZWsiLCJzY29wZV9lbWl0IiwicHJvdmlkZV9wdXNoIiwicHJvdmlkZV9wb3AiLCJjdXN0b21fc3BlY2lhbF9mb3JtcyIsInJlZ2lzdGVyX3NwZWNpYWxfZm9ybSIsImhhbmRsZXIiLCJpc19lbHNlX2NsYXVzZSIsImNzdF9kZWZhdWx0IiwiY3N0X25vdF9hX3NpZ25hbCIsInNpZ25hbF92YWx1ZSIsInNpZyIsInNpZ25hbF9zZXRfdmFsdWUiLCJzaWduYWxfc3Vic2NyaWJlcnMiLCJjc3Rfc3Vic2NyaWJlcnMiLCJzaWduYWxfYWRkX3N1Yl9iIiwic2lnbmFsX3JlbW92ZV9zdWJfYiIsImNzdF9kZXBzIiwic2lnbmFsX2RlcHMiLCJzaWduYWxfc2V0X2RlcHMiLCJub3RpZnlfc3Vic2NyaWJlcnMiLCJzdWJzIiwiZmx1c2hfc3Vic2NyaWJlcnMiLCJkaXNwb3NlX2NvbXB1dGVkIiwid2l0aF9pc2xhbmRfc2NvcGUiLCJyZWdpc3Rlcl9mbiIsImJvZHlfZm4iLCJyZWdpc3Rlcl9pbl9zY29wZSIsImRpc3Bvc2VfZm4iLCJjb21wb25lbnRfc2V0X3BhcmFtX3R5cGVzX2IiLCJjb21wIiwidHlwZXMiLCJwYXJzZV9jb21wX3BhcmFtcyIsInBhcmFtcyIsInBhcnNlX21hY3JvX3BhcmFtcyIsInBhcnNlX2tleXdvcmRfYXJncyIsInJhd19hcmdzIiwibWFrZV9oYW5kbGVyX2RlZiIsIm1ha2VfcXVlcnlfZGVmIiwibWFrZV9hY3Rpb25fZGVmIiwibWFrZV9wYWdlX2RlZiIsIm9wdHMiLCJzZl9kZWZoYW5kbGVyIiwicmVzdF9hcmdzIiwic2ZfZGVmcXVlcnkiLCJzZl9kZWZhY3Rpb24iLCJzZl9kZWZwYWdlIiwic3RyaXBfcHJlZml4IiwicHJlZml4IiwicGwiLCJkZWJ1Z19sb2ciLCJtdXRhYmxlX2xpc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxZQUFBQyxVQUFBQyxNQUFBQztBQUFBQSxRQUFBQyxRQ1VRO0FBQUEsSUFBOEMsY0FBQWhCLElBQUEsVUFDeEMsMEJBQytDO0FBQUEsWUFBL0I7QUFBQSxJQUE4QjtBQUFBLEdBQUM7QUFBQSxPQUFBaUIsTURaN0Q7QUFBQSxZQUFBQyxhQUFBQztBQUFBQSxJQ2VtQiwwQkFPUjtBQUFBLElBUFE7QUFBQTtBQUFBLHFDQVVEO0FBQUE7QUFBQSxXQUFBQyxJQVZDO0FBQUEsT0FHWjtBQUFBLGlCQUF3QjtBQUFBLGlCQUN0Qiw2Q0FNUztBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQUFDLElBVkM7QUFBQSxlQVVWLGlDQUFTO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGFBQUFILEdBR1UsMkJBQWdC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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURyVmxEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzAzMTEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3JlZi5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBTWCBzcGVjIGJ5IGhvc3RzL29jYW1sL2Jvb3RzdHJhcC5weSAqKVxuKCogRG8gbm90IGVkaXQg4oCUIHJlZ2VuZXJhdGUgd2l0aDogcHl0aG9uMyBob3N0cy9vY2FtbC9ib290c3RyYXAucHkgKilcblxuW0BAQHdhcm5pbmcgXCItMjYtMjdcIl1cblxub3BlbiBTeF90eXBlc1xub3BlbiBTeF9ydW50aW1lXG5cbigqIFRyYW1wb2xpbmUg4oCUIGZvcndhcmQgcmVmLCByZXNvbHZlZCBhZnRlciBldmFsX2V4cHIgaXMgZGVmaW5lZC4gKilcbmxldCB0cmFtcG9saW5lX2ZuIDogKHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biB2IC0+IHYpXG5sZXQgdHJhbXBvbGluZSB2ID0gIXRyYW1wb2xpbmVfZm4gdlxuXG5cblxuKCogPT09IE11dGFibGUgc3RhdGUgZm9yIHN0cmljdCBtb2RlID09PSAqKVxuKCogVGhlc2UgYXJlIGRlZmluZWQgYXMgdG9wLWxldmVsIHJlZnMgYmVjYXVzZSB0aGUgdHJhbnNwaWxlciBjYW5ub3QgaGFuZGxlXG4gICBnbG9iYWwgc2V0ISBtdXRhdGlvbiAoaXQgY3JlYXRlcyBsb2NhbCByZWZzIHRoYXQgc2hhZG93IHRoZSBnbG9iYWwpLiAqKVxubGV0IF9zdHJpY3RfcmVmID0gcmVmIChCb29sIGZhbHNlKVxubGV0IF9wcmltX3BhcmFtX3R5cGVzX3JlZiA9IHJlZiBOaWxcblxuKCogSklUIGNhbGwgaG9vayDigJQgY2VrX2NhbGwgY2hlY2tzIHRoaXMgYmVmb3JlIENFSyBkaXNwYXRjaCBmb3IgbmFtZWRcbiAgIGxhbWJkYXMuICBSZWdpc3RlcmVkIGJ5IHN4X3NlcnZlci5tbCBhZnRlciBjb21waWxlciBsb2Fkcy4gIFRlc3RzXG4gICBydW4gd2l0aCBob29rID0gTm9uZSAocHVyZSBDRUssIG5vIGNvbXBpbGF0aW9uIGRlcGVuZGVuY3kpLiAqKVxubGV0IGppdF9jYWxsX2hvb2sgOiAodmFsdWUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBDb21wb25lbnQgdHJhY2Ug4oCUIGNhcHR1cmVzIGtvbnQgZnJvbSBsYXN0IENFSyBlcnJvciBmb3IgZGlhZ25vc3RpY3MgKilcbmxldCBfbGFzdF9lcnJvcl9rb250IDogdmFsdWUgcmVmID0gcmVmIE5pbFxuXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSBldmFsdWF0b3IgKGZyYW1lcyArIGV2YWwgKyBDRUspID09PSAqKVxuXG4oKiBtYWtlLWNlay1zdGF0ZSAqKVxubGV0IHJlYyBtYWtlX2Nla19zdGF0ZSBjb250cm9sIGVudiBrb250ID1cbiAgKENla1N0YXRlIHsgY3NfY29udHJvbCA9IGNvbnRyb2w7IGNzX2VudiA9IGVudjsgY3Nfa29udCA9IGtvbnQ7IGNzX3BoYXNlID0gXCJldmFsXCI7IGNzX3ZhbHVlID0gTmlsIH0pXG5cbigqIG1ha2UtY2VrLXZhbHVlICopXG5hbmQgbWFrZV9jZWtfdmFsdWUgdmFsdWUgZW52IGtvbnQgPVxuICAoQ2VrU3RhdGUgeyBjc19jb250cm9sID0gTmlsOyBjc19lbnYgPSBlbnY7IGNzX2tvbnQgPSBrb250OyBjc19waGFzZSA9IFwiY29udGludWVcIjsgY3NfdmFsdWUgPSB2YWx1ZSB9KVxuXG4oKiBjZWstdGVybWluYWw/ICopXG5hbmQgY2VrX3Rlcm1pbmFsX3Agc3RhdGUgPVxuICAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJwaGFzZVwiKSkpOyAoU3RyaW5nIFwiY29udGludWVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwia29udFwiKSkpKSkpXG5cbigqIGNlay1jb250cm9sICopXG5hbmQgY2VrX2NvbnRyb2wgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwiY29udHJvbFwiKSkpXG5cbigqIGNlay1lbnYgKilcbmFuZCBjZWtfZW52IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImVudlwiKSkpXG5cbigqIGNlay1rb250ICopXG5hbmQgY2VrX2tvbnQgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwia29udFwiKSkpXG5cbigqIGNlay1waGFzZSAqKVxuYW5kIGNla19waGFzZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJwaGFzZVwiKSkpXG5cbigqIGNlay12YWx1ZSAqKVxuYW5kIGNla192YWx1ZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpXG5cbigqIG1ha2UtaWYtZnJhbWUgKilcbmFuZCBtYWtlX2lmX2ZyYW1lIHRoZW5fZXhwciBlbHNlX2V4cHIgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaWZcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gZWxzZV9leHByOyBjZl9ib2R5ID0gdGhlbl9leHByOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS13aGVuLWZyYW1lICopXG5hbmQgbWFrZV93aGVuX2ZyYW1lIGJvZHlfZXhwcnMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2hlblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBib2R5X2V4cHJzOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1iZWdpbi1mcmFtZSAqKVxuYW5kIG1ha2VfYmVnaW5fZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJlZ2luXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtbGV0LWZyYW1lICopXG5hbmQgbWFrZV9sZXRfZnJhbWUgbmFtZSByZW1haW5pbmcgYm9keSBsb2NhbCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImxldFwiOyBjZl9lbnYgPSBsb2NhbDsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBib2R5OyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1kZWZpbmUtZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mcmFtZSBuYW1lIGVudiBoYXNfZWZmZWN0cyBlZmZlY3RfbGlzdCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlZmluZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gaGFzX2VmZmVjdHM7IGNmX2V4dHJhMiA9IGVmZmVjdF9saXN0IH0pXG5cbigqIG1ha2Utc2V0LWZyYW1lICopXG5hbmQgbWFrZV9zZXRfZnJhbWUgbmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtYXJnLWZyYW1lICopXG5hbmQgbWFrZV9hcmdfZnJhbWUgZiBldmFsZWQgcmVtYWluaW5nIGVudiByYXdfYXJncyBoZWFkX25hbWUgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhcmdcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gZXZhbGVkOyBjZl9yZXN1bHRzID0gcmF3X2FyZ3M7IGNmX2V4dHJhID0gKGxldCBfb3IgPSBoZWFkX25hbWUgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCk7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhbGwtZnJhbWUgKilcbmFuZCBtYWtlX2NhbGxfZnJhbWUgZiBhcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhbGxcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBmOyBjZl9hcmdzID0gYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbmQtZnJhbWUgKilcbmFuZCBtYWtlX2NvbmRfZnJhbWUgcmVtYWluaW5nIGVudiBzY2hlbWVfcCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gc2NoZW1lX3A7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhc2UtZnJhbWUgKilcbmFuZCBtYWtlX2Nhc2VfZnJhbWUgbWF0Y2hfdmFsIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJjYXNlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IG1hdGNoX3ZhbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtdGhyZWFkLWZyYW1lICopXG5hbmQgbWFrZV90aHJlYWRfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInRocmVhZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLW1hcC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2ZyYW1lIGYgcmVtYWluaW5nIHJlc3VsdHMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwibWFwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gKEJvb2wgZmFsc2UpOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1tYXAtaW5kZXhlZC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2luZGV4ZWRfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSAoQm9vbCB0cnVlKTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZmlsdGVyLWZyYW1lICopXG5hbmQgbWFrZV9maWx0ZXJfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBjdXJyZW50X2l0ZW0gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZmlsdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gY3VycmVudF9pdGVtOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZWR1Y2UtZnJhbWUgKilcbmFuZCBtYWtlX3JlZHVjZV9mcmFtZSBmIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWR1Y2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZm9yLWVhY2gtZnJhbWUgKilcbmFuZCBtYWtlX2Zvcl9lYWNoX2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImZvci1lYWNoXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNvbWUtZnJhbWUgKilcbmFuZCBtYWtlX3NvbWVfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic29tZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1ldmVyeS1mcmFtZSAqKVxuYW5kIG1ha2VfZXZlcnlfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZXZlcnlcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utc2NvcGUtZnJhbWUgKilcbmFuZCBtYWtlX3Njb3BlX2ZyYW1lIG5hbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtZnJhbWUgKilcbmFuZCBtYWtlX3Byb3ZpZGVfZnJhbWUgbmFtZSB2YWx1ZSByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicHJvdmlkZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdmFsdWU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNjb3BlLWFjYy1mcmFtZSAqKVxuYW5kIG1ha2Vfc2NvcGVfYWNjX2ZyYW1lIG5hbWUgdmFsdWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlLWFjY1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gKGxldCBfb3IgPSB2YWx1ZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gKExpc3QgW10pIH0pXG5cbigqIG1ha2UtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc2V0X2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGljdC1mcmFtZSAqKVxuYW5kIG1ha2VfZGljdF9mcmFtZSByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkaWN0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWFuZC1mcmFtZSAqKVxuYW5kIG1ha2VfYW5kX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1vci1mcmFtZSAqKVxuYW5kIG1ha2Vfb3JfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm9yXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZHluYW1pYy13aW5kLWZyYW1lICopXG5hbmQgbWFrZV9keW5hbWljX3dpbmRfZnJhbWUgcGhhc2UgYm9keV90aHVuayBhZnRlcl90aHVuayBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkeW5hbWljLXdpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gcGhhc2U7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJlYWN0aXZlLXJlc2V0LWZyYW1lICopXG5hbmQgbWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSBlbnYgdXBkYXRlX2ZuIGZpcnN0X3JlbmRlcl9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicmVhY3RpdmUtcmVzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdXBkYXRlX2ZuOyBjZl9leHRyYTIgPSBmaXJzdF9yZW5kZXJfcCB9KVxuXG4oKiBtYWtlLWRlcmVmLWZyYW1lICopXG5hbmQgbWFrZV9kZXJlZl9mcmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZXJlZlwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWhvLXNldHVwLWZyYW1lICopXG5hbmQgbWFrZV9ob19zZXR1cF9mcmFtZSBob190eXBlIHJlbWFpbmluZ19hcmdzIGV2YWxlZF9hcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImhvLXNldHVwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nX2FyZ3M7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBldmFsZWRfYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBob190eXBlOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1jb21wLXRyYWNlLWZyYW1lICopXG5hbmQgbWFrZV9jb21wX3RyYWNlX2ZyYW1lIG5hbWUgZmlsZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbXAtdHJhY2VcIjsgY2ZfZW52ID0gZmlsZTsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBrb250LWNvbGxlY3QtY29tcC10cmFjZSAqKVxuYW5kIGtvbnRfY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAoY29ucyAoKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiZmlsZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpbGVcIikpKTsgSGFzaHRibC5yZXBsYWNlIF9kIFwibmFtZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgRGljdCBfZCkpICgoa29udF9jb2xsZWN0X2NvbXBfdHJhY2UgKChyZXN0IChrb250KSkpKSkpIGVsc2UgKGtvbnRfY29sbGVjdF9jb21wX3RyYWNlICgocmVzdCAoa29udCkpKSkpKSlcblxuKCogbWFrZS1oYW5kbGVyLWZyYW1lICopXG5hbmQgbWFrZV9oYW5kbGVyX2ZyYW1lIGhhbmRsZXJzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJoYW5kbGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gaGFuZGxlcnM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZXN0YXJ0LWZyYW1lICopXG5hbmQgbWFrZV9yZXN0YXJ0X2ZyYW1lIHJlc3RhcnRzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZXN0YXJ0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gcmVzdGFydHM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zaWduYWwtcmV0dXJuLWZyYW1lICopXG5hbmQgbWFrZV9zaWduYWxfcmV0dXJuX2ZyYW1lIGVudiBzYXZlZF9rb250ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic2lnbmFsLXJldHVyblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IHNhdmVkX2tvbnQ7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogZmluZC1tYXRjaGluZy1oYW5kbGVyICopXG5hbmQgZmluZF9tYXRjaGluZ19oYW5kbGVyIGhhbmRsZXJzIGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChoYW5kbGVycykpKSB0aGVuIE5pbCBlbHNlIChsZXQgcGFpciA9IChmaXJzdCAoaGFuZGxlcnMpKSBpbiAobGV0IHByZWQgPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoY2VrX2NhbGwgKHByZWQpICgoTGlzdCBbY29uZGl0aW9uXSkpKSkgdGhlbiBoYW5kbGVyX2ZuIGVsc2UgKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKHJlc3QgKGhhbmRsZXJzKSkpIChjb25kaXRpb24pKSkpKSlcblxuKCoga29udC1maW5kLWhhbmRsZXIgKilcbmFuZCBrb250X2ZpbmRfaGFuZGxlciBrb250IGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgbWF0Y2gnID0gKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9oYW5kbGVyICgocmVzdCAoa29udCkpKSAoY29uZGl0aW9uKSkgZWxzZSBtYXRjaCcpKSBlbHNlIChrb250X2ZpbmRfaGFuZGxlciAoKHJlc3QgKGtvbnQpKSkgKGNvbmRpdGlvbikpKSkpXG5cbigqIGZpbmQtbmFtZWQtcmVzdGFydCAqKVxuYW5kIGZpbmRfbmFtZWRfcmVzdGFydCByZXN0YXJ0cyBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RhcnRzKSkpIHRoZW4gTmlsIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAocmVzdGFydHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKGVudHJ5KSk7IG5hbWVdKSkgdGhlbiBlbnRyeSBlbHNlIChmaW5kX25hbWVkX3Jlc3RhcnQgKChyZXN0IChyZXN0YXJ0cykpKSAobmFtZSkpKSkpXG5cbigqIGtvbnQtZmluZC1yZXN0YXJ0ICopXG5hbmQga29udF9maW5kX3Jlc3RhcnQga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZXN0YXJ0XCIpXSkpIHRoZW4gKGxldCBtYXRjaCcgPSAoZmluZF9uYW1lZF9yZXN0YXJ0ICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpIGVsc2UgKExpc3QgW21hdGNoJzsgZnJhbWU7IChyZXN0IChrb250KSldKSkpIGVsc2UgKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGZyYW1lLXR5cGUgKilcbmFuZCBmcmFtZV90eXBlIGYgPVxuICAoZ2V0IChmKSAoKFN0cmluZyBcInR5cGVcIikpKVxuXG4oKiBrb250LXB1c2ggKilcbmFuZCBrb250X3B1c2ggZnJhbWUga29udCA9XG4gIChjb25zIChmcmFtZSkgKGtvbnQpKVxuXG4oKiBrb250LXRvcCAqKVxuYW5kIGtvbnRfdG9wIGtvbnQgPVxuICAoZmlyc3QgKGtvbnQpKVxuXG4oKiBrb250LXBvcCAqKVxuYW5kIGtvbnRfcG9wIGtvbnQgPVxuICAocmVzdCAoa29udCkpXG5cbigqIGtvbnQtZW1wdHk/ICopXG5hbmQga29udF9lbXB0eV9wIGtvbnQgPVxuICAoZW1wdHlfcCAoa29udCkpXG5cbigqIGtvbnQtY2FwdHVyZS10by1yZXNldCAqKVxuYW5kIGtvbnRfY2FwdHVyZV90b19yZXNldCBrb250ID1cbiAgKGxldCByZWMgc2NhbiA9IChmdW4gayBjYXB0dXJlZCAtPiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJzaGlmdCB3aXRob3V0IGVuY2xvc2luZyByZXNldFwiKSkpKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGspKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicmVzZXRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSkgdGhlbiAoTGlzdCBbY2FwdHVyZWQ7IChyZXN0IChrKSldKSBlbHNlIChzY2FuICgocmVzdCAoaykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjYXB0dXJlZDsgKExpc3QgW2ZyYW1lXSldKSkpKSkpKSBpbiAoc2NhbiAoa29udCkgKChMaXN0IFtdKSkpKVxuXG4oKiBrb250LWZpbmQtcHJvdmlkZSAqKVxuYW5kIGtvbnRfZmluZF9wcm92aWRlIGtvbnQgbmFtZSA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgbmFtZV0pKSkgdGhlbiBmcmFtZSBlbHNlIChrb250X2ZpbmRfcHJvdmlkZSAoKHJlc3QgKGtvbnQpKSkgKG5hbWUpKSkpKVxuXG4oKiBrb250LWZpbmQtc2NvcGUtYWNjICopXG5hbmQga29udF9maW5kX3Njb3BlX2FjYyBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInNjb3BlLWFjY1wiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgbmFtZV0pKSkgdGhlbiBmcmFtZSBlbHNlIChrb250X2ZpbmRfc2NvcGVfYWNjICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGhhcy1yZWFjdGl2ZS1yZXNldC1mcmFtZT8gKilcbmFuZCBoYXNfcmVhY3RpdmVfcmVzZXRfZnJhbWVfcCBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoKGZpcnN0IChrb250KSkpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKEJvb2wgdHJ1ZSkgZWxzZSAoaGFzX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lX3AgKChyZXN0IChrb250KSkpKSkpXG5cbigqIGtvbnQtY2FwdHVyZS10by1yZWFjdGl2ZS1yZXNldCAqKVxuYW5kIGtvbnRfY2FwdHVyZV90b19yZWFjdGl2ZV9yZXNldCBrb250ID1cbiAgKGxldCByZWMgc2NhbiA9IChmdW4gayBjYXB0dXJlZCAtPiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJyZWFjdGl2ZSBkZXJlZiB3aXRob3V0IGVuY2xvc2luZyByZWFjdGl2ZS1yZXNldFwiKSkpKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGspKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKExpc3QgW2NhcHR1cmVkOyBmcmFtZTsgKHJlc3QgKGspKV0pIGVsc2UgKHNjYW4gKChyZXN0IChrKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NhcHR1cmVkOyAoTGlzdCBbZnJhbWVdKV0pKSkpKSkpIGluIChzY2FuIChrb250KSAoKExpc3QgW10pKSkpXG5cbigqICpjdXN0b20tc3BlY2lhbC1mb3JtcyogKilcbmFuZCBjdXN0b21fc3BlY2lhbF9mb3JtcyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogcmVnaXN0ZXItc3BlY2lhbC1mb3JtISAqKVxuYW5kIHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSBuYW1lIGhhbmRsZXIgPVxuICAoc3hfZGljdF9zZXRfYiBjdXN0b21fc3BlY2lhbF9mb3JtcyBuYW1lIGhhbmRsZXIpXG5cbigqICpyZW5kZXItY2hlY2sqICopXG5hbmQgcmVuZGVyX2NoZWNrID1cbiAgTmlsXG5cbigqICpyZW5kZXItZm4qICopXG5hbmQgcmVuZGVyX2ZuID1cbiAgTmlsXG5cbigqICpzdHJpY3QqICopXG5hbmQgX3N0cmljdF8gPSAhX3N0cmljdF9yZWZcblxuKCogc2V0LXN0cmljdCEgKilcbmFuZCBzZXRfc3RyaWN0X2IgdmFsJyA9XG4gIF9zdHJpY3RfcmVmIDo9IHZhbCc7IE5pbFxuXG4oKiAqcHJpbS1wYXJhbS10eXBlcyogKilcbmFuZCBfcHJpbV9wYXJhbV90eXBlc18gPSAhX3ByaW1fcGFyYW1fdHlwZXNfcmVmXG5cbigqIHNldC1wcmltLXBhcmFtLXR5cGVzISAqKVxuYW5kIHNldF9wcmltX3BhcmFtX3R5cGVzX2IgdHlwZXMgPVxuICBfcHJpbV9wYXJhbV90eXBlc19yZWYgOj0gdHlwZXM7IE5pbFxuXG4oKiB2YWx1ZS1tYXRjaGVzLXR5cGU/ICopXG5hbmQgdmFsdWVfbWF0Y2hlc190eXBlX3AgdmFsJyBleHBlY3RlZF90eXBlID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImFueVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcIm51bWJlclwiKV0pKSB0aGVuIChudW1iZXJfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcInN0cmluZ1wiKV0pKSB0aGVuIChzdHJpbmdfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImJvb2xlYW5cIildKSkgdGhlbiAoYm9vbGVhbl9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwibmlsXCIpXSkpIHRoZW4gKGlzX25pbCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAobGlzdF9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwiZGljdFwiKV0pKSB0aGVuIChkaWN0X3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2V4cGVjdGVkX3R5cGU7IChTdHJpbmcgXCJsYW1iZGFcIildKSkgdGhlbiAoaXNfbGFtYmRhICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImtleXdvcmRcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN0cmluZ19wIChleHBlY3RlZF90eXBlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcImVuZHMtd2l0aD9cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcIj9cIildKSkpIHRoZW4gKGxldCBfb3IgPSAoaXNfbmlsICh2YWwnKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlICh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKChwcmltX2NhbGwgXCJzbGljZVwiIFtleHBlY3RlZF90eXBlOyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCItXCIgWyhwcmltX2NhbGwgXCJzdHJpbmctbGVuZ3RoXCIgW2V4cGVjdGVkX3R5cGVdKTsgKE51bWJlciAxLjApXSldKSkpKSBlbHNlIChCb29sIHRydWUpKSkpKSkpKSkpKSlcblxuKCogc3RyaWN0LWNoZWNrLWFyZ3MgKilcbmFuZCBzdHJpY3RfY2hlY2tfYXJncyBuYW1lIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgIV9wcmltX3BhcmFtX3R5cGVzX3JlZikpIHRoZW4gKGxldCBzcGVjID0gKGdldCAoIV9wcmltX3BhcmFtX3R5cGVzX3JlZikgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5IChzcGVjKSB0aGVuIChsZXQgcG9zaXRpb25hbCA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicG9zaXRpb25hbFwiKSkpIGluIGxldCByZXN0X3R5cGUgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInJlc3QtdHlwZVwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKHBvc2l0aW9uYWwpIHRoZW4gKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IGlkeCA9IChmaXJzdCAocGFpcikpIGluIGxldCBwYXJhbSA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcF9uYW1lID0gKGZpcnN0IChwYXJhbSkpIGluIGxldCBwX3R5cGUgPSAobnRoIChwYXJhbSkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgW2lkeDsgKGxlbiAoYXJncykpXSkpIHRoZW4gKGxldCB2YWwnID0gKG50aCAoYXJncykgKGlkeCkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAocF90eXBlKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlR5cGUgZXJyb3I6IFwiKTsgbmFtZTsgKFN0cmluZyBcIiBleHBlY3RlZCBcIik7IHBfdHlwZTsgKFN0cmluZyBcIiBmb3IgcGFyYW0gXCIpOyBwX25hbWU7IChTdHJpbmcgXCIsIGdvdCBcIik7ICh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCIgKFwiKTsgKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpOyAoU3RyaW5nIFwiKVwiKV0pKSkpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSBwIC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHBdKSkgKHN4X3RvX2xpc3QgcG9zaXRpb25hbCkpKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSByZXN0X3R5cGUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuICgobGV0IF9vciA9IHBvc2l0aW9uYWwgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChMaXN0IFtdKSkpKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgaWR4ID0gKGZpcnN0IChwYWlyKSkgaW4gbGV0IHZhbCcgPSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpIChyZXN0X3R5cGUpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVHlwZSBlcnJvcjogXCIpOyBuYW1lOyAoU3RyaW5nIFwiIGV4cGVjdGVkIFwiKTsgcmVzdF90eXBlOyAoU3RyaW5nIFwiIGZvciByZXN0IGFyZyBcIik7IGlkeDsgKFN0cmluZyBcIiwgZ290IFwiKTsgKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcIiAoXCIpOyAoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSk7IChTdHJpbmcgXCIpXCIpXSkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB2IC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHZdKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChsZW4gKChsZXQgX29yID0gcG9zaXRpb25hbCBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKExpc3QgW10pKSkpXSkpKSkpOyBOaWwpIGVsc2UgTmlsKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpXG5cbigqIGNhbGwtbGFtYmRhICopXG5hbmQgY2FsbF9sYW1iZGEgZiBhcmdzIGNhbGxlcl9lbnYgPVxuICAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChjYWxsZXJfZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuIChwYXJhbXMpKV0pKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKGxldCBfb3IgPSAobGFtYmRhX25hbWUgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKFN0cmluZyBcImxhbWJkYVwiKSk7IChTdHJpbmcgXCIgZXhwZWN0cyBcIik7IChsZW4gKHBhcmFtcykpOyAoU3RyaW5nIFwiIGFyZ3MsIGdvdCBcIik7IChsZW4gKGFyZ3MpKV0pKSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgW3BhcmFtczsgYXJnc10pKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSBOaWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW3BhcmFtczsgKGxlbiAoYXJncykpXSkpOyBOaWwpKSBpbiAobWFrZV90aHVuayAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkpKSkpKVxuXG4oKiBjYWxsLWNvbXBvbmVudCAqKVxuYW5kIGNhbGxfY29tcG9uZW50IGNvbXAgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBwYXJzZWQgPSAocGFyc2Vfa2V5d29yZF9hcmdzIChyYXdfYXJncykgKGVudikpIGluIGxldCBrd2FyZ3MgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoY29tcCkpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobGV0IF9vciA9IChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChjb21wKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoY29tcCkpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgY2hpbGRyZW4pIGVsc2UgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChjb21wb25lbnRfYm9keSAoY29tcCkpKSAobG9jYWwpKSkpKVxuXG4oKiBwYXJzZS1rZXl3b3JkLWFyZ3MgKilcbmFuZCBwYXJzZV9rZXl3b3JkX2FyZ3MgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBrd2FyZ3MgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBjaGlsZHJlbiA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgaSA9IChOdW1iZXIgMC4wKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBhcmcgLT4gKGxldCBpZHggPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSkgaW4gbGV0IHNraXAgPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJza2lwXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2tpcCkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCBmYWxzZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYXJnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKTsgKGxlbiAocmF3X2FyZ3MpKV0pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBrd2FyZ3MgKGtleXdvcmRfbmFtZSAoYXJnKSkgKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJhd19hcmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKSkpKSAoZW52KSkpKSkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIHRydWUpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKV0pKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChjaGlsZHJlbiA6PSBzeF9hcHBlbmRfYiAhY2hpbGRyZW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGFyZykgKGVudikpKSk7IE5pbCkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSldKSkpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpXCIpKSAoTnVtYmVyIDAuMCk7IEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJza2lwXCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCByYXdfYXJncykpKSBpbiAoTGlzdCBba3dhcmdzOyAhY2hpbGRyZW5dKSkpXG5cbigqIGNvbmQtc2NoZW1lPyAqKVxuYW5kIGNvbmRfc2NoZW1lX3AgY2xhdXNlcyA9XG4gIChCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGMpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChjKSk7IChOdW1iZXIgMi4wKV0pKSkpIChzeF90b19saXN0IGNsYXVzZXMpKSlcblxuKCogaXMtZWxzZS1jbGF1c2U/ICopXG5hbmQgaXNfZWxzZV9jbGF1c2UgdGVzdCA9XG4gIChsZXQgX29yID0gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHRlc3QpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCJlbHNlXCIpXSkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVzdCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHRlc3QpKTsgKFN0cmluZyBcImVsc2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCI6ZWxzZVwiKV0pKSkpXG5cbigqIHNmLW5hbWVkLWxldCAqKVxuYW5kIHNmX25hbWVkX2xldCBhcmdzIGVudiA9XG4gIChsZXQgbG9vcF9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBiaW5kaW5ncyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcGFyYW1zID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBpbml0cyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gYmluZGluZyAtPiBpZ25vcmUgKChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChiaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAoYmluZGluZykpKTsgTmlsKSkgaW4gKGluaXRzIDo9IHN4X2FwcGVuZF9iICFpbml0cyAobnRoIChiaW5kaW5nKSAoKE51bWJlciAxLjApKSk7IE5pbCkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpIGVsc2UgKExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBwYWlyX2lkeCAtPiAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpIGVsc2UgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSk7IE5pbCkpIGluIChpbml0cyA6PSBzeF9hcHBlbmRfYiAhaW5pdHMgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKV0pKSk7IE5pbCkpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSkgaW4gKGxldCBsb29wX2JvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keSkpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5KSkpIGluIGxldCBsb29wX2ZuID0gKG1ha2VfbGFtYmRhICghcGFyYW1zKSAobG9vcF9ib2R5KSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNldF9sYW1iZGFfbmFtZSBsb29wX2ZuIChzeF90b19zdHJpbmcgbG9vcF9uYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCAobGFtYmRhX2Nsb3N1cmUgKGxvb3BfZm4pKSAoc3hfdG9fc3RyaW5nIGxvb3BfbmFtZSkgbG9vcF9mbikpIGluIChsZXQgaW5pdF92YWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSkpIChzeF90b19saXN0ICFpbml0cykpKSBpbiAodHJhbXBvbGluZSAoY2FsbF9sYW1iZGEgKGxvb3BfZm4pIChpbml0X3ZhbHMpIChlbnYpKSkpKSkpKSlcblxuKCogc2YtbGFtYmRhICopXG5hbmQgc2ZfbGFtYmRhIGFyZ3MgZW52ID1cbiAgKGxldCBwYXJhbXNfZXhwciA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5X2V4cHJzID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHlfZXhwcnMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGZpcnN0IChib2R5X2V4cHJzKSkgZWxzZSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiYmVnaW5cIikpKSkgKGJvZHlfZXhwcnMpKSkgaW4gbGV0IHBhcmFtX25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gcCAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiYXNcIildKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgZWxzZSBwKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKSkpIGluIChtYWtlX2xhbWJkYSAocGFyYW1fbmFtZXMpIChib2R5KSAoZW52KSkpXG5cbigqIHNmLWRlZmNvbXAgKilcbmFuZCBzZl9kZWZjb21wIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwYXJhbXNfcmF3ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKGxhc3QgKGFyZ3MpKSBpbiBsZXQgY29tcF9uYW1lID0gKHN0cmlwX3ByZWZpeCAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoKFN0cmluZyBcIn5cIikpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX2NvbXBfcGFyYW1zIChwYXJhbXNfcmF3KSkgaW4gbGV0IHBhcmFtcyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGhhc19jaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBwYXJhbV90eXBlcyA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMi4wKSkpIGluIGxldCBhZmZpbml0eSA9IChkZWZjb21wX2t3YXJnIChhcmdzKSAoKFN0cmluZyBcImFmZmluaXR5XCIpKSAoKFN0cmluZyBcImF1dG9cIikpKSBpbiAobGV0IGNvbXAgPSAobWFrZV9jb21wb25lbnQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpIChhZmZpbml0eSkpIGluIGxldCBlZmZlY3RzID0gKGRlZmNvbXBfa3dhcmcgKGFyZ3MpICgoU3RyaW5nIFwiZWZmZWN0c1wiKSkgKE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAocGFyYW1fdHlwZXMpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKHByaW1fY2FsbCBcImtleXNcIiBbcGFyYW1fdHlwZXNdKSkpKSkpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiAoY29tcCkgKHBhcmFtX3R5cGVzKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKGVmZmVjdHMpKSkpKSkpIHRoZW4gKGxldCBlZmZlY3RfbGlzdCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlZmZlY3RzKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2VdKSkpKSAoc3hfdG9fbGlzdCBlZmZlY3RzKSkpIGVsc2UgKExpc3QgWyhTdHJpbmcgKHN4X3N0ciBbZWZmZWN0c10pKV0pKSBpbiBsZXQgZWZmZWN0X2FubnMgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkpIHRoZW4gKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpIGVsc2UgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZWZmZWN0X2FubnMgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpIGVmZmVjdF9saXN0KSkgaW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkgZWZmZWN0X2FubnMpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChjb21wKSAoKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBjb21wKSkgaW4gY29tcCkpKSkpKVxuXG4oKiBkZWZjb21wLWt3YXJnICopXG5hbmQgZGVmY29tcF9rd2FyZyBhcmdzIGtleSBkZWZhdWx0ID1cbiAgKGxldCBlbmQnID0gKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoZGVmYXVsdCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGkgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKGkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpIChpKSkpKTsga2V5XSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSk7IGVuZCddKSkpKSB0aGVuIChsZXQgdmFsJyA9IChudGggKGFyZ3MpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpIGluIChyZXN1bHQnIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkpIHRoZW4gKGtleXdvcmRfbmFtZSAodmFsJykpIGVsc2UgdmFsJyk7IE5pbCkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDIuMCk7IGVuZCc7IChOdW1iZXIgMS4wKV0pKTsgTmlsKSkgaW4gIXJlc3VsdCcpKVxuXG4oKiBwYXJzZS1jb21wLXBhcmFtcyAqKVxuYW5kIHBhcnNlX2NvbXBfcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHBhcmFtX3R5cGVzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gcmVmICgoQm9vbCBmYWxzZSkpIGluIGxldCBpbl9rZXkgPSByZWYgKChCb29sIGZhbHNlKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocCkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJhc1wiKV0pKSkpKSkgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgaW4gbGV0IHB0eXBlID0gKG50aCAocCkgKChOdW1iZXIgMi4wKSkpIGluIChsZXQgdHlwZV92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocHR5cGUpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocHR5cGUpKSBlbHNlIHB0eXBlKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCFoYXNfY2hpbGRyZW4pKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpKSBpbiAoc3hfZGljdF9zZXRfYiBwYXJhbV90eXBlcyBuYW1lIHR5cGVfdmFsKSkgZWxzZSBOaWwpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChwKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZrZXlcIildKSkgdGhlbiAoaW5fa2V5IDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZyZXN0XCIpXSkpIHRoZW4gKGhhc19jaGlsZHJlbiA6PSAoQm9vbCB0cnVlKTsgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCImY2hpbGRyZW5cIildKSkgdGhlbiAoaGFzX2NoaWxkcmVuIDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoIWhhc19jaGlsZHJlbikgdGhlbiBOaWwgZWxzZSAoaWYgc3hfdHJ1dGh5ICghaW5fa2V5KSB0aGVuIChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpIGVsc2UgKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIG5hbWU7IE5pbCkpKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKTsgTmlsKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFoYXNfY2hpbGRyZW47IHBhcmFtX3R5cGVzXSkpKVxuXG4oKiBzZi1kZWZpc2xhbmQgKilcbmFuZCBzZl9kZWZpc2xhbmQgYXJncyBlbnYgPVxuICAobGV0IG5hbWVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHBhcmFtc19yYXcgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHlfZXhwcnMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAyLjApXSkgaW4gbGV0IGJvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5X2V4cHJzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keV9leHBycykpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5X2V4cHJzKSkpIGluIGxldCBjb21wX25hbWUgPSAoc3RyaXBfcHJlZml4ICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpICgoU3RyaW5nIFwiflwiKSkpIGluIGxldCBwYXJzZWQgPSAocGFyc2VfY29tcF9wYXJhbXMgKHBhcmFtc19yYXcpKSBpbiBsZXQgcGFyYW1zID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBpc2xhbmQgPSAobWFrZV9pc2xhbmQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChpc2xhbmQpICgoZW52X2dldCAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpIGlzbGFuZCkpIGluIGlzbGFuZCkpKSlcblxuKCogc2YtZGVmbWFjcm8gKilcbmFuZCBzZl9kZWZtYWNybyBhcmdzIGVudiA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcGFyYW1zX3JhdyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX21hY3JvX3BhcmFtcyAocGFyYW1zX3JhdykpIGluIGxldCBwYXJhbXMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCByZXN0X3BhcmFtID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBtYWMgPSAobWFrZV9tYWNybyAocGFyYW1zKSAocmVzdF9wYXJhbSkgKGJvZHkpIChlbnYpICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBtYWMpKSBpbiBtYWMpKSlcblxuKCogcGFyc2UtbWFjcm8tcGFyYW1zICopXG5hbmQgcGFyc2VfbWFjcm9fcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHJlc3RfcGFyYW0gPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgcCAtPiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChwKSk7IChTdHJpbmcgXCImcmVzdFwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpbi1yZXN0XCIpOyAoQm9vbCB0cnVlKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaW4tcmVzdFwiKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChyZXN0X3BhcmFtIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHApKSBlbHNlIHApOyBOaWwpKSBpbiBzdGF0ZSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocCkpIGVsc2UgcCk7IE5pbCkpIGluIHN0YXRlKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMSBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaW4tcmVzdFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgcGFyYW1zX2V4cHIpKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFyZXN0X3BhcmFtXSkpKVxuXG4oKiBxcS1leHBhbmQgKilcbmFuZCBxcV9leHBhbmQgdGVtcGxhdGUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVtcGxhdGUpKTsgKFN0cmluZyBcImxpc3RcIildKSkpKSkpIHRoZW4gdGVtcGxhdGUgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAodGVtcGxhdGUpKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAobGV0IGhlYWQgPSAoZmlyc3QgKHRlbXBsYXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoaGVhZCkpOyAoU3RyaW5nIFwidW5xdW90ZVwiKV0pKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAodGVtcGxhdGUpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biByZXN1bHQnIGl0ZW0gLT4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGl0ZW0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChpdGVtKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGl0ZW0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgoZmlyc3QgKGl0ZW0pKSkpOyAoU3RyaW5nIFwic3BsaWNlLXVucXVvdGVcIildKSkpKSkgdGhlbiAobGV0IHNwbGljZWQgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoaXRlbSkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoc3BsaWNlZCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0Jzsgc3BsaWNlZF0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc3BsaWNlZCkpKSB0aGVuIHJlc3VsdCcgZWxzZSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW3Jlc3VsdCc7IChMaXN0IFtzcGxpY2VkXSldKSkpKSBlbHNlIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0JzsgKExpc3QgWyhxcV9leHBhbmQgKGl0ZW0pIChlbnYpKV0pXSkpKSAoTGlzdCBbXSkgKHN4X3RvX2xpc3QgdGVtcGxhdGUpKSkpKSlcblxuKCogc2YtbGV0cmVjICopXG5hbmQgc2ZfbGV0cmVjIGFyZ3MgZW52ID1cbiAgKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gbGV0IG5hbWVzID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCB2YWxfZXhwcnMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIGJpbmRpbmcgLT4gaWdub3JlICgobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGJpbmRpbmcpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKG5hbWVzIDo9IHN4X2FwcGVuZF9iICFuYW1lcyB2bmFtZTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZhbF9leHBycyA6PSBzeF9hcHBlbmRfYiAhdmFsX2V4cHJzIChudGggKGJpbmRpbmcpICgoTnVtYmVyIDEuMCkpKTsgTmlsKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgdm5hbWUpIE5pbCkpKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIHBhaXJfaWR4IC0+IChsZXQgdm5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSkgZWxzZSAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSBpbiBsZXQgdmFsX2V4cHIgPSAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pXSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgobmFtZXMgOj0gc3hfYXBwZW5kX2IgIW5hbWVzIHZuYW1lOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgodmFsX2V4cHJzIDo9IHN4X2FwcGVuZF9iICF2YWxfZXhwcnMgdmFsX2V4cHI7IE5pbCkpIGluIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHZuYW1lKSBOaWwpKSkpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGxldCB2YWx1ZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAobG9jYWwpKSkpKSAoc3hfdG9fbGlzdCAhdmFsX2V4cHJzKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgWyFuYW1lczsgdmFsdWVzXSkpOyBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gdmFsJyAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKHZhbCcpKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gbiAtPiBpZ25vcmUgKChlbnZfYmluZCAobGFtYmRhX2Nsb3N1cmUgKHZhbCcpKSAoc3hfdG9fc3RyaW5nIG4pIChlbnZfZ2V0IChsb2NhbCkgKG4pKSkpKSAoc3hfdG9fbGlzdCAhbmFtZXMpOyBOaWwpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IHZhbHVlcyk7IE5pbCkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGxvY2FsKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJzbGljZVwiIFtib2R5OyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCJkZWNcIiBbKGxlbiAoYm9keSkpXSldKSk7IE5pbCkpIGluIChtYWtlX3RodW5rICgobGFzdCAoYm9keSkpKSAobG9jYWwpKSkpKSlcblxuKCogc3RlcC1zZi1sZXRyZWMgKilcbmFuZCBzdGVwX3NmX2xldHJlYyBhcmdzIGVudiBrb250ID1cbiAgKGxldCB0aGsgPSAoc2ZfbGV0cmVjIChhcmdzKSAoZW52KSkgaW4gKG1ha2VfY2VrX3N0YXRlICgodGh1bmtfZXhwciAodGhrKSkpICgodGh1bmtfZW52ICh0aGspKSkgKGtvbnQpKSlcblxuKCogc2YtZHluYW1pYy13aW5kICopXG5hbmQgc2ZfZHluYW1pY193aW5kIGFyZ3MgZW52ID1cbiAgKGxldCBiZWZvcmUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBib2R5ID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGFmdGVyID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKGR5bmFtaWNfd2luZF9jYWxsIChiZWZvcmUpIChib2R5KSAoYWZ0ZXIpIChlbnYpKSlcblxuKCogc2Ytc2NvcGUgKilcbmFuZCBzZl9zY29wZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3QgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAxLjApXSkgaW4gbGV0IHZhbCcgPSByZWYgKE5pbCkgaW4gbGV0IGJvZHlfZXhwcnMgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc3QpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocmVzdCkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0KSkpKTsgKFN0cmluZyBcInZhbHVlXCIpXSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgodmFsJyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocmVzdCkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKTsgTmlsKSkgaW4gKGJvZHlfZXhwcnMgOj0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3Q7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5X2V4cHJzIDo9IHJlc3Q7IE5pbCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKCF2YWwnKSkpIGluIChsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKChyZXN1bHQnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAoZW52KSkpKTsgTmlsKSkpIChzeF90b19saXN0ICFib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSkpKVxuXG4oKiBzZi1wcm92aWRlICopXG5hbmQgc2ZfcHJvdmlkZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keV9leHBycyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKHZhbCcpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgocmVzdWx0JyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSk7IE5pbCkpKSAoc3hfdG9fbGlzdCBib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSlcblxuKCogZXhwYW5kLW1hY3JvICopXG5hbmQgZXhwYW5kX21hY3JvIG1hYyByYXdfYXJncyBlbnYgPVxuICAobGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKG1hY3JvX2Nsb3N1cmUgKG1hYykpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpOyAobGVuIChyYXdfYXJncykpXSkpIHRoZW4gKG50aCAocmF3X2FyZ3MpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgcCAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChMaXN0IFtwOyBpXSkpIChzeF90b19saXN0IChtYWNyb19wYXJhbXMgKG1hYykpKSkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKG1hY3JvX3Jlc3RfcGFyYW0gKG1hYykpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChtYWNyb19yZXN0X3BhcmFtIChtYWMpKSkgKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jhd19hcmdzOyAobGVuICgobWFjcm9fcGFyYW1zIChtYWMpKSkpXSkpIGVsc2UgTmlsKSkgaW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChtYWNyb19ib2R5IChtYWMpKSkgKGxvY2FsKSkpKSkpKVxuXG4oKiBjZWstcnVuIOKAlCBpdGVyYXRpdmUgdG8gYXZvaWQgT0NhbWwvV0FTTSBzdGFjayBvdmVyZmxvdyAqKVxuYW5kIGNla19ydW4gc3RhdGUgPVxuICBsZXQgcyA9IHJlZiBzdGF0ZSBpblxuICAodHJ5XG4gICAgd2hpbGUgbm90IChzeF90cnV0aHkgKGNla190ZXJtaW5hbF9wICFzKSkgZG9cbiAgICAgIHMgOj0gY2VrX3N0ZXAgIXNcbiAgICBkb25lO1xuICAgIGNla192YWx1ZSAhc1xuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgKGlmICFfbGFzdF9lcnJvcl9rb250ID0gTmlsIHRoZW4gX2xhc3RfZXJyb3Jfa29udCA6PSBjZWtfa29udCAhcyk7XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgbXNnKSlcblxuKCogY2VrLXN0ZXAgKilcbmFuZCBjZWtfc3RlcCBzdGF0ZSA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhjZWtfcGhhc2UgKHN0YXRlKSk7IChTdHJpbmcgXCJldmFsXCIpXSkpIHRoZW4gKHN0ZXBfZXZhbCAoc3RhdGUpKSBlbHNlIChzdGVwX2NvbnRpbnVlIChzdGF0ZSkpKVxuXG4oKiBzdGVwLWV2YWwgKilcbmFuZCBzdGVwX2V2YWwgc3RhdGUgPVxuICAobGV0IGV4cHIgPSAoY2VrX2NvbnRyb2wgKHN0YXRlKSkgaW4gbGV0IGVudiA9IChjZWtfZW52IChzdGF0ZSkpIGluIGxldCBrb250ID0gKGNla19rb250IChzdGF0ZSkpIGluIChsZXQgX21hdGNoX3ZhbCA9ICh0eXBlX29mIChleHByKSkgaW4gKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibnVtYmVyXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3RyaW5nXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiYm9vbGVhblwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm5pbFwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ltYm9sXCIpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChleHByKSkgaW4gKGxldCB2YWwnID0gKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKG5hbWUpKSkgdGhlbiAoZW52X2dldCAoZW52KSAobmFtZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX3ByaW1pdGl2ZSAobmFtZSkpKSB0aGVuIChnZXRfcHJpbWl0aXZlIChuYW1lKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwidHJ1ZVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZhbHNlXCIpXSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm5pbFwiKV0pKSB0aGVuIE5pbCBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuZGVmaW5lZCBzeW1ib2w6IFwiKTsgbmFtZV0pKSkpKSkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19uaWwgKHZhbCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW25hbWU7IChTdHJpbmcgXCJ+XCIpXSkpKSB0aGVuIChkZWJ1Z19sb2cgKChTdHJpbmcgXCJDb21wb25lbnQgbm90IGZvdW5kOlwiKSkgKG5hbWUpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsJykgKGVudikgKGtvbnQpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImtleXdvcmRcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChrZXl3b3JkX25hbWUgKGV4cHIpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImRpY3RcIikgdGhlbiAobGV0IGtzID0gKHByaW1fY2FsbCBcImtleXNcIiBbZXhwcl0pIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3Rfa2V5ID0gKGZpcnN0IChrcykpIGluIGxldCByZW1haW5pbmdfZW50cmllcyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gayAtPiBpZ25vcmUgKChyZW1haW5pbmdfZW50cmllcyA6PSBzeF9hcHBlbmRfYiAhcmVtYWluaW5nX2VudHJpZXMgKExpc3QgW2s7IChnZXQgKGV4cHIpIChrKSldKTsgTmlsKSkpIChzeF90b19saXN0IChyZXN0IChrcykpKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChleHByKSAoZmlyc3Rfa2V5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kaWN0X2ZyYW1lICghcmVtYWluaW5nX2VudHJpZXMpICgoTGlzdCBbKExpc3QgW2ZpcnN0X2tleV0pXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImxpc3RcIikgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKHN0ZXBfZXZhbF9saXN0IChleHByKSAoZW52KSAoa29udCkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSkpKSkpKSkpKSlcblxuKCogc3RlcC1ldmFsLWxpc3QgKilcbmFuZCBzdGVwX2V2YWxfbGlzdCBleHByIGVudiBrb250ID1cbiAgKGxldCBoZWFkID0gKGZpcnN0IChleHByKSkgaW4gbGV0IGFyZ3MgPSAocmVzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcImxhbWJkYVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSkpKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoZXhwcikpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfbWFwX2ZyYW1lIChOaWwpICgocmVzdCAoZXhwcikpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChoZWFkKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfaWYgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwid2hlblwiKV0pKSB0aGVuIChzdGVwX3NmX3doZW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChzdGVwX3NmX2NvbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY2FzZVwiKV0pKSB0aGVuIChzdGVwX3NmX2Nhc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiYW5kXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYW5kIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm9yXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfb3IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldCpcIildKSkgdGhlbiAoc3RlcF9zZl9sZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGFtYmRhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZuXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChzdGVwX3NmX2RlZmluZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZjb21wXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmY29tcCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmlzbGFuZFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmlzbGFuZCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZm1hY3JvXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmbWFjcm8gKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJiZWdpblwiKV0pKSB0aGVuIChzdGVwX3NmX2JlZ2luIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRvXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYmVnaW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicXVvdGVcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gTmlsIGVsc2UgKGZpcnN0IChhcmdzKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInF1YXNpcXVvdGVcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChxcV9leHBhbmQgKChmaXJzdCAoYXJncykpKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiLT5cIildKSkgdGhlbiAoc3RlcF9zZl90aHJlYWRfZmlyc3QgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic2V0IVwiKV0pKSB0aGVuIChzdGVwX3NmX3NldF9iIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldHJlY1wiKV0pKSB0aGVuIChzdGVwX3NmX2xldHJlYyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZXNldFwiKV0pKSB0aGVuIChzdGVwX3NmX3Jlc2V0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNoaWZ0XCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2hpZnQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVyZWZcIildKSkgdGhlbiAoc3RlcF9zZl9kZXJlZiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChzdGVwX3NmX3Njb3BlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAoc3RlcF9zZl9wcm92aWRlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImNvbnRleHRcIildKSkgdGhlbiAoc3RlcF9zZl9jb250ZXh0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImVtaXQhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJlbWl0dGVkXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdHRlZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJoYW5kbGVyLWJpbmRcIildKSkgdGhlbiAoc3RlcF9zZl9oYW5kbGVyX2JpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicmVzdGFydC1jYXNlXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmVzdGFydF9jYXNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNpZ25hbC1jb25kaXRpb25cIildKSkgdGhlbiAoc3RlcF9zZl9zaWduYWwgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiaW52b2tlLXJlc3RhcnRcIildKSkgdGhlbiAoc3RlcF9zZl9pbnZva2VfcmVzdGFydCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXRjaFwiKV0pKSB0aGVuIChzdGVwX3NmX21hdGNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImR5bmFtaWMtd2luZFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2R5bmFtaWNfd2luZCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcFwiKV0pKSB0aGVuIChzdGVwX2hvX21hcCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKV0pKSB0aGVuIChzdGVwX2hvX21hcF9pbmRleGVkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pKSB0aGVuIChzdGVwX2hvX2ZpbHRlciAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAoc3RlcF9ob19yZWR1Y2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pKSB0aGVuIChzdGVwX2hvX3NvbWUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZXZlcnk/XCIpXSkpIHRoZW4gKHN0ZXBfaG9fZXZlcnkgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAoc3RlcF9ob19mb3JfZWFjaCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtjdXN0b21fc3BlY2lhbF9mb3JtczsgbmFtZV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGNla19jYWxsICgoZ2V0IChjdXN0b21fc3BlY2lhbF9mb3JtcykgKG5hbWUpKSkgKExpc3QgW2FyZ3M7IGVudl0pKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChlbnZfaGFzIChlbnYpIChuYW1lKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX21hY3JvICgoZW52X2dldCAoZW52KSAobmFtZSkpKSkpKSB0aGVuIChsZXQgbWFjID0gKGVudl9nZXQgKGVudikgKG5hbWUpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChleHBhbmRfbWFjcm8gKG1hYykgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSByZW5kZXJfY2hlY2sgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGNla19jYWxsIChyZW5kZXJfY2hlY2spIChMaXN0IFtleHByOyBlbnZdKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGNla19jYWxsIChyZW5kZXJfZm4pIChMaXN0IFtleHByOyBlbnZdKSkpIChlbnYpIChrb250KSkgZWxzZSAoc3RlcF9ldmFsX2NhbGwgKGhlYWQpIChhcmdzKSAoZW52KSAoa29udCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSBlbHNlIChzdGVwX2V2YWxfY2FsbCAoaGVhZCkgKGFyZ3MpIChlbnYpIChrb250KSkpKSlcblxuKCogbWF0Y2gtZmluZC1jbGF1c2UgKilcbmFuZCBtYXRjaF9maW5kX2NsYXVzZSB2YWwnIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNsYXVzZXMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBwYXR0ZXJuID0gKGZpcnN0IChjbGF1c2UpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAocGF0dGVybikgKHZhbCcpIChsb2NhbCkpKSB0aGVuIChMaXN0IFtsb2NhbDsgYm9keV0pIGVsc2UgKG1hdGNoX2ZpbmRfY2xhdXNlICh2YWwnKSAoKHJlc3QgKGNsYXVzZXMpKSkgKGVudikpKSkpXG5cbigqIG1hdGNoLXBhdHRlcm4gKilcbmFuZCBtYXRjaF9wYXR0ZXJuIHBhdHRlcm4gdmFsdWUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgKFN5bWJvbCBcIl9cIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwYXR0ZXJuKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAocGF0dGVybikpOyAoU3ltYm9sIFwiP1wiKV0pKSkpIHRoZW4gKGxldCBwcmVkID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHBhdHRlcm4pICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gKGNla19jYWxsIChwcmVkKSAoKExpc3QgW3ZhbHVlXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGF0dGVybikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKHBhdHRlcm4pKTsgKFN5bWJvbCBcInF1b3RlXCIpXSkpKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFt2YWx1ZTsgKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHBhdHRlcm4pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSkpIHZhbHVlKSkgaW4gKEJvb2wgdHJ1ZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKHZhbHVlKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocGF0dGVybikpOyAobGVuICh2YWx1ZSkpXSkpKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgcGFpcnMgPSAocHJpbV9jYWxsIFwiemlwXCIgW3BhdHRlcm47IHZhbHVlXSkgaW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHBhaXIgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIChzeF90b19saXN0IHBhaXJzKSkpKSkgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyB2YWx1ZV0pKSkpKSlcblxuKCogc3RlcC1zZi1tYXRjaCAqKVxuYW5kIHN0ZXBfc2ZfbWF0Y2ggYXJncyBlbnYga29udCA9XG4gIChsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGNsYXVzZXMgPSAocmVzdCAoYXJncykpIGluIChsZXQgcmVzdWx0JyA9IChtYXRjaF9maW5kX2NsYXVzZSAodmFsJykgKGNsYXVzZXMpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN1bHQnKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwibWF0Y2g6IG5vIGNsYXVzZSBtYXRjaGVkIFwiKTsgKGluc3BlY3QgKHZhbCcpKV0pKSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVzdWx0JykgKChOdW1iZXIgMS4wKSkpKSAoKGZpcnN0IChyZXN1bHQnKSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1oYW5kbGVyLWJpbmQgKilcbmFuZCBzdGVwX3NmX2hhbmRsZXJfYmluZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBoYW5kbGVyX3NwZWNzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBoYW5kbGVycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKHNwZWMpKSkgKGVudikpKSk7ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChzcGVjKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpXSkpIChzeF90b19saXN0IGhhbmRsZXJfc3BlY3MpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lIChoYW5kbGVycykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1yZXN0YXJ0LWNhc2UgKilcbmFuZCBzdGVwX3NmX3Jlc3RhcnRfY2FzZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBib2R5ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3RhcnRfc3BlY3MgPSAocmVzdCAoYXJncykpIGluIGxldCByZXN0YXJ0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyhpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChzcGVjKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgZWxzZSAoZmlyc3QgKHNwZWMpKSk7IChudGggKHNwZWMpICgoTnVtYmVyIDEuMCkpKTsgKG50aCAoc3BlYykgKChOdW1iZXIgMi4wKSkpXSkpIChzeF90b19saXN0IHJlc3RhcnRfc3BlY3MpKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzdGFydF9mcmFtZSAocmVzdGFydHMpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNpZ25hbCAqKVxuYW5kIHN0ZXBfc2Zfc2lnbmFsIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGNvbmRpdGlvbiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAoa29udF9maW5kX2hhbmRsZXIgKGtvbnQpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5oYW5kbGVkIGNvbmRpdGlvbjogXCIpOyAoaW5zcGVjdCAoY29uZGl0aW9uKSldKSkpKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChoYW5kbGVyX2ZuKSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoZW52KSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSAoZW52KSAoa29udCkpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWludm9rZS1yZXN0YXJ0ICopXG5hbmQgc3RlcF9zZl9pbnZva2VfcmVzdGFydCBhcmdzIGVudiBrb250ID1cbiAgKGxldCByZXN0YXJ0X25hbWUgPSAobGV0IHJuID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkpIGluIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocm4pKSkgdGhlbiAoc3ltYm9sX25hbWUgKHJuKSkgZWxzZSBybikpIGluIGxldCByZXN0YXJ0X2FyZyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZm91bmQgPSAoa29udF9maW5kX3Jlc3RhcnQgKGtvbnQpIChyZXN0YXJ0X25hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmb3VuZCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vIHJlc3RhcnQgbmFtZWQ6IFwiKTsgKGluc3BlY3QgKHJlc3RhcnRfbmFtZSkpXSkpKSkpIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAoZm91bmQpKSBpbiBsZXQgcmVzdGFydF9mcmFtZSA9IChudGggKGZvdW5kKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHJlc3Rfa29udCA9IChudGggKGZvdW5kKSAoKE51bWJlciAyLjApKSkgaW4gKGxldCBwYXJhbXMgPSAobnRoIChlbnRyeSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKG50aCAoZW50cnkpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcmVzdGFydF9lbnYgPSAoZW52X2V4dGVuZCAoKGdldCAocmVzdGFydF9mcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhcmFtcykpKSkpKSkgdGhlbiAoZW52X2JpbmQgcmVzdGFydF9lbnYgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhcmFtcykpKSByZXN0YXJ0X2FyZykgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChyZXN0YXJ0X2VudikgKHJlc3Rfa29udCkpKSkpKSlcblxuKCogc3RlcC1zZi1pZiAqKVxuYW5kIHN0ZXBfc2ZfaWYgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9pZl9mcmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXdoZW4gKilcbmFuZCBzdGVwX3NmX3doZW4gYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV93aGVuX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWJlZ2luICopXG5hbmQgc3RlcF9zZl9iZWdpbiBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWxldCAqKVxuYW5kIHN0ZXBfc2ZfbGV0IGFyZ3MgZW52IGtvbnQgPVxuICBsZXQgcGFpcnMgPSByZWYgTmlsIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGFyZ3MpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbmFtZWRfbGV0IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYmluZGluZ3MpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9iaW5kaW5nID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKGZpcnN0IChiaW5kaW5ncykpIGVsc2UgKExpc3QgWyhmaXJzdCAoYmluZGluZ3MpKTsgKG50aCAoYmluZGluZ3MpICgoTnVtYmVyIDEuMCkpKV0pKSBpbiBsZXQgcmVzdF9iaW5kaW5ncyA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChyZXN0IChiaW5kaW5ncykpIGVsc2UgKGxldCBwYWlycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIGkgLT4gKHBhaXJzIDo9IHN4X2FwcGVuZF9iICFwYWlycyAoTGlzdCBbKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtpOyAoTnVtYmVyIDIuMCldKSkpOyAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbaTsgKE51bWJlciAyLjApXSldKSkpXSk7IE5pbCkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAxLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpIGluICFwYWlycykpKSBpbiAobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChmaXJzdF9iaW5kaW5nKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2xldF9mcmFtZSAodm5hbWUpIChyZXN0X2JpbmRpbmdzKSAoYm9keSkgKGxvY2FsKSkpIChrb250KSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lICopXG5hbmQgc3RlcF9zZl9kZWZpbmUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgaGFzX2VmZmVjdHMgPSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDQuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJlZmZlY3RzXCIpXSkpKSBpbiBsZXQgdmFsX2lkeCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgNC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImVmZmVjdHNcIildKSkpKSB0aGVuIChOdW1iZXIgMy4wKSBlbHNlIChOdW1iZXIgMS4wKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciA0LjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiZWZmZWN0c1wiKV0pKSkpIHRoZW4gKG50aCAoYXJncykgKChOdW1iZXIgMi4wKSkpIGVsc2UgTmlsKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICh2YWxfaWR4KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kZWZpbmVfZnJhbWUgKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgKGVudikgKGhhc19lZmZlY3RzKSAoZWZmZWN0X2xpc3QpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNldCEgKilcbmFuZCBzdGVwX3NmX3NldF9iIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3NldF9mcmFtZSAoKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWFuZCAqKVxuYW5kIHN0ZXBfc2ZfYW5kIGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYW5kX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1vciAqKVxuYW5kIHN0ZXBfc2Zfb3IgYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCBmYWxzZSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfb3JfZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLWNvbmQgKilcbmFuZCBzdGVwX3NmX2NvbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgc2NoZW1lX3AgPSAoY29uZF9zY2hlbWVfcCAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKHNjaGVtZV9wKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoYXJncykpIGluIGxldCB0ZXN0ID0gKGZpcnN0IChjbGF1c2UpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICh0ZXN0KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAoYXJncykgKGVudikgKChCb29sIHRydWUpKSkpIChrb250KSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IHRlc3QgPSAoZmlyc3QgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAodGVzdCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKGFyZ3MpIChlbnYpICgoQm9vbCBmYWxzZSkpKSkgKGtvbnQpKSkpKSkpKSlcblxuKCogc3RlcC1zZi1jYXNlICopXG5hbmQgc3RlcF9zZl9jYXNlIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY2FzZV9mcmFtZSAoTmlsKSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi10aHJlYWQtZmlyc3QgKilcbmFuZCBzdGVwX3NmX3RocmVhZF9maXJzdCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1sYW1iZGEgKilcbmFuZCBzdGVwX3NmX2xhbWJkYSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbGFtYmRhIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSlcblxuKCogc3RlcC1zZi1zY29wZSAqKVxuYW5kIHN0ZXBfc2Zfc2NvcGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3RfYXJncyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgdmFsJyA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keSA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9hcmdzKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh2YWwnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0X2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5IDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0X2FyZ3M7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5IDo9IHJlc3RfYXJnczsgTmlsKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICghYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKCFib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9hY2NfZnJhbWUgKG5hbWUpICghdmFsJykgKChyZXN0ICghYm9keSkpKSAoZW52KSkpIChrb250KSkpKSkpKVxuXG4oKiBzdGVwLXNmLXByb3ZpZGUgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Byb3ZpZGVfZnJhbWUgKG5hbWUpICh2YWwnKSAoKHJlc3QgKGJvZHkpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWNvbnRleHQg4oCUIGNoZWNrIGtvbnQgcHJvdmlkZSBmcmFtZXMgZmlyc3QsIHRoZW4gZmFsbCBiYWNrIHRvIHNjb3BlX3N0YWNrcyAqKVxuYW5kIHN0ZXBfc2ZfY29udGV4dCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgZGVmYXVsdF92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIE5pbCkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9wcm92aWRlIChrb250KSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAoZnJhbWUpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBzY29wZV92YWwgPSAoc3hfY29udGV4dCAobmFtZSkgKE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc2NvcGVfdmFsKSkpIHRoZW4gZGVmYXVsdF92YWwgZWxzZSBzY29wZV92YWwpKSAoZW52KSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2YtZW1pdCAqKVxuYW5kIHN0ZXBfc2ZfZW1pdCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfc2NvcGVfYWNjIChrb250KSAobmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChzeF9kaWN0X3NldF9iIGZyYW1lIChTdHJpbmcgXCJlbWl0dGVkXCIpIChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpOyAoTGlzdCBbdmFsJ10pXSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWVtaXR0ZWQgKilcbmFuZCBzdGVwX3NmX2VtaXR0ZWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9zY29wZV9hY2MgKGtvbnQpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmcmFtZSkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVtaXR0ZWRcIikpKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcmVzZXQgKilcbmFuZCBzdGVwX3NmX3Jlc2V0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzZXRfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1zaGlmdCAqKVxuYW5kIHN0ZXBfc2Zfc2hpZnQgYXJncyBlbnYga29udCA9XG4gIChsZXQga19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBib2R5ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBjYXB0dXJlZF9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkID0gKGZpcnN0IChjYXB0dXJlZF9yZXN1bHQpKSBpbiBsZXQgcmVzdF9rb250ID0gKG50aCAoY2FwdHVyZWRfcmVzdWx0KSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBrID0gKG1ha2VfY2VrX2NvbnRpbnVhdGlvbiAoY2FwdHVyZWQpIChyZXN0X2tvbnQpKSBpbiAobGV0IHNoaWZ0X2VudiA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgc2hpZnRfZW52IChzeF90b19zdHJpbmcga19uYW1lKSBrKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoc2hpZnRfZW52KSAocmVzdF9rb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVyZWYgKilcbmFuZCBzdGVwX3NmX2RlcmVmIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGVyZWZfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogY2VrLWNhbGwgKilcbmFuZCBjZWtfY2FsbCBmIGFyZ3MgPVxuICAobGV0IGEgPSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChhcmdzKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgYXJncykgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX2xhbWJkYSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfY2FsbGFibGUgKGYpKSkpIHRoZW4gKGNla19ydW4gKChjb250aW51ZV93aXRoX2NhbGwgKGYpIChhKSAoKG1ha2VfZW52ICgpKSkgKGEpICgoTGlzdCBbXSkpKSkpIGVsc2UgTmlsKSkpXG5cbigqIHJlYWN0aXZlLXNoaWZ0LWRlcmVmICopXG5hbmQgcmVhY3RpdmVfc2hpZnRfZGVyZWYgc2lnJyBlbnYga29udCA9XG4gIChsZXQgc2Nhbl9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkX2ZyYW1lcyA9IChmaXJzdCAoc2Nhbl9yZXN1bHQpKSBpbiBsZXQgcmVzZXRfZnJhbWUgPSAobnRoIChzY2FuX3Jlc3VsdCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCByZW1haW5pbmdfa29udCA9IChudGggKHNjYW5fcmVzdWx0KSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHVwZGF0ZV9mbiA9IChnZXQgKHJlc2V0X2ZyYW1lKSAoKFN0cmluZyBcInVwZGF0ZS1mblwiKSkpIGluIChsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN1Yl9kaXNwb3NlcnMgOj0gKExpc3QgW10pOyBOaWwpKSBpbiAobGV0IG5ld19yZXNldCA9IChtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIChlbnYpICh1cGRhdGVfZm4pICgoQm9vbCBmYWxzZSkpKSBpbiBsZXQgbmV3X2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW25ld19yZXNldF0pOyByZW1haW5pbmdfa29udF0pIGluICh3aXRoX2lzbGFuZF9zY29wZSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2RdIC0+IChmdW4gZCAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKHN1Yl9kaXNwb3NlcnMgOj0gc3hfYXBwZW5kX2IgIXN1Yl9kaXNwb3NlcnMgZDsgTmlsKSkgZCB8IF8gLT4gTmlsKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChuZXdfa29udCkpKSkpICgpKSkpKSkpKSkgKCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX2FkZF9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlZ2lzdGVyX2luX3Njb3BlICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX3JlbW92ZV9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkpICgpKSkpKSkgaW4gKGxldCBpbml0aWFsX2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW3Jlc2V0X2ZyYW1lXSk7IHJlbWFpbmluZ19rb250XSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChpbml0aWFsX2tvbnQpKSkpKSkpKVxuXG4oKiBzdGVwLWV2YWwtY2FsbCAqKVxuYW5kIHN0ZXBfZXZhbF9jYWxsIGhlYWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgaG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChoZWFkKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoaGVhZCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoTmlsKSAoKExpc3QgW10pKSAoYXJncykgKGVudikgKGFyZ3MpIChobmFtZSkpKSAoa29udCkpKSkpXG5cbigqIGhvLWZvcm0tbmFtZT8gKilcbmFuZCBob19mb3JtX25hbWVfcCBuYW1lID1cbiAgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpKSkpKSlcblxuKCogaG8tZm4/ICopXG5hbmQgaG9fZm5fcCB2ID1cbiAgKGxldCBfb3IgPSAoaXNfY2FsbGFibGUgKHYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2xhbWJkYSAodikpKVxuXG4oKiBoby1zd2FwLWFyZ3MgKilcbmFuZCBob19zd2FwX2FyZ3MgaG9fdHlwZSBldmFsZWQgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBhID0gKGZpcnN0IChldmFsZWQpKSBpbiBsZXQgYiA9IChudGggKGV2YWxlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGhvX2ZuX3AgKGEpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2ZuX3AgKGIpKSkpIHRoZW4gKExpc3QgW2I7IChudGggKGV2YWxlZCkgKChOdW1iZXIgMi4wKSkpOyBhXSkgZWxzZSBldmFsZWQpKSBlbHNlIChsZXQgYSA9IChmaXJzdCAoZXZhbGVkKSkgaW4gbGV0IGIgPSAobnRoIChldmFsZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChob19mbl9wIChhKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChob19mbl9wIChiKSkpKSB0aGVuIChMaXN0IFtiOyBhXSkgZWxzZSBldmFsZWQpKSlcblxuKCogaG8tc2V0dXAtZGlzcGF0Y2ggKilcbmFuZCBob19zZXR1cF9kaXNwYXRjaCBob190eXBlIGV2YWxlZCBlbnYga29udCA9XG4gIChsZXQgb3JkZXJlZCA9IChob19zd2FwX2FyZ3MgKGhvX3R5cGUpIChldmFsZWQpKSBpbiAobGV0IGYgPSAoZmlyc3QgKG9yZGVyZWQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9tYXBfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhOdW1iZXIgMC4wKTsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2ZpbHRlcl9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpICgoZmlyc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGluaXQgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAyLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGluaXQpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW2luaXQ7IChmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9yZWR1Y2VfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2V2ZXJ5X2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgY29sbCA9IChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKGNvbGwpKV0pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZm9yX2VhY2hfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBITyB0eXBlOiBcIik7IGhvX3R5cGVdKSkpKSkpKSkpKSkpKSlcblxuKCogc3RlcC1oby1tYXAgKilcbmFuZCBzdGVwX2hvX21hcCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwibWFwXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1tYXAtaW5kZXhlZCAqKVxuYW5kIHN0ZXBfaG9fbWFwX2luZGV4ZWQgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1maWx0ZXIgKilcbmFuZCBzdGVwX2hvX2ZpbHRlciBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwiZmlsdGVyXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1yZWR1Y2UgKilcbmFuZCBzdGVwX2hvX3JlZHVjZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwicmVkdWNlXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1zb21lICopXG5hbmQgc3RlcF9ob19zb21lIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJzb21lXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1ldmVyeSAqKVxuYW5kIHN0ZXBfaG9fZXZlcnkgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImV2ZXJ5XCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1mb3ItZWFjaCAqKVxuYW5kIHN0ZXBfaG9fZm9yX2VhY2ggYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImZvci1lYWNoXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1jb250aW51ZSAqKVxuYW5kIHN0ZXBfY29udGludWUgc3RhdGUgPVxuICAobGV0IHZhbHVlID0gKGNla192YWx1ZSAoc3RhdGUpKSBpbiBsZXQgZW52ID0gKGNla19lbnYgKHN0YXRlKSkgaW4gbGV0IGtvbnQgPSAoY2VrX2tvbnQgKHN0YXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGtvbnRfZW1wdHlfcCAoa29udCkpKSB0aGVuIHN0YXRlIGVsc2UgKGxldCBmcmFtZSA9IChrb250X3RvcCAoa29udCkpIGluIGxldCByZXN0X2sgPSAoa29udF9wb3AgKGtvbnQpKSBpbiBsZXQgZnQgPSAoZnJhbWVfdHlwZSAoZnJhbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ0aGVuXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJ3aGVuXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKGxldCBib2R5ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYm9keVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHkpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChib2R5KSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImJlZ2luXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgbG9jYWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHRfYmluZGluZyA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAobmV4dF9iaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2JpbmRpbmcpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfbGV0X2ZyYW1lICh2bmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGJvZHkpIChsb2NhbCkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCBoYXNfZWZmZWN0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhhcy1lZmZlY3RzXCIpKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWZmZWN0LWxpc3RcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfbGFtYmRhICh2YWx1ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19uaWwgKChsYW1iZGFfbmFtZSAodmFsdWUpKSkpKSkgdGhlbiAoc2V0X2xhbWJkYV9uYW1lIHZhbHVlIChzeF90b19zdHJpbmcgbmFtZSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKGhhc19lZmZlY3RzKSB0aGVuIChsZXQgZWZmZWN0X25hbWVzID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGVmZmVjdF9saXN0KSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2VdKSkpKSAoc3hfdG9fbGlzdCBlZmZlY3RfbGlzdCkpKSBlbHNlIChMaXN0IFsoU3RyaW5nIChzeF9zdHIgW2VmZmVjdF9saXN0XSkpXSkpIGluIGxldCBlZmZlY3RfYW5ucyA9IChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChmZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkpIHRoZW4gKGVudl9nZXQgKGZlbnYpICgoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpKSBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGVmZmVjdF9hbm5zIG5hbWUgZWZmZWN0X25hbWVzKSkgaW4gKGVudl9iaW5kIGZlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpIGVmZmVjdF9hbm5zKSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInNldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfc2V0IGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJhbmRcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHZhbHVlKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiByZXN0X2sgZWxzZSAoa29udF9wdXNoICgobWFrZV9hbmRfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwib3JcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChyZW1haW5pbmcpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gcmVzdF9rIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2Vfb3JfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgc2NoZW1lX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChzY2hlbWVfcCkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKChmaXJzdCAocmVtYWluaW5nKSkpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF9jbGF1c2VzID0gKHJlc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChuZXh0X2NsYXVzZXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF9jbGF1c2UgPSAoZmlyc3QgKG5leHRfY2xhdXNlcykpIGluIGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHRfY2xhdXNlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlIChuZXh0X3Rlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKG5leHRfY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKG5leHRfdGVzdCkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChuZXh0X2NsYXVzZXMpIChmZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKHJlc3RfaykpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVtYWluaW5nKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHQgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVtYWluaW5nOyAoTnVtYmVyIDIuMCldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChuZXh0KSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dCkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlIChuZXh0X3Rlc3QpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAobmV4dCkgKGZlbnYpICgoQm9vbCBmYWxzZSkpKSkgKHJlc3RfaykpKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJjYXNlXCIpXSkpIHRoZW4gKGxldCBtYXRjaF92YWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJtYXRjaC12YWxcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaF92YWwpKSkgdGhlbiAoc2ZfY2FzZV9zdGVwX2xvb3AgKHZhbHVlKSAocmVtYWluaW5nKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKHNmX2Nhc2Vfc3RlcF9sb29wIChtYXRjaF92YWwpIChyZW1haW5pbmcpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwidGhyZWFkXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBmb3JtID0gKGZpcnN0IChyZW1haW5pbmcpKSBpbiBsZXQgcmVzdF9mb3JtcyA9IChyZXN0IChyZW1haW5pbmcpKSBpbiBsZXQgbmV3X2tvbnQgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKHJlc3QgKHJlbWFpbmluZykpKSkpIHRoZW4gcmVzdF9rIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChmb3JtKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGZvcm0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2Zvcm1fbmFtZV9wICgoc3ltYm9sX25hbWUgKChmaXJzdCAoZm9ybSkpKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChjb25zICgoZmlyc3QgKGZvcm0pKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pKSAoKHJlc3QgKGZvcm0pKSkpKSkpIChmZW52KSAobmV3X2tvbnQpKSBlbHNlIChsZXQgcmVzdWx0JyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmb3JtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoZm9ybSkpKSAoZmVudikpKSkgaW4gbGV0IHJhcmdzID0gKExpc3QgKExpc3QubWFwIChmdW4gYSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoYSkgKGZlbnYpKSkpKSAoc3hfdG9fbGlzdCAocmVzdCAoZm9ybSkpKSkpIGluIGxldCBhbGxfYXJncyA9IChjb25zICh2YWx1ZSkgKHJhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2NhbGxhYmxlIChmKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpKSkpKSkgdGhlbiAoc3hfYXBwbHkgZiBhbGxfYXJncykgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHRyYW1wb2xpbmUgKChjYWxsX2xhbWJkYSAoZikgKGFsbF9hcmdzKSAoZmVudikpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCItPiBmb3JtIG5vdCBjYWxsYWJsZTogXCIpOyAoaW5zcGVjdCAoZikpXSkpKSkpKSkpIGVsc2UgKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGZvcm0pIChmZW52KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfY2FsbGFibGUgKGYpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkpKSkpKSB0aGVuIChjZWtfY2FsbCAoZikgKExpc3QgW3ZhbHVlXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAoZikpKSB0aGVuICh0cmFtcG9saW5lICgoY2FsbF9sYW1iZGEgKGYpICgoTGlzdCBbdmFsdWVdKSkgKGZlbnYpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiLT4gZm9ybSBub3QgY2FsbGFibGU6IFwiKTsgKGluc3BlY3QgKGYpKV0pKSkpKSkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfZm9ybXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChyZXN0X2Zvcm1zKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiYXJnXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCBldmFsZWQgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJldmFsZWRcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgcmF3X2FyZ3MgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyYXctYXJnc1wiKSkpIGluIGxldCBobmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhlYWQtbmFtZVwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGYpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgaG5hbWUpKSB0aGVuIChzdHJpY3RfY2hlY2tfYXJncyAoaG5hbWUpICgoTGlzdCBbXSkpKSBlbHNlIE5pbCkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoY29udGludWVfd2l0aF9jYWxsICh2YWx1ZSkgKChMaXN0IFtdKSkgKGZlbnYpIChyYXdfYXJncykgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAodmFsdWUpICgoTGlzdCBbXSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGxldCBuZXdfZXZhbGVkID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtldmFsZWQ7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBobmFtZSkpIHRoZW4gKHN0cmljdF9jaGVja19hcmdzIChobmFtZSkgKG5ld19ldmFsZWQpKSBlbHNlIE5pbCkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChuZXdfZXZhbGVkKSAoZmVudikgKHJhd19hcmdzKSAocmVzdF9rKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoZikgKG5ld19ldmFsZWQpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRpY3RcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCBsYXN0X3Jlc3VsdCA9IChsYXN0IChyZXN1bHRzKSkgaW4gbGV0IGNvbXBsZXRlZCA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3VsdHM7IChOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcImRlY1wiIFsobGVuIChyZXN1bHRzKSldKV0pOyAoTGlzdCBbKExpc3QgWyhmaXJzdCAobGFzdF9yZXN1bHQpKTsgdmFsdWVdKV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgZCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiBkIChmaXJzdCAocGFpcikpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCBjb21wbGV0ZWQpOyBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKGQpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChsZXQgbmV4dF9lbnRyeSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2VudHJ5KSAoKE51bWJlciAxLjApKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGljdF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjb21wbGV0ZWQ7IChMaXN0IFsoTGlzdCBbKGZpcnN0IChuZXh0X2VudHJ5KSldKV0pXSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiaG8tc2V0dXBcIildKSkgdGhlbiAobGV0IGhvX3R5cGUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJoby10eXBlXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpOyAoTGlzdCBbdmFsdWVdKV0pIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChob19zZXR1cF9kaXNwYXRjaCAoaG9fdHlwZSkgKGV2YWxlZCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoaG9fdHlwZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGV2YWxlZCkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwicmVzZXRcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRlcmVmXCIpXSkpIHRoZW4gKGxldCB2YWwnID0gdmFsdWUgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19zaWduYWwgKHZhbCcpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWwnKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIChyZXN0X2spKSkgdGhlbiAocmVhY3RpdmVfc2hpZnRfZGVyZWYgKHZhbCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgobGV0IGN0eCA9IChzeF9jb250ZXh0ICgoU3RyaW5nIFwic3gtcmVhY3RpdmVcIikpIChOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5IChjdHgpIHRoZW4gKGxldCBkZXBfbGlzdCA9IHJlZiAoKGdldCAoY3R4KSAoKFN0cmluZyBcImRlcHNcIikpKSkgaW4gbGV0IG5vdGlmeV9mbiA9IChnZXQgKGN0eCkgKChTdHJpbmcgXCJub3RpZnlcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbIWRlcF9saXN0OyB2YWwnXSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChkZXBfbGlzdCA6PSBzeF9hcHBlbmRfYiAhZGVwX2xpc3QgdmFsJzsgTmlsKSkgaW4gKHNpZ25hbF9hZGRfc3ViX2IgKHZhbCcpIChub3RpZnlfZm4pKSkgZWxzZSBOaWwpKSBlbHNlIE5pbCkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKChzaWduYWxfdmFsdWUgKHZhbCcpKSkgKGZlbnYpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKGxldCB1cGRhdGVfZm4gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ1cGRhdGUtZm5cIikpKSBpbiBsZXQgZmlyc3RfcCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpcnN0LXJlbmRlclwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHVwZGF0ZV9mbiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKGZpcnN0X3ApKSkpKSkgdGhlbiAoY2VrX2NhbGwgKHVwZGF0ZV9mbikgKChMaXN0IFt2YWx1ZV0pKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic2NvcGVcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2NvcGVfZnJhbWUgKG5hbWUpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcHJvdmlkZV9mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic2NvcGUtYWNjXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChsZXQgbmV3X2ZyYW1lID0gKG1ha2Vfc2NvcGVfYWNjX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG5ld19mcmFtZSAoU3RyaW5nIFwiZW1pdHRlZFwiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpKSBpbiBuZXdfZnJhbWUpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgaW5kZXhlZCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImluZGV4ZWRcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbmV3X3Jlc3VsdHMgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAobmV3X3Jlc3VsdHMpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IGNhbGxfYXJncyA9IChpZiBzeF90cnV0aHkgKGluZGV4ZWQpIHRoZW4gKExpc3QgWyhsZW4gKG5ld19yZXN1bHRzKSk7IChmaXJzdCAocmVtYWluaW5nKSldKSBlbHNlIChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIGluIGxldCBuZXh0X2ZyYW1lID0gKGlmIHN4X3RydXRoeSAoaW5kZXhlZCkgdGhlbiAobWFrZV9tYXBfaW5kZXhlZF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKG5ld19yZXN1bHRzKSAoZmVudikpIGVsc2UgKG1ha2VfbWFwX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpIChmZW52KSkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChjYWxsX2FyZ3MpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAobmV4dF9mcmFtZSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBjdXJyZW50X2l0ZW0gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJjdXJyZW50LWl0ZW1cIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbmV3X3Jlc3VsdHMgPSAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFtjdXJyZW50X2l0ZW1dKV0pIGVsc2UgcmVzdWx0cykgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAobmV3X3Jlc3VsdHMpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9maWx0ZXJfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChuZXdfcmVzdWx0cykgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW3ZhbHVlOyAoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVkdWNlX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9mb3JfZWFjaF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic29tZVwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc29tZV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9ldmVyeV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImhhbmRsZXJcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaGFuZGxlcl9mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJyZXN0YXJ0XCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJzaWduYWwtcmV0dXJuXCIpXSkpIHRoZW4gKGxldCBzYXZlZF9rb250ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHNhdmVkX2tvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIGZyYW1lIHR5cGU6IFwiKTsgZnRdKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSlcblxuKCogY29udGludWUtd2l0aC1jYWxsICopXG5hbmQgY29udGludWVfd2l0aF9jYWxsIGYgYXJncyBlbnYgcmF3X2FyZ3Mga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChjb250aW51YXRpb25fcCAoZikpKSB0aGVuIChsZXQgYXJnID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiBOaWwgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IGNvbnRfZGF0YSA9IChjb250aW51YXRpb25fZGF0YSAoZikpIGluIChsZXQgY2FwdHVyZWQgPSAoZ2V0IChjb250X2RhdGEpICgoU3RyaW5nIFwiY2FwdHVyZWRcIikpKSBpbiAobGV0IHJlc3VsdCcgPSAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlIChhcmcpIChlbnYpIChjYXB0dXJlZCkpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoZW52KSAoa29udCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2NhbGxhYmxlIChmKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX2NvbXBvbmVudCAoZikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19pc2xhbmQgKGYpKSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc3hfYXBwbHkgZiBhcmdzKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsobGV0IF9vciA9IChsYW1iZGFfbmFtZSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoU3RyaW5nIFwibGFtYmRhXCIpKTsgKFN0cmluZyBcIiBleHBlY3RzIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbcGFyYW1zOyBhcmdzXSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAobGVuIChhcmdzKSldKSk7IE5pbCkpIGluIChtYXRjaCAhaml0X2NhbGxfaG9vaywgZiB3aXRoIHwgU29tZSBob29rLCBMYW1iZGEgbCB3aGVuIGwubF9uYW1lIDw+IE5vbmUgLT4gbGV0IGFyZ3NfbGlzdCA9IG1hdGNoIGFyZ3Mgd2l0aCBMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0gLT4gYSB8IF8gLT4gW10gaW4gKG1hdGNoIGhvb2sgZiBhcmdzX2xpc3Qgd2l0aCBTb21lIHJlc3VsdCAtPiBtYWtlX2Nla192YWx1ZSByZXN1bHQgbG9jYWwga29udCB8IE5vbmUgLT4gbWFrZV9jZWtfc3RhdGUgKGxhbWJkYV9ib2R5IGYpIGxvY2FsIGtvbnQpIHwgXyAtPiBtYWtlX2Nla19zdGF0ZSAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkgKGtvbnQpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChpc19jb21wb25lbnQgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2lzbGFuZCAoZikpKSkgdGhlbiAobGV0IHBhcnNlZCA9IChwYXJzZV9rZXl3b3JkX2FyZ3MgKHJhd19hcmdzKSAoZW52KSkgaW4gbGV0IGt3YXJncyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGNoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGNvbXBvbmVudF9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChsZXQgX29yID0gKGRpY3RfZ2V0IChrd2FyZ3MpIChwKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKGNvbXBvbmVudF9wYXJhbXMgKGYpKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChjb21wb25lbnRfaGFzX2NoaWxkcmVuIChmKSkpIHRoZW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKFN0cmluZyBcImNoaWxkcmVuXCIpKSBjaGlsZHJlbikgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChjb21wb25lbnRfYm9keSAoZikpKSAobG9jYWwpICgoa29udF9wdXNoICgobWFrZV9jb21wX3RyYWNlX2ZyYW1lICgoY29tcG9uZW50X25hbWUgKGYpKSkgKChjb21wb25lbnRfZmlsZSAoZikpKSkpIChrb250KSkpKSkpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vdCBjYWxsYWJsZTogXCIpOyAoaW5zcGVjdCAoZikpXSkpKSkpKSkpKVxuXG4oKiBzZi1jYXNlLXN0ZXAtbG9vcCAqKVxuYW5kIHNmX2Nhc2Vfc3RlcF9sb29wIG1hdGNoX3ZhbCBjbGF1c2VzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoY2xhdXNlcykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdF92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbWF0Y2hfdmFsOyB0ZXN0X3ZhbF0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChzZl9jYXNlX3N0ZXBfbG9vcCAobWF0Y2hfdmFsKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2NsYXVzZXM7IChOdW1iZXIgMi4wKV0pKSAoZW52KSAoa29udCkpKSkpKSlcblxuKCogZXZhbC1leHByLWNlayAqKVxuYW5kIGV2YWxfZXhwcl9jZWsgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG4oKiB0cmFtcG9saW5lLWNlayAqKVxuYW5kIHRyYW1wb2xpbmVfY2VrIHZhbCcgPVxuICAoaWYgc3hfdHJ1dGh5ICgoaXNfdGh1bmsgKHZhbCcpKSkgdGhlbiAoZXZhbF9leHByX2NlayAoKHRodW5rX2V4cHIgKHZhbCcpKSkgKCh0aHVua19lbnYgKHZhbCcpKSkpIGVsc2UgdmFsJylcblxuKCogZXZhbC1leHByICopXG5hbmQgZXZhbF9leHByIGV4cHIgZW52ID1cbiAgKGNla19ydW4gKChtYWtlX2Nla19zdGF0ZSAoZXhwcikgKGVudikgKChMaXN0IFtdKSkpKSlcblxuXG4oKiBXaXJlIHVwIHRyYW1wb2xpbmUgdG8gcmVzb2x2ZSB0aHVua3MgdmlhIHRoZSBDRUsgbWFjaGluZSAqKVxubGV0ICgpID0gdHJhbXBvbGluZV9mbiA6PSAoZnVuIHYgLT5cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgVGh1bmsgKGV4cHIsIGVudikgLT4gZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgXyAtPiB2KVxuXG4oKiBXaXJlIHVwIHRoZSBwcmltaXRpdmVzIHRyYW1wb2xpbmUgc28gY2FsbF9hbnkgaW4gSE8gZm9ybXMgcmVzb2x2ZXMgVGh1bmtzICopXG5sZXQgKCkgPSBTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIDo9ICF0cmFtcG9saW5lX2ZuXG5cbigqIENvbGxlY3QgY29tcG9uZW50IHRyYWNlIGZyb20gYSBrb250IHZhbHVlICopXG5sZXQgY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICBsZXQgdHJhY2UgPSByZWYgW10gaW5cbiAgbGV0IGsgPSByZWYga29udCBpblxuICB3aGlsZSAobWF0Y2ggIWsgd2l0aCBMaXN0IChfOjpfKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgZG9cbiAgICAobWF0Y2ggIWsgd2l0aFxuICAgICB8IExpc3QgKGZyYW1lIDo6IHJlc3QpIC0+XG4gICAgICAgKG1hdGNoIGZyYW1lIHdpdGhcbiAgICAgICAgfCBDZWtGcmFtZSBmIHdoZW4gZi5jZl90eXBlID0gXCJjb21wLXRyYWNlXCIgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGYuY2ZfbmFtZSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiIGluXG4gICAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBmLmNmX2VudiB3aXRoIFN0cmluZyBzIC0+IHMgfCBOaWwgLT4gXCJcIiB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIHRyYWNlIDo9IChuYW1lLCBmaWxlKSA6OiAhdHJhY2VcbiAgICAgICAgfCBEaWN0IGQgd2hlbiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidHlwZVwiIHdpdGggU29tZSAoU3RyaW5nIFwiY29tcC10cmFjZVwiKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIm5hbWVcIiB3aXRoIFNvbWUgKFN0cmluZyBzKSAtPiBzIHwgXyAtPiBcIj9cIiBpblxuICAgICAgICAgIGxldCBmaWxlID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZmlsZVwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICB0cmFjZSA6PSAobmFtZSwgZmlsZSkgOjogIXRyYWNlXG4gICAgICAgIHwgXyAtPiAoKSk7XG4gICAgICAgayA6PSBMaXN0IHJlc3RcbiAgICAgfCBfIC0+IGsgOj0gTGlzdCBbXSlcbiAgZG9uZTtcbiAgTGlzdC5yZXYgIXRyYWNlXG5cbigqIEZvcm1hdCBhIGNvbXAtdHJhY2UgaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyAqKVxubGV0IGZvcm1hdF9jb21wX3RyYWNlIHRyYWNlID1cbiAgbWF0Y2ggdHJhY2Ugd2l0aFxuICB8IFtdIC0+IFwiXCJcbiAgfCBlbnRyaWVzIC0+XG4gICAgbGV0IGxpbmVzID0gTGlzdC5tYXBpIChmdW4gaSAobmFtZSwgZmlsZSkgLT5cbiAgICAgIGxldCBwcmVmaXggPSBpZiBpID0gMCB0aGVuIFwiICBpbiBcIiBlbHNlIFwiICBjYWxsZWQgZnJvbSBcIiBpblxuICAgICAgaWYgZmlsZSA9IFwiXCIgdGhlbiBwcmVmaXggXiBcIn5cIiBeIG5hbWVcbiAgICAgIGVsc2UgcHJlZml4IF4gXCJ+XCIgXiBuYW1lIF4gXCIgKFwiIF4gZmlsZSBeIFwiKVwiXG4gICAgKSBlbnRyaWVzIGluXG4gICAgXCJcblwiIF4gU3RyaW5nLmNvbmNhdCBcIlxuXCIgbGluZXNcblxuKCogRW5oYW5jZSBhbiBlcnJvciBtZXNzYWdlIHdpdGggY29tcG9uZW50IHRyYWNlICopXG5sZXQgZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIG1zZyA9XG4gIGxldCB0cmFjZSA9IGNvbGxlY3RfY29tcF90cmFjZSAhX2xhc3RfZXJyb3Jfa29udCBpblxuICBfbGFzdF9lcnJvcl9rb250IDo9IE5pbDtcbiAgbXNnIF4gKGZvcm1hdF9jb21wX3RyYWNlIHRyYWNlKVxuXG5cblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2VxdWFsIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN4X3J1bnRpbWUiLCJTeF90eXBlcyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0xpc3QiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3hfcHJpbWl0aXZlcyIsInRyYW1wb2xpbmVfZm4iLCJ2IiwidHJhbXBvbGluZSIsInN0cmljdF9yZWYiLCJzdHJpY3QiLCJwcmltX3BhcmFtX3R5cGVzX3JlZiIsInByaW1fcGFyYW1fdHlwZXMiLCJjc3RfZXZhbCIsIm1ha2VfY2VrX3N0YXRlIiwiY29udHJvbCIsImVudiIsImtvbnQiLCJjc3RfY29udGludWUiLCJtYWtlX2Nla192YWx1ZSIsInZhbHVlIiwiY3N0IiwiY3N0X2tvbnQiLCJjc3RfcGhhc2UiLCJjZWtfdGVybWluYWxfcCIsInN0YXRlIiwiYW5kIiwiY2VrX2NvbnRyb2wiLCJzIiwiY3N0X2VudiIsImNla19lbnYiLCJjZWtfa29udCIsImNla19waGFzZSIsImNzdF92YWx1ZSIsImNla192YWx1ZSIsImNzdF9pZiIsIm1ha2VfaWZfZnJhbWUiLCJ0aGVuX2V4cHIiLCJlbHNlX2V4cHIiLCJjc3Rfd2hlbiIsIm1ha2Vfd2hlbl9mcmFtZSIsImJvZHlfZXhwcnMiLCJjc3RfYmVnaW4iLCJtYWtlX2JlZ2luX2ZyYW1lIiwicmVtYWluaW5nIiwiY3N0X2xldCIsIm1ha2VfbGV0X2ZyYW1lIiwibmFtZSIsImJvZHkiLCJsb2NhbCIsImNzdF9kZWZpbmUiLCJtYWtlX2RlZmluZV9mcmFtZSIsImhhc19lZmZlY3RzIiwiZWZmZWN0X2xpc3QiLCJjc3Rfc2V0IiwibWFrZV9zZXRfZnJhbWUiLCJjc3RfYXJnIiwibWFrZV9hcmdfZnJhbWUiLCJldmFsZWQiLCJyYXdfYXJncyIsImhlYWRfbmFtZSIsIm1ha2VfY2FsbF9mcmFtZSIsImFyZ3MiLCJjc3RfY29uZCIsIm1ha2VfY29uZF9mcmFtZSIsInNjaGVtZV9wIiwiY3N0X2Nhc2UiLCJtYWtlX2Nhc2VfZnJhbWUiLCJtYXRjaF92YWwiLCJjc3RfdGhyZWFkIiwibWFrZV90aHJlYWRfZnJhbWUiLCJjc3RfbWFwIiwibWFrZV9tYXBfZnJhbWUiLCJyZXN1bHRzIiwibWFrZV9tYXBfaW5kZXhlZF9mcmFtZSIsImNzdF9maWx0ZXIiLCJtYWtlX2ZpbHRlcl9mcmFtZSIsImN1cnJlbnRfaXRlbSIsImNzdF9yZWR1Y2UiLCJtYWtlX3JlZHVjZV9mcmFtZSIsImNzdF9mb3JfZWFjaCIsIm1ha2VfZm9yX2VhY2hfZnJhbWUiLCJjc3Rfc29tZSIsIm1ha2Vfc29tZV9mcmFtZSIsImNzdF9ldmVyeSIsIm1ha2VfZXZlcnlfZnJhbWUiLCJjc3Rfc2NvcGUiLCJtYWtlX3Njb3BlX2ZyYW1lIiwiY3N0X3Byb3ZpZGUiLCJtYWtlX3Byb3ZpZGVfZnJhbWUiLCJjc3Rfc2NvcGVfYWNjIiwibWFrZV9zY29wZV9hY2NfZnJhbWUiLCJjc3RfcmVzZXQiLCJtYWtlX3Jlc2V0X2ZyYW1lIiwiY3N0X2RpY3QiLCJtYWtlX2RpY3RfZnJhbWUiLCJjc3RfYW5kIiwibWFrZV9hbmRfZnJhbWUiLCJjc3Rfb3IiLCJtYWtlX29yX2ZyYW1lIiwiY3N0X2R5bmFtaWNfd2luZCIsIm1ha2VfZHluYW1pY193aW5kX2ZyYW1lIiwicGhhc2UiLCJib2R5X3RodW5rIiwiYWZ0ZXJfdGh1bmsiLCJjc3RfcmVhY3RpdmVfcmVzZXQiLCJtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIiwidXBkYXRlX2ZuIiwiZmlyc3RfcmVuZGVyX3AiLCJjc3RfZGVyZWYiLCJtYWtlX2RlcmVmX2ZyYW1lIiwiY3N0X2hvX3NldHVwIiwibWFrZV9ob19zZXR1cF9mcmFtZSIsImhvX3R5cGUiLCJyZW1haW5pbmdfYXJncyIsImV2YWxlZF9hcmdzIiwiY3N0X2NvbXBfdHJhY2UiLCJtYWtlX2NvbXBfdHJhY2VfZnJhbWUiLCJmaWxlIiwiY3N0X2ZpbGUiLCJjc3RfbmFtZSIsImtvbnRfY29sbGVjdF9jb21wX3RyYWNlIiwiZnJhbWUiLCJkIiwiY3N0X2hhbmRsZXIiLCJtYWtlX2hhbmRsZXJfZnJhbWUiLCJoYW5kbGVycyIsImNzdF9yZXN0YXJ0IiwibWFrZV9yZXN0YXJ0X2ZyYW1lIiwicmVzdGFydHMiLCJjc3Rfc2lnbmFsX3JldHVybiIsIm1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSIsInNhdmVkX2tvbnQiLCJmaW5kX21hdGNoaW5nX2hhbmRsZXIiLCJjb25kaXRpb24iLCJwYWlyIiwicHJlZCIsImhhbmRsZXJfZm4iLCJjc3RfZiIsImtvbnRfZmluZF9oYW5kbGVyIiwibWF0Y2giLCJmaW5kX25hbWVkX3Jlc3RhcnQiLCJlbnRyeSIsImtvbnRfZmluZF9yZXN0YXJ0IiwiY3N0X3R5cGUiLCJmcmFtZV90eXBlIiwia29udF9wdXNoIiwia29udF90b3AiLCJrb250X3BvcCIsImtvbnRfZW1wdHlfcCIsImNzdF9hcHBlbmQiLCJjYXB0dXJlZCIsImtvbnRfY2FwdHVyZV90b19yZXNldCIsImsiLCJvciIsImtvbnRfZmluZF9wcm92aWRlIiwia29udF9maW5kX3Njb3BlX2FjYyIsImhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIiwia29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwic2V0X3N0cmljdF9iIiwidmFsIiwic2V0X3ByaW1fcGFyYW1fdHlwZXNfYiIsInR5cGVzIiwiY3N0X2Jvb2xlYW4iLCJjc3Rfa2V5d29yZCIsImNzdF9sYW1iZGEiLCJjc3RfbGlzdCIsImNzdF9uaWwiLCJjc3RfbnVtYmVyIiwiY3N0X3NsaWNlIiwiY3N0X3N0cmluZyIsImNzdF9zeW1ib2wiLCJ2YWx1ZV9tYXRjaGVzX3R5cGVfcCIsImV4cGVjdGVkX3R5cGUiLCJjc3RfZXhwZWN0ZWQiLCJjc3RfZ290IiwiY3N0X1R5cGVfZXJyb3IiLCJzdHJpY3RfY2hlY2tfYXJncyIsInNwZWMiLCJwb3NpdGlvbmFsIiwicmVzdF90eXBlIiwiaSIsInAiLCJpZHgiLCJwYXJhbSIsInBfbmFtZSIsInBfdHlwZSIsImNzdF9hcmdzX2dvdCIsImNzdF9leHBlY3RzIiwiY3N0X3ppcCIsImNhbGxfbGFtYmRhIiwiY2FsbGVyX2VudiIsInBhcmFtcyIsImNzdF9jaGlsZHJlbiIsImNhbGxfY29tcG9uZW50IiwiY29tcCIsInBhcnNlZCIsImt3YXJncyIsImNoaWxkcmVuIiwiY3N0X2Fzc29jIiwiY3N0X2kiLCJjc3RfaW5jIiwiY3N0X3NraXAiLCJwYXJzZV9rZXl3b3JkX2FyZ3MiLCJhcmciLCJza2lwIiwiY29uZF9zY2hlbWVfcCIsImNsYXVzZXMiLCJjIiwiY3N0X2Vsc2UiLCJpc19lbHNlX2NsYXVzZSIsInRlc3QiLCJjc3RfcmFuZ2UiLCJzZl9uYW1lZF9sZXQiLCJsb29wX25hbWUiLCJiaW5kaW5ncyIsImluaXRzIiwiYmluZGluZyIsImFjYyIsInBhaXJfaWR4IiwibG9vcF9ib2R5IiwibG9vcF9mbiIsImluaXRfdmFscyIsImUiLCJjc3RfYXMiLCJzZl9sYW1iZGEiLCJwYXJhbXNfZXhwciIsInBhcmFtX25hbWVzIiwiY3N0X2N1cnJlbnRfZmlsZSIsImNzdF9lZmZlY3RfYW5ub3RhdGlvbnMiLCJjc3RfZWZmZWN0cyIsImNzdF9rZXlzIiwic2ZfZGVmY29tcCIsIm5hbWVfc3ltIiwicGFyYW1zX3JhdyIsImNvbXBfbmFtZSIsImhhc19jaGlsZHJlbiIsInBhcmFtX3R5cGVzIiwiYWZmaW5pdHkiLCJlZmZlY3RzIiwiZWZmZWN0X2FubnMiLCJkZWZjb21wX2t3YXJnIiwia2V5IiwiZGVmYXVsdCQiLCJlbmQiLCJyZXN1bHQiLCJjc3RfcmVzdCIsInBhcnNlX2NvbXBfcGFyYW1zIiwiaW5fa2V5IiwicHR5cGUiLCJ0eXBlX3ZhbCIsInNmX2RlZmlzbGFuZCIsImlzbGFuZCIsInNmX2RlZm1hY3JvIiwicmVzdF9wYXJhbSIsIm1hYyIsImNzdF9pbl9yZXN0IiwicGFyc2VfbWFjcm9fcGFyYW1zIiwiY3N0X2NvbmNhdCIsInFxX2V4cGFuZCIsInRlbXBsYXRlIiwiaGVhZCIsIml0ZW0iLCJzcGxpY2VkIiwiY3N0X2RlYyIsInNmX2xldHJlYyIsIm5hbWVzIiwidmFsX2V4cHJzIiwidm5hbWUiLCJ2YWxfZXhwciIsInZhbHVlcyIsIm4iLCJzdGVwX3NmX2xldHJlYyIsInRoayIsInNmX2R5bmFtaWNfd2luZCIsImJlZm9yZSIsImFmdGVyIiwic2Zfc2NvcGUiLCJyZXN0Iiwic2ZfcHJvdmlkZSIsImV4cGFuZF9tYWNybyIsImxhc3RfZXJyb3Jfa29udCIsImNla19ydW4iLCJleG4iLCJtc2ciLCJjZWtfc3RlcCIsInN0ZXBfZXZhbCIsImV4cHIiLCJrcyIsImZpcnN0X2tleSIsInJlbWFpbmluZ19lbnRyaWVzIiwiY3N0X2VtaXR0ZWQiLCJjc3RfbWFwX2luZGV4ZWQiLCJjc3RfcXVvdGUiLCJyZW5kZXJfY2hlY2siLCJyZW5kZXJfZm4iLCJzdGVwX2V2YWxfbGlzdCIsIm1hdGNoX2ZpbmRfY2xhdXNlIiwiY2xhdXNlIiwicGF0dGVybiIsIm1hdGNoX3BhdHRlcm4iLCJwYWlycyIsInN0ZXBfc2ZfbWF0Y2giLCJzdGVwX3NmX2hhbmRsZXJfYmluZCIsImhhbmRsZXJfc3BlY3MiLCJzdGVwX3NmX3Jlc3RhcnRfY2FzZSIsInJlc3RhcnRfc3BlY3MiLCJzdGVwX3NmX3NpZ25hbCIsInN0ZXBfc2ZfaW52b2tlX3Jlc3RhcnQiLCJybiIsInJlc3RhcnRfbmFtZSIsInJlc3RhcnRfYXJnIiwiZm91bmQiLCJyZXN0YXJ0X2ZyYW1lIiwicmVzdF9rb250IiwicmVzdGFydF9lbnYiLCJzdGVwX3NmX2lmIiwic3RlcF9zZl93aGVuIiwic3RlcF9zZl9iZWdpbiIsInN0ZXBfc2ZfbGV0IiwiZmlyc3RfYmluZGluZyIsInJlc3RfYmluZGluZ3MiLCJzdGVwX3NmX2RlZmluZSIsInZhbF9pZHgiLCJzdGVwX3NmX3NldF9iIiwic3RlcF9zZl9hbmQiLCJzdGVwX3NmX29yIiwic3RlcF9zZl9jb25kIiwic3RlcF9zZl9jYXNlIiwic3RlcF9zZl90aHJlYWRfZmlyc3QiLCJzdGVwX3NmX2xhbWJkYSIsInN0ZXBfc2Zfc2NvcGUiLCJyZXN0X2FyZ3MiLCJzdGVwX3NmX3Byb3ZpZGUiLCJzdGVwX3NmX2NvbnRleHQiLCJkZWZhdWx0X3ZhbCIsInNjb3BlX3ZhbCIsInN0ZXBfc2ZfZW1pdCIsInN0ZXBfc2ZfZW1pdHRlZCIsInN0ZXBfc2ZfcmVzZXQiLCJzdGVwX3NmX3NoaWZ0Iiwia19uYW1lIiwiY2FwdHVyZWRfcmVzdWx0Iiwic2hpZnRfZW52Iiwic3RlcF9zZl9kZXJlZiIsImNla19jYWxsIiwiYSIsImNzdF91cGRhdGVfZm4iLCJyZWFjdGl2ZV9zaGlmdF9kZXJlZiIsInNpZyIsInNjYW5fcmVzdWx0IiwiY2FwdHVyZWRfZnJhbWVzIiwicmVzZXRfZnJhbWUiLCJyZW1haW5pbmdfa29udCIsInN1YnNjcmliZXIiLCJuZXdfcmVzZXQiLCJuZXdfa29udCIsImluaXRpYWxfa29udCIsInN0ZXBfZXZhbF9jYWxsIiwiaG5hbWUiLCJob19mb3JtX25hbWVfcCIsImhvX2ZuX3AiLCJob19zd2FwX2FyZ3MiLCJiIiwiaG9fc2V0dXBfZGlzcGF0Y2giLCJvcmRlcmVkIiwiY29sbCIsImluaXQiLCJzdGVwX2hvX21hcCIsInN0ZXBfaG9fbWFwX2luZGV4ZWQiLCJzdGVwX2hvX2ZpbHRlciIsInN0ZXBfaG9fcmVkdWNlIiwic3RlcF9ob19zb21lIiwic3RlcF9ob19ldmVyeSIsInN0ZXBfaG9fZm9yX2VhY2giLCJjc3RfZm9ybV9ub3RfY2FsbGFibGUiLCJjc3RfYm9keSIsImNzdF9ldmFsZWQiLCJjc3RfcmVtYWluaW5nIiwiY3N0X3Jlc3VsdHMiLCJzdGVwX2NvbnRpbnVlIiwicmVzdF9rIiwiZnQiLCJmZW52IiwibmV4dF9iaW5kaW5nIiwiZWZmZWN0X25hbWVzIiwibmV4dCIsIm5leHRfdGVzdCIsIm5leHRfY2xhdXNlcyIsIm5leHRfY2xhdXNlIiwiZm9ybSIsInJlc3RfZm9ybXMiLCJyYXJncyIsImFsbF9hcmdzIiwibmV3X2V2YWxlZCIsImxhc3RfcmVzdWx0IiwiY29tcGxldGVkIiwibmV4dF9lbnRyeSIsImN0eCIsImRlcF9saXN0Iiwibm90aWZ5X2ZuIiwiZmlyc3RfcCIsIm5ld19mcmFtZSIsImluZGV4ZWQiLCJuZXdfcmVzdWx0cyIsImNhbGxfYXJncyIsIm5leHRfZnJhbWUiLCJqaXRfY2FsbF9ob29rIiwiY29udGludWVfd2l0aF9jYWxsIiwiY29udF9kYXRhIiwibCIsImhvb2siLCJhcmdzX2xpc3QiLCJzZl9jYXNlX3N0ZXBfbG9vcCIsInRlc3RfdmFsIiwiZXZhbF9leHByX2NlayIsInRyYW1wb2xpbmVfY2VrIiwiZXZhbF9leHByIiwiY29sbGVjdF9jb21wX3RyYWNlIiwidHJhY2UiLCJmb3JtYXRfY29tcF90cmFjZSIsImxpbmVzIiwicHJlZml4IiwiZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUEsYUFBQUMsR0NTeUQsU0FBQztBQUFBLFlBQUFDLFdBQUFELEdBQ3ZDLHNDQUFnQjtBQUFBO0FBQUEsSUFBQUUsYURWbkM7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxZQUFBQyxlQUFBQyxTQUFBQyxLQUFBQztBQUFBQSxJQ2tDRTtBQUFBLEdBQW9HO0FBQUEsT0FBQUMsZURsQ3RHO0FBQUEsWUFBQUMsZUFBQUMsT0FBQUosS0FBQUM7QUFBQUEsSUNzQ0U7QUFBQSxHQUFzRztBQUFBO0FBQUEsSUFBQUksTUR0Q3hHO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxlQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDMEM4QjtBQUFBLEtBQUFDLE1BQWhCO0FBQUEsSUFBa0YsbUNBQXNCO0FBQUEsWUFBbUI7QUFBQSxJQUFpQyxtQ0FBRTtBQUFBO0FBQUEsV0QxQzVLO0FBQUEs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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEbFExQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM0OTc1LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF92bS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTWCBieXRlY29kZSBWTSDigJQgc3RhY2stYmFzZWQgaW50ZXJwcmV0ZXIuXG5cbiAgICBFeGVjdXRlcyBieXRlY29kZSBwcm9kdWNlZCBieSBjb21waWxlci5zeC5cbiAgICBEZXNpZ25lZCBmb3Igc3BlZWQ6IGFycmF5LWJhc2VkIHN0YWNrLCBkaXJlY3QgZGlzcGF0Y2gsXG4gICAgbm8gYWxsb2NhdGlvbiBwZXIgc3RlcCAodW5saWtlIHRoZSBDRUsgbWFjaGluZSkuXG5cbiAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybS1uYXRpdmUgZXhlY3V0aW9uIGVuZ2luZS4gVGhlIHNhbWUgYnl0ZWNvZGVcbiAgICBydW5zIG9uIGFsbCBwbGF0Zm9ybXMgKE9DYW1sLCBKUywgV0FTTSkuXG5cbiAgICBWTSB0eXBlcyAodm1fY29kZSwgdm1fdXB2YWx1ZV9jZWxsLCB2bV9jbG9zdXJlKSBhcmUgZGVmaW5lZCBpblxuICAgIHN4X3R5cGVzLm1sIHRvIHNoYXJlIHRoZSBtdXR1YWwgcmVjdXJzaW9uIGJsb2NrIHdpdGggW3ZhbHVlXS4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiogQ2FsbCBmcmFtZSDigJQgb25lIHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uLiAqKVxudHlwZSBmcmFtZSA9IHtcbiAgY2xvc3VyZSAgIDogdm1fY2xvc3VyZTtcbiAgbXV0YWJsZSBpcCA6IGludDtcbiAgYmFzZSAgICAgIDogaW50OyAgKCogYmFzZSBpbmRleCBpbiB2YWx1ZSBzdGFjayBmb3IgbG9jYWxzICopXG4gIGxvY2FsX2NlbGxzIDogKGludCwgdm1fdXB2YWx1ZV9jZWxsKSBIYXNodGJsLnQ7ICAoKiBzbG90IOKGkiBzaGFyZWQgY2VsbCBmb3IgY2FwdHVyZWQgbG9jYWxzICopXG59XG5cbigqKiBWTSBzdGF0ZS4gKilcbnR5cGUgdm0gPSB7XG4gIG11dGFibGUgc3RhY2sgIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgc3AgICAgIDogaW50O1xuICBtdXRhYmxlIGZyYW1lcyA6IGZyYW1lIGxpc3Q7XG4gIGdsb2JhbHMgICAgICAgIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudDsgICgqIGxpdmUgcmVmZXJlbmNlIHRvIGtlcm5lbCBlbnYgKilcbn1cblxuKCoqIEZvcndhcmQgcmVmZXJlbmNlIGZvciBKSVQgY29tcGlsYXRpb24g4oCUIHNldCBhZnRlciBkZWZpbml0aW9uLiAqKVxubGV0IGppdF9jb21waWxlX3JlZiA6IChsYW1iZGEgLT4gKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCAtPiB2bV9jbG9zdXJlIG9wdGlvbikgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IE5vbmUpXG5cbigqKiBTZW50aW5lbCBjbG9zdXJlIGluZGljYXRpbmcgSklUIGNvbXBpbGF0aW9uIHdhcyBhdHRlbXB0ZWQgYW5kIGZhaWxlZC5cbiAgICBQcmV2ZW50cyByZXRyeWluZyBjb21waWxhdGlvbiBvbiBldmVyeSBjYWxsLiAqKVxubGV0IGppdF9mYWlsZWRfc2VudGluZWwgPSB7XG4gIHZtX2NvZGUgPSB7IHZjX2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDA7IHZjX2J5dGVjb2RlID0gW3x8XTsgdmNfY29uc3RhbnRzID0gW3x8XSB9O1xuICB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwiX19qaXRfZmFpbGVkX19cIjsgdm1fZW52X3JlZiA9IEhhc2h0YmwuY3JlYXRlIDA7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZVxufVxuXG5sZXQgaXNfaml0X2ZhaWxlZCBjbCA9IGNsLnZtX2NvZGUudmNfYXJpdHkgPSAtMVxuXG4oKiogQ3VycmVudCBhY3RpdmUgVk0g4oCUIGFsbG93cyBITyBwcmltaXRpdmVzIChtYXAsIGZpbHRlciwgZm9yLWVhY2gsIHNvbWUpXG4gICAgdG8gY2FsbCBWbUNsb3N1cmUgY2FsbGJhY2tzIG9uIHRoZSBzYW1lIFZNIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIFRoaXMgaXMgY3JpdGljYWw6IGNyZWF0aW5nIGEgbmV3IFZNIHBlciBjYWxsYmFjayBsb3NlcyB0aGUgY2FsbGluZyBWTSdzXG4gICAgc3RhY2svZnJhbWUgY29udGV4dCwgY2F1c2luZyB1cHZhbHVlLWNhcHR1cmVkIGhvc3Qgb2JqZWN0cyB0byBiZWNvbWVcbiAgICBpbmFjY2Vzc2libGUuICopXG5sZXQgX2FjdGl2ZV92bSA6IHZtIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgY3JlYXRlIGdsb2JhbHMgPVxuICB7IHN0YWNrID0gQXJyYXkubWFrZSA0MDk2IE5pbDsgc3AgPSAwOyBmcmFtZXMgPSBbXTsgZ2xvYmFscyB9XG5cbigqKiBTdGFjayBvcHMg4oCUIGlubGluZWQgZm9yIHNwZWVkLiAqKVxubGV0IHB1c2ggdm0gdiA9XG4gIGlmIHZtLnNwID49IEFycmF5Lmxlbmd0aCB2bS5zdGFjayB0aGVuIGJlZ2luXG4gICAgbGV0IG5zID0gQXJyYXkubWFrZSAodm0uc3AgKiAyKSBOaWwgaW5cbiAgICBBcnJheS5ibGl0IHZtLnN0YWNrIDAgbnMgMCB2bS5zcDtcbiAgICB2bS5zdGFjayA8LSBuc1xuICBlbmQ7XG4gIHZtLnN0YWNrLih2bS5zcCkgPC0gdjtcbiAgdm0uc3AgPC0gdm0uc3AgKyAxXG5cbmxldFtAaW5saW5lXSBwb3Agdm0gPVxuICB2bS5zcCA8LSB2bS5zcCAtIDE7XG4gIHZtLnN0YWNrLih2bS5zcClcblxubGV0W0BpbmxpbmVdIHBlZWsgdm0gPSB2bS5zdGFjay4odm0uc3AgLSAxKVxuXG4oKiogUmVhZCBvcGVyYW5kcy4gKilcbmxldFtAaW5saW5lXSByZWFkX3U4IGYgPVxuICBsZXQgdiA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwKSBpblxuICBmLmlwIDwtIGYuaXAgKyAxOyB2XG5cbmxldFtAaW5saW5lXSByZWFkX3UxNiBmID1cbiAgbGV0IGxvID0gZi5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYuaXApIGluXG4gIGxldCBoaSA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwICsgMSkgaW5cbiAgZi5pcCA8LSBmLmlwICsgMjtcbiAgbG8gbG9yIChoaSBsc2wgOClcblxubGV0W0BpbmxpbmVdIHJlYWRfaTE2IGYgPVxuICBsZXQgdiA9IHJlYWRfdTE2IGYgaW5cbiAgaWYgdiA+PSAzMjc2OCB0aGVuIHYgLSA2NTUzNiBlbHNlIHZcblxuKCoqIFdyYXAgYSBWTSBjbG9zdXJlIGFzIGFuIFNYIHZhbHVlIChOYXRpdmVGbikuICopXG5sZXQgY2xvc3VyZV90b192YWx1ZSBjbCA9XG4gIE5hdGl2ZUZuIChcInZtOlwiIF4gKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJhbm9uXCIpLFxuICAgIGZ1biBhcmdzIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNX0NMT1NVUkVfQ0FMTDpcIiBeIFN0cmluZy5jb25jYXQgXCIsXCIgKExpc3QubWFwIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGFyZ3MpKSkpXG4gICgqIFBsYWNlaG9sZGVyIOKAlCBhY3R1YWwgY2FsbHMgZ28gdGhyb3VnaCB2bV9jYWxsIGJlbG93ICopXG5cbmxldCBfdm1faW5zbl9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2NhbGxfY291bnQgPSByZWYgMFxubGV0IF92bV9jZWtfY291bnQgPSByZWYgMFxubGV0IHZtX3Jlc2V0X2NvdW50ZXJzICgpID0gX3ZtX2luc25fY291bnQgOj0gMDsgX3ZtX2NhbGxfY291bnQgOj0gMDsgX3ZtX2Nla19jb3VudCA6PSAwXG5sZXQgdm1fcmVwb3J0X2NvdW50ZXJzICgpID1cbiAgUHJpbnRmLmVwcmludGYgXCJbdm0tcGVyZl0gaW5zbnM9JWQgY2FsbHM9JWQgY2VrX2ZhbGxiYWNrcz0lZFxcbiUhXCJcbiAgICAhX3ZtX2luc25fY291bnQgIV92bV9jYWxsX2NvdW50ICFfdm1fY2VrX2NvdW50XG5cbigqKiBQdXNoIGEgVk0gY2xvc3VyZSBmcmFtZSBvbnRvIHRoZSBjdXJyZW50IFZNIOKAlCBubyBuZXcgVk0gYWxsb2NhdGlvbi5cbiAgICBUaGlzIGlzIHRoZSBmYXN0IHBhdGggZm9yIGludHJhLVZNIGNsb3N1cmUgY2FsbHMuICopXG5sZXQgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3MgPVxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gdm0uc3A7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIExpc3QuaXRlciAoZnVuIGEgLT4gcHVzaCB2bSBhKSBhcmdzO1xuICBmb3IgXyA9IExpc3QubGVuZ3RoIGFyZ3MgdG8gY2wudm1fY29kZS52Y19sb2NhbHMgLSAxIGRvIHB1c2ggdm0gTmlsIGRvbmU7XG4gIHZtLmZyYW1lcyA8LSBmcmFtZSA6OiB2bS5mcmFtZXNcblxuKCoqIENvbnZlcnQgY29tcGlsZXIgb3V0cHV0IChTWCBkaWN0KSB0byBhIHZtX2NvZGUgb2JqZWN0LiAqKVxubGV0IGNvZGVfZnJvbV92YWx1ZSB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgbGV0IGJjX2xpc3QgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJieXRlY29kZVwiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPlxuICAgICAgICBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gbWF0Y2ggeCB3aXRoIE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKSBsKVxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBlbnRyaWVzID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiY29uc3RhbnRzXCIgd2l0aFxuICAgICAgfCBTb21lIChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pIC0+IEFycmF5Lm9mX2xpc3QgbFxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBjb25zdGFudHMgPSBBcnJheS5tYXAgKGZ1biBlbnRyeSAtPlxuICAgICAgbWF0Y2ggZW50cnkgd2l0aFxuICAgICAgfCBEaWN0IGVkIHdoZW4gSGFzaHRibC5tZW0gZWQgXCJieXRlY29kZVwiIC0+IGVudHJ5ICAoKiBuZXN0ZWQgY29kZSDigJQgY29udmVydCBsYXppbHkgKilcbiAgICAgIHwgXyAtPiBlbnRyeVxuICAgICkgZW50cmllcyBpblxuICAgIGxldCBhcml0eSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcImFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDBcbiAgICBpblxuICAgIHsgdmNfYXJpdHkgPSBhcml0eTsgdmNfbG9jYWxzID0gYXJpdHkgKyAxNjsgdmNfYnl0ZWNvZGUgPSBiY19saXN0OyB2Y19jb25zdGFudHMgPSBjb25zdGFudHMgfVxuICB8IF8gLT4geyB2Y19hcml0eSA9IDA7IHZjX2xvY2FscyA9IDE2OyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF0gfVxuXG4oKiogRXhlY3V0ZSBhIGNsb3N1cmUgd2l0aCBhcmd1bWVudHMg4oCUIGNyZWF0ZXMgYSBmcmVzaCBWTS5cbiAgICBVc2VkIGZvciBlbnRyeSBwb2ludHM6IEpJVCBMYW1iZGEgY2FsbHMsIG1vZHVsZSBleGVjdXRpb24sIGNyb3NzLWJvdW5kYXJ5LiAqKVxubGV0IHJlYyBjYWxsX2Nsb3N1cmUgY2wgYXJncyBnbG9iYWxzID1cbiAgaW5jciBfdm1fY2FsbF9jb3VudDtcbiAgbGV0IHByZXZfdm0gPSAhX2FjdGl2ZV92bSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBfYWN0aXZlX3ZtIDo9IFNvbWUgdm07XG4gIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzO1xuICAodHJ5IHJ1biB2bSB3aXRoIGUgLT4gX2FjdGl2ZV92bSA6PSBwcmV2X3ZtOyByYWlzZSBlKTtcbiAgX2FjdGl2ZV92bSA6PSBwcmV2X3ZtO1xuICBwb3Agdm1cblxuKCoqIENhbGwgYSBWbUNsb3N1cmUgb24gdGhlIGFjdGl2ZSBWTSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZS5cbiAgICBUaGlzIGlzIHRoZSBwYXRoIHVzZWQgYnkgSE8gcHJpbWl0aXZlcyAobWFwLCBmaWx0ZXIsIGZvci1lYWNoLCBzb21lKSBzb1xuICAgIGNhbGxiYWNrcyBjYW4gYWNjZXNzIHVwdmFsdWVzIHRoYXQgcmVmZXJlbmNlIHRoZSBjYWxsaW5nIFZNJ3Mgc3RhdGUuICopXG5hbmQgY2FsbF9jbG9zdXJlX3JldXNlIGNsIGFyZ3MgPVxuICBjYWxsX2Nsb3N1cmUgY2wgYXJncyBjbC52bV9lbnZfcmVmXG5cbigqKiBDYWxsIGEgdmFsdWUgYXMgYSBmdW5jdGlvbiDigJQgZGlzcGF0Y2ggYnkgdHlwZS5cbiAgICBWbUNsb3N1cmU6IHB1c2hlcyBmcmFtZSBvbiBjdXJyZW50IFZNIChmYXN0IGludHJhLVZNIHBhdGgpLlxuICAgIExhbWJkYTogdHJpZXMgSklUIHRoZW4gZmFsbHMgYmFjayB0byBDRUsuXG4gICAgTmF0aXZlRm46IGNhbGxzIGRpcmVjdGx5LiAqKVxuYW5kIHZtX2NhbGwgdm0gZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgVm1DbG9zdXJlIGNsIC0+XG4gICAgKCogRmFzdCBwYXRoOiBwdXNoIGZyYW1lIG9uIGN1cnJlbnQgVk0g4oCUIG5vIGFsbG9jYXRpb24sIGVuYWJsZXMgVENPICopXG4gICAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3NcbiAgfCBOYXRpdmVGbiAoX25hbWUsIGZuKSAtPlxuICAgIGxldCByZXN1bHQgPSBmbiBhcmdzIGluXG4gICAgcHVzaCB2bSByZXN1bHRcbiAgfCBMYW1iZGEgbCAtPlxuICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICAgKCogQ2FjaGVkIGJ5dGVjb2RlIOKAlCBydW4gb24gVk0gdXNpbmcgdGhlIGNsb3N1cmUncyBjYXB0dXJlZCBlbnYsXG4gICAgICAgICAgbm90IHRoZSBjYWxsZXIncyBnbG9iYWxzLiBDbG9zdXJlIHZhcnMgd2VyZSBtZXJnZWQgYXQgY29tcGlsZSB0aW1lLiAqKVxuICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGFyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgd2l0aCBfZSAtPlxuICAgICAgICAgICgqIEZhbGxiYWNrIHRvIENFSyDigJQgZGF0YS1kZXBlbmRlbnQgZXJyb3IsIG5vdCBhIEpJVCBidWcuXG4gICAgICAgICAgICAgRGVkdXAgbG9nZ2luZyBoYXBwZW5zIGluIHJlZ2lzdGVyX2ppdF9ob29rLiAqKVxuICAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKSlcbiAgICAgfCBTb21lIF8gLT5cbiAgICAgICAoKiBDb21waWxlIGZhaWxlZCDigJQgQ0VLICopXG4gICAgICAgcHVzaCB2bSAoU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykpXG4gICAgIHwgTm9uZSAtPlxuICAgICAgIGlmIGwubF9uYW1lIDw+IE5vbmVcbiAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAoKiBQcmUtbWFyayBiZWZvcmUgY29tcGlsZSBhdHRlbXB0IHRvIHByZXZlbnQgcmUtZW50cmFuY3kgKilcbiAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGppdF9mYWlsZWRfc2VudGluZWw7XG4gICAgICAgICBtYXRjaCAhaml0X2NvbXBpbGVfcmVmIGwgdm0uZ2xvYmFscyB3aXRoXG4gICAgICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGFyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgICAgIHdpdGggX2UgLT4gcHVzaCB2bSAoU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykpKVxuICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKVxuICAgICAgIGVuZFxuICAgICAgIGVsc2VcbiAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKSlcbiAgfCBDb21wb25lbnQgXyB8IElzbGFuZCBfIC0+XG4gICAgKCogQ29tcG9uZW50cyB1c2Uga2V5d29yZC1hcmcgcGFyc2luZyDigJQgQ0VLIGhhbmRsZXMgdGhpcyAqKVxuICAgIGluY3IgX3ZtX2Nla19jb3VudDtcbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykgaW5cbiAgICBwdXNoIHZtIHJlc3VsdFxuICB8IF8gLT5cbiAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogbm90IGNhbGxhYmxlOiBcIiBeIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGYpKVxuXG4oKiogTWFpbiBleGVjdXRpb24gbG9vcCDigJQgaXRlcmF0aXZlIChubyBPQ2FtbCBzdGFjayBncm93dGgpLlxuICAgIFZtQ2xvc3VyZSBjYWxscyBwdXNoIGZyYW1lczsgdGhlIGxvb3AgcGlja3MgdGhlbSB1cC5cbiAgICBPUF9UQUlMX0NBTEwgKyBWbUNsb3N1cmUgPSB0cnVlIFRDTzogZHJvcCBmcmFtZSwgcHVzaCBuZXcsIGxvb3AuICopXG5hbmQgcnVuIHZtID1cbiAgd2hpbGUgdm0uZnJhbWVzIDw+IFtdIGRvXG4gICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGhcbiAgICB8IFtdIC0+ICgpICAoKiBndWFyZCBoYW5kbGVkIGJ5IHdoaWxlIGNvbmRpdGlvbiAqKVxuICAgIHwgZnJhbWUgOjogcmVzdF9mcmFtZXMgLT5cbiAgICAgIGxldCBiYyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgbGV0IGNvbnN0cyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMgaW5cbiAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuIGJlZ2luXG4gICAgICAgICgqIEJ5dGVjb2RlIGV4aGF1c3RlZCB3aXRob3V0IGV4cGxpY2l0IFJFVFVSTiDigJQgcG9wIGZyYW1lIGxpa2UgUkVUVVJOICopXG4gICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW3ZtXSBXQVJOOiBieXRlY29kZSBleGhhdXN0ZWQgd2l0aG91dCBSRVRVUk4gaW4gJXMgKGJhc2U9JWQgc3A9JWQgZnJhbWVzPSVkKVxcbiUhXCJcbiAgICAgICAgICBmbl9uYW1lIGZyYW1lLmJhc2Ugdm0uc3AgKExpc3QubGVuZ3RoIHJlc3RfZnJhbWVzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlmIHZtLnNwID4gZnJhbWUuYmFzZSB0aGVuIHBvcCB2bSBlbHNlIE5pbCBpblxuICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgIHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgIGlmIHJlc3RfZnJhbWVzIDw+IFtdIHRoZW4gcHVzaCB2bSByZXN1bHRcbiAgICAgICAgKCogSWYgbm8gbW9yZSBmcmFtZXMsIHJlc3VsdCBzdGF5cyBvbiBzdGFjayBmb3IgY2FsbF9jbG9zdXJlIHRvIHBvcCAqKVxuICAgICAgZW5kXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgIGxldCBvcCA9IGJjLihmcmFtZS5pcCkgaW5cbiAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICAodHJ5IG1hdGNoIG9wIHdpdGhcbiAgICAgICAgKCogLS0tLSBDb25zdGFudHMgLS0tLSAqKVxuICAgICAgICB8IDEgKCogT1BfQ09OU1QgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBpZiBpZHggPj0gQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogQ09OU1QgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbCBzaXplICVkKVwiXG4gICAgICAgICAgICAgIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBwdXNoIHZtIGNvbnN0cy4oaWR4KVxuICAgICAgICB8IDIgKCogT1BfTklMICopICAgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgfCAzICgqIE9QX1RSVUUgKikgIC0+IHB1c2ggdm0gKEJvb2wgdHJ1ZSlcbiAgICAgICAgfCA0ICgqIE9QX0ZBTFNFICopIC0+IHB1c2ggdm0gKEJvb2wgZmFsc2UpXG4gICAgICAgIHwgNSAoKiBPUF9QT1AgKikgICAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgfCA2ICgqIE9QX0RVUCAqKSAgIC0+IHB1c2ggdm0gKHBlZWsgdm0pXG5cbiAgICAgICAgKCogLS0tLSBWYXJpYWJsZSBhY2Nlc3MgLS0tLSAqKVxuICAgICAgICB8IDE2ICgqIE9QX0xPQ0FMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICBsZXQgaWR4ID0gZnJhbWUuYmFzZSArIHNsb3QgaW5cbiAgICAgICAgICAgICAgaWYgaWR4ID49IHZtLnNwIHRoZW5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgIFwiVk06IExPQ0FMX0dFVCBzbG90PSVkIGJhc2U9JWQgc3A9JWQgb3V0IG9mIGJvdW5kc1wiIHNsb3QgZnJhbWUuYmFzZSB2bS5zcCkpO1xuICAgICAgICAgICAgICB2bS5zdGFjay4oaWR4KVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgIHwgMTcgKCogT1BfTE9DQUxfU0VUICopIC0+XG4gICAgICAgICAgbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgKCogV3JpdGUgdG8gc2hhcmVkIGNlbGwgaWYgY2FwdHVyZWQsIGVsc2UgdG8gc3RhY2sgKilcbiAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZSA8LSB2XG4gICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgIHwgMTggKCogT1BfVVBWQUxVRV9HRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGlmIGlkeCA+PSBBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgXCJWTTogVVBWQUxVRV9HRVQgaWR4PSVkIG91dCBvZiBib3VuZHMgKGhhdmUgJWQpXCIgaWR4XG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcykpKTtcbiAgICAgICAgICBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWVcbiAgICAgICAgfCAxOSAoKiBPUF9VUFZBTFVFX1NFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgIHwgMjAgKCogT1BfR0xPQkFMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIGxldCB2ID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICgqIFdhbGsgdGhlIGNsb3N1cmUgZW52IGNoYWluIGZvciBpbm5lciBmdW5jdGlvbnMgKilcbiAgICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgICBsZXQgcmVjIGVudl9sb29rdXAgZSA9XG4gICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgZS5iaW5kaW5ncyBpZFxuICAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9sb29rdXAgcCB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZVxuICAgICAgICAgICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSlcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBlbnYgLT4gZW52X2xvb2t1cCBlbnZcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWVcbiAgICAgICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICB8IDIxICgqIE9QX0dMT0JBTF9TRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAoKiBXcml0ZSB0byBjbG9zdXJlIGVudiBpZiB0aGUgbmFtZSBleGlzdHMgdGhlcmUgKG11dGFibGUgY2xvc3VyZSB2YXJzKSAqKVxuICAgICAgICAgIGxldCB3cml0dGVuID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZW52IC0+XG4gICAgICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgICAgICAgICAgaWYgSGFzaHRibC5tZW0gZS5iaW5kaW5ncyBpZCB0aGVuXG4gICAgICAgICAgICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgKHBlZWsgdm0pOyB0cnVlKVxuICAgICAgICAgICAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZF9lbnYgcCB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICAgICAgaW4gZmluZF9lbnYgZW52XG4gICAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCB3cml0dGVuIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSB2O1xuICAgICAgICAgICAgKG1hdGNoICFTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIHdpdGggU29tZSBmIC0+IGYgbmFtZSB2IHwgTm9uZSAtPiAoKSlcbiAgICAgICAgICBlbmRcblxuICAgICAgICAoKiAtLS0tIENvbnRyb2wgZmxvdyAtLS0tICopXG4gICAgICAgIHwgMzIgKCogT1BfSlVNUCAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgIHwgMzMgKCogT1BfSlVNUF9JRl9GQUxTRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgbm90IChzeF90cnV0aHkgdikgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICB8IDM0ICgqIE9QX0pVTVBfSUZfVFJVRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuXG4gICAgICAgICgqIC0tLS0gRnVuY3Rpb24gY2FsbHMgLS0tLSAqKVxuICAgICAgICB8IDQ4ICgqIE9QX0NBTEwgKikgLT5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IGFyZ3NfbGlzdCA9IExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpIGluXG4gICAgICAgICAgdm1fY2FsbCB2bSBmIGFyZ3NfbGlzdFxuICAgICAgICAgICgqIExvb3AgY29udGludWVzIOKAlCBpZiBWbUNsb3N1cmUsIG5ldyBmcmFtZSBydW5zIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIHwgNDkgKCogT1BfVEFJTF9DQUxMICopIC0+XG4gICAgICAgICAgbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgIGxldCBhcmdzX2xpc3QgPSBMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSBpblxuICAgICAgICAgICgqIERyb3AgY3VycmVudCBmcmFtZSwgcmV1c2Ugc3RhY2sgc3BhY2Ug4oCUIHRydWUgVENPIGZvciBWbUNsb3N1cmUgKilcbiAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgICAgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgICB2bV9jYWxsIHZtIGYgYXJnc19saXN0XG4gICAgICAgIHwgNTAgKCogT1BfUkVUVVJOICopIC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHBvcCB2bSBpblxuICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lcztcbiAgICAgICAgICB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgIHB1c2ggdm0gcmVzdWx0XG4gICAgICAgICAgKCogTG9vcCBjb250aW51ZXMgd2l0aCBjYWxsZXIgZnJhbWUgKilcbiAgICAgICAgfCA1MSAoKiBPUF9DTE9TVVJFICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgaWYgaWR4ID49IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVk06IENMT1NVUkUgaWR4ICVkID49IGNvbnN0cyAlZFwiIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBsZXQgY29kZV92YWwgPSBjb25zdHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgICAgICAgICgqIFJlYWQgdXB2YWx1ZSBkZXNjcmlwdG9ycyBmcm9tIGJ5dGVjb2RlICopXG4gICAgICAgICAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwgd2l0aFxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDApXG4gICAgICAgICAgICB8IF8gLT4gMFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICgqIENhcHR1cmUgZnJvbSBlbmNsb3NpbmcgZnJhbWUncyBsb2NhbCBzbG90LlxuICAgICAgICAgICAgICAgICBDcmVhdGUgYSBzaGFyZWQgY2VsbCDigJQgYm90aCBwYXJlbnQgYW5kIGNsb3N1cmVcbiAgICAgICAgICAgICAgICAgcmVhZC93cml0ZSB0aHJvdWdoIHRoaXMgY2VsbC4gKilcbiAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmcgICgqIHJldXNlIGV4aXN0aW5nIGNlbGwgKilcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICAgICAgICAgICAgY1xuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICBlbmQgZWxzZVxuICAgICAgICAgICAgICAoKiBDYXB0dXJlIGZyb20gZW5jbG9zaW5nIGZyYW1lJ3MgdXB2YWx1ZSDigJQgYWxyZWFkeSBhIHNoYXJlZCBjZWxsICopXG4gICAgICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICkgaW5cbiAgICAgICAgICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSB2bS5nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgfSBpblxuICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjbClcbiAgICAgICAgfCA1MiAoKiBPUF9DQUxMX1BSSU0gKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IExpc3QuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgKCogUmVzb2x2ZSB0aHVua3Mg4oCUIHRoZSBDRUsgZXZhbHVhdG9yIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAgICAgdmlhIHRyYW1wb2xpbmUsIGJ1dCB0aGUgVk0gbXVzdCBkbyBpdCBleHBsaWNpdGx5IGJlZm9yZVxuICAgICAgICAgICAgIHBhc3NpbmcgYXJncyB0byBwcmltaXRpdmVzLiAqKVxuICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgVGh1bmsgXyAtPiAhU3hfcHJpbWl0aXZlcy5fc3hfdHJhbXBvbGluZV9mbiB2XG4gICAgICAgICAgICB8IF8gLT4gdikgYXJncyBpblxuICAgICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICgqIENoZWNrIHByaW1pdGl2ZXMgRklSU1QgKG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb2YgbWFwL2ZpbHRlci9ldGMuKSxcbiAgICAgICAgICAgICAgICAgdGhlbiBnbG9iYWxzICh3aGljaCBtYXkgaGF2ZSBob192aWFfY2VrIHdyYXBwZXJzIHRoYXQgcm91dGVcbiAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgQ0VLIOKAlCB0aGVzZSBjYW4ndCBjYWxsIFZNIGNsb3N1cmVzKS4gKilcbiAgICAgICAgICAgICAgbGV0IGZuX3ZhbCA9IHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZSB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk06IHVua25vd24gcHJpbWl0aXZlIFwiIF4gbmFtZSkpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIChtYXRjaCBmbl92YWwgd2l0aFxuICAgICAgICAgICAgICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgICAgICAgICAgICAgIHwgVm1DbG9zdXJlIF8gfCBMYW1iZGEgXyB8IENvbXBvbmVudCBfIHwgSXNsYW5kIF8gLT5cbiAgICAgICAgICAgICAgICAgU3hfcmVmLmNla19jYWxsIGZuX3ZhbCAoTGlzdCBhcmdzKVxuICAgICAgICAgICAgICAgfCBfIC0+IE5pbClcbiAgICAgICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiJXMgKGluIENBTExfUFJJTSBcXFwiJXNcXFwiIHdpdGggJWQgYXJncylcIlxuICAgICAgICAgICAgICAgIG1zZyBuYW1lIGFyZ2MpKVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSByZXN1bHRcblxuICAgICAgICAoKiAtLS0tIENvbGxlY3Rpb25zIC0tLS0gKilcbiAgICAgICAgfCA2NCAoKiBPUF9MSVNUICopIC0+XG4gICAgICAgICAgbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICBwdXNoIHZtIChMaXN0IGl0ZW1zKVxuICAgICAgICB8IDY1ICgqIE9QX0RJQ1QgKikgLT5cbiAgICAgICAgICBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgY291bnQgaW5cbiAgICAgICAgICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBsZXQgayA9IHBvcCB2bSBpblxuICAgICAgICAgICAgbGV0IGtleSA9IG1hdGNoIGsgd2l0aCBTdHJpbmcgcyAtPiBzIHwgS2V5d29yZCBzIC0+IHMgfCBfIC0+IFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGsgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIGtleSB2XG4gICAgICAgICAgZG9uZTtcbiAgICAgICAgICBwdXNoIHZtIChEaWN0IGQpXG5cbiAgICAgICAgKCogLS0tLSBTdHJpbmcgb3BzIC0tLS0gKilcbiAgICAgICAgfCAxNDQgKCogT1BfU1RSX0NPTkNBVCAqKSAtPlxuICAgICAgICAgIGxldCBjb3VudCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgcGFydHMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgU3hfcnVudGltZS52YWx1ZV90b19zdHIgcGFydHMpIGluXG4gICAgICAgICAgcHVzaCB2bSAoU3RyaW5nIHMpXG5cbiAgICAgICAgKCogLS0tLSBEZWZpbmUgLS0tLSAqKVxuICAgICAgICB8IDEyOCAoKiBPUF9ERUZJTkUgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIHY7XG4gICAgICAgICAgKG1hdGNoICFTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGYgLT4gZiBuYW1lIHYgfCBOb25lIC0+ICgpKVxuXG4gICAgICAgICgqIC0tLS0gSW5saW5lIHByaW1pdGl2ZXMgLS0tLVxuICAgICAgICAgICBGYXN0IHBhdGggZm9yIGNvbW1vbiB0eXBlczsgZmFsbGJhY2sgdG8gYWN0dWFsIHByaW1pdGl2ZVxuICAgICAgICAgICBmb3IgZWRnZSBjYXNlcyAodHlwZSBjb2VyY2lvbiwgdGh1bmtzLCBSYXdIVE1MLCBldGMuKVxuICAgICAgICAgICB0byBndWFyYW50ZWUgYmVoYXZpb3JhbCBwYXJpdHkgd2l0aCBDQUxMX1BSSU0uICopXG4gICAgICAgIHwgMTYwICgqIE9QX0FERCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggKy4geSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIitcIikgW2E7IGJdKVxuICAgICAgICB8IDE2MSAoKiBPUF9TVUIgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC0uIHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCItXCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjIgKCogT1BfTVVMICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAqLiB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiKlwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTYzICgqIE9QX0RJViAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLy4geSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi9cIikgW2E7IGJdKVxuICAgICAgICB8IDE2NCAoKiBPUF9FUSAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IHJlYyBub3JtID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IExpc3QgKExpc3QubWFwIG5vcm0gbClcbiAgICAgICAgICAgIHwgTGlzdCBsIC0+IExpc3QgKExpc3QubWFwIG5vcm0gbCkgfCB2IC0+IHYgaW5cbiAgICAgICAgICBwdXNoIHZtIChCb29sIChub3JtIGEgPSBub3JtIGIpKVxuICAgICAgICB8IDE2NSAoKiBPUF9MVCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4IDwgeSlcbiAgICAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiPFwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTY2ICgqIE9QX0dUICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPiB5KVxuICAgICAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4gQm9vbCAoeCA+IHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCI+XCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjcgKCogT1BfTk9UICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChCb29sIChub3QgKHN4X3RydXRoeSB2KSkpXG4gICAgICAgIHwgMTY4ICgqIE9QX0xFTiAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbCkpXG4gICAgICAgICAgICB8IFN0cmluZyBzIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKEhhc2h0YmwubGVuZ3RoIGQpKVxuICAgICAgICAgICAgfCBOaWwgLT4gTnVtYmVyIDAuMFxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwibGVuXCIpIFt2XSlcbiAgICAgICAgfCAxNjkgKCogT1BfRklSU1QgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBMaXN0ICh4IDo6IF8pIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH0gLT4geFxuICAgICAgICAgICAgfCBMaXN0IFtdIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfSB8IE5pbCAtPiBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImZpcnN0XCIpIFt2XSlcbiAgICAgICAgfCAxNzAgKCogT1BfUkVTVCAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgKF8gOjogeHMpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gXyA6OiB4cyB9IC0+IExpc3QgeHNcbiAgICAgICAgICAgIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gfCBOaWwgLT4gTGlzdCBbXVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwicmVzdFwiKSBbdl0pXG4gICAgICAgIHwgMTcxICgqIE9QX05USCAqKSAtPlxuICAgICAgICAgIGxldCBuID0gcG9wIHZtIGFuZCBjb2xsID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCwgbiB3aXRoXG4gICAgICAgICAgICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBmKSB3aXRoIF8gLT4gTmlsKVxuICAgICAgICAgICAgfCBTdHJpbmcgcywgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgZiBpblxuICAgICAgICAgICAgICBpZiBpID49IDAgJiYgaSA8IFN0cmluZy5sZW5ndGggcyB0aGVuIFN0cmluZyAoU3RyaW5nLm1ha2UgMSBzLltpXSlcbiAgICAgICAgICAgICAgZWxzZSBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIm50aFwiKSBbY29sbDsgbl0pXG4gICAgICAgIHwgMTcyICgqIE9QX0NPTlMgKikgLT5cbiAgICAgICAgICBsZXQgY29sbCA9IHBvcCB2bSBhbmQgeCA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwgd2l0aFxuICAgICAgICAgICAgfCBMaXN0IGwgLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBOaWwgLT4gTGlzdCBbeF1cbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImNvbnNcIikgW3g7IGNvbGxdKVxuICAgICAgICB8IDE3MyAoKiBPUF9ORUcgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKC0ueClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi1cIikgW3ZdKVxuICAgICAgICB8IDE3NCAoKiBPUF9JTkMgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggKy4gMS4wKVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiaW5jXCIpIFt2XSlcbiAgICAgICAgfCAxNzUgKCogT1BfREVDICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHggLT4gTnVtYmVyICh4IC0uIDEuMClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImRlY1wiKSBbdl0pXG5cbiAgICAgICAgfCBvcGNvZGUgLT5cbiAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogdW5rbm93biBvcGNvZGUgJWQgYXQgaXA9JWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSAoZnJhbWUuaXAgLSAxKSkpXG4gICAgICAgIHdpdGggSW52YWxpZF9hcmd1bWVudCBtc2cgLT5cbiAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgXCJWTTogJXMgYXQgaXA9JWQgb3A9JWQgaW4gJXMgKGJhc2U9JWQgc3A9JWQgYmNfbGVuPSVkIGNvbnN0cz0lZClcIlxuICAgICAgICAgICAgbXNnIHNhdmVkX2lwIG9wIGZuX25hbWUgZnJhbWUuYmFzZSB2bS5zcFxuICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBiYykgKEFycmF5Lmxlbmd0aCBjb25zdHMpKSkpXG4gICAgICBlbmRcbiAgZG9uZVxuXG4oKiogRXhlY3V0ZSBhIGNvbXBpbGVkIG1vZHVsZSAodG9wLWxldmVsIGJ5dGVjb2RlKS4gKilcbmxldCBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwibW9kdWxlXCI7IHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gMDsgbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICB2bS5mcmFtZXMgPC0gW2ZyYW1lXTtcbiAgcnVuIHZtO1xuICBwb3Agdm1cblxuXG4oKiogezEgTGF6eSBKSVQgY29tcGlsYXRpb259ICopXG5cbigqKiBDb21waWxlIGEgbGFtYmRhIG9yIGNvbXBvbmVudCBib2R5IHRvIGJ5dGVjb2RlIHVzaW5nIHRoZSBTWCBjb21waWxlci5cbiAgICBJbnZva2VzIFtjb21waWxlXSBmcm9tIHNwZWMvY29tcGlsZXIuc3ggdmlhIHRoZSBDRUsgbWFjaGluZS5cbiAgICBSZXR1cm5zIGEgW3ZtX2Nsb3N1cmVdIHJlYWR5IGZvciBleGVjdXRpb24sIG9yIFtOb25lXSBvbiBmYWlsdXJlXG4gICAgKHNhZmUgZmFsbGJhY2sgdG8gQ0VLIGludGVycHJldGF0aW9uKS5cblxuICAgIFRoZSBjb21waWxhdGlvbiBjb3N0IGlzIGEgc2luZ2xlIENFSyBldmFsdWF0aW9uIG9mIHRoZSBjb21waWxlciDigJRcbiAgICBtaWNyb3NlY29uZHMgcGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBpbiB0aGUgbGFtYmRhL2NvbXBvbmVudFxuICAgIHJlY29yZCBzbyBzdWJzZXF1ZW50IGNhbGxzIGdvIHN0cmFpZ2h0IHRvIHRoZSBWTS4gKilcbmxldCBqaXRfY29tcGlsZV9sYW1iZGEgKGwgOiBsYW1iZGEpIGdsb2JhbHMgPVxuICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiPGFub24+XCIgaW5cbiAgdHJ5XG4gICAgbGV0IGNvbXBpbGVfZm4gPSB0cnkgSGFzaHRibC5maW5kIGdsb2JhbHMgXCJjb21waWxlXCJcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiSklUOiBjb21waWxlciBub3QgbG9hZGVkXCIpIGluXG4gICAgKCogUmVjb25zdHJ1Y3QgdGhlIChmbiAocGFyYW1zKSBib2R5KSBmb3JtIHNvIHRoZSBjb21waWxlciBwcm9kdWNlc1xuICAgICAgIGEgcHJvcGVyIGNsb3N1cmUuIGwubF9ib2R5IGlzIHRoZSBpbm5lciBib2R5OyB3ZSBuZWVkIHRoZSBmdWxsXG4gICAgICAgZnVuY3Rpb24gZm9ybSB3aXRoIHBhcmFtcyBzbyB0aGUgY29tcGlsZWQgY29kZSBiaW5kcyB0aGVtLiAqKVxuICAgIGxldCBwYXJhbV9zeW1zID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN5bWJvbCBzKSBsLmxfcGFyYW1zKSBpblxuICAgIGxldCBmbl9leHByID0gTGlzdCBbU3ltYm9sIFwiZm5cIjsgcGFyYW1fc3ltczsgbC5sX2JvZHldIGluXG4gICAgbGV0IHF1b3RlZCA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGZuX2V4cHJdIGluXG4gICAgKCogVXNlIFN5bWJvbCBcImNvbXBpbGVcIiBzbyB0aGUgQ0VLIHJlc29sdmVzIGl0IGZyb20gdGhlIGVudiwgbm90XG4gICAgICAgYW4gZW1iZWRkZWQgVm1DbG9zdXJlIHZhbHVlIOKAlCB0aGUgQ0VLIGRpc3BhdGNoZXMgVm1DbG9zdXJlIGNhbGxzXG4gICAgICAgZGlmZmVyZW50bHkgd2hlbiB0aGUgdmFsdWUgaXMgcmVzb2x2ZWQgZnJvbSBlbnYgdnMgZW1iZWRkZWQgaW4gQVNULiAqKVxuICAgIGlnbm9yZSBjb21waWxlX2ZuO1xuICAgIGxldCBjb21waWxlX2VudiA9IFN4X3R5cGVzLmVudl9leHRlbmQgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgY29tcGlsZV9lbnYuYmluZGluZ3MgKFN4X3R5cGVzLmludGVybiBrKSB2KSBnbG9iYWxzO1xuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtTeW1ib2wgXCJjb21waWxlXCI7IHF1b3RlZF0pIChFbnYgY29tcGlsZV9lbnYpIGluXG4gICAgKCogQ2xvc3VyZSB2YXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSB2bV9jbG9zdXJlX2VudiAoc2V0IG9uIHRoZSBWbUNsb3N1cmVcbiAgICAgICBhdCBsaW5lIH42MTcpLiBPUF9HTE9CQUxfR0VUIGZhbGxzIGJhY2sgdG8gdm1fY2xvc3VyZV9lbnYgd2hlbiB2YXJzXG4gICAgICAgYXJlbid0IGluIGdsb2JhbHMuIE5vIGluamVjdGlvbiBpbnRvIHRoZSBzaGFyZWQgZ2xvYmFscyB0YWJsZSDigJRcbiAgICAgICB0aGF0IHdvdWxkIGJyZWFrIGNsb3N1cmUgaXNvbGF0aW9uIGZvciBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlXG4gICAgICAgbWFrZS1wYWdlLWZuIHdoZXJlIG11bHRpcGxlIGNsb3N1cmVzIGNhcHR1cmUgZGlmZmVyZW50IHZhbHVlc1xuICAgICAgIGZvciB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lcy4gKilcbiAgICBsZXQgZWZmZWN0aXZlX2dsb2JhbHMgPSBnbG9iYWxzIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgdm1fbmFtZSA9IGwubF9uYW1lOyB2bV9lbnZfcmVmID0gZWZmZWN0aXZlX2dsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gU29tZSBsLmxfY2xvc3VyZSB9XG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6IGNsb3N1cmUgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbD0lZClcXG4lIVwiXG4gICAgICAgICAgICBmbl9uYW1lIGlkeCAoQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzKTtcblxuICAgICAgICAgIE5vbmVcbiAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAoKiBOb3QgYSBjbG9zdXJlIOKAlCBjb25zdGFudCBleHByZXNzaW9uLCBhbGlhcywgb3Igc2ltcGxlIGNvbXB1dGF0aW9uLlxuICAgICAgICAgICBFeGVjdXRlIHRoZSBieXRlY29kZSBhcyBhIG1vZHVsZSB0byBnZXQgdGhlIHZhbHVlLCB0aGVuIHdyYXBcbiAgICAgICAgICAgYXMgYSBOYXRpdmVGbiBpZiBpdCdzIGNhbGxhYmxlIChzbyB0aGUgQ0VLIGNhbiBkaXNwYXRjaCB0byBpdCkuICopXG4gICAgICAgICh0cnlcbiAgICAgICAgICBsZXQgdmFsdWUgPSBleGVjdXRlX21vZHVsZSBvdXRlcl9jb2RlIGdsb2JhbHMgaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFJFU09MVkVEICVzOiAlcyAoYmNbMF09JWQpXFxuJSFcIlxuICAgICAgICAgICAgZm5fbmFtZSAodHlwZV9vZiB2YWx1ZSkgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSk7XG4gICAgICAgICAgKCogSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGEgTmF0aXZlRm4sIHdlIGNhbid0IHdyYXAgaXQgYXMgYVxuICAgICAgICAgICAgIHZtX2Nsb3N1cmUg4oCUIGp1c3QgbGV0IHRoZSBDRUsgaGFuZGxlIGl0IGRpcmVjdGx5LiBSZXR1cm4gTm9uZVxuICAgICAgICAgICAgIHNvIHRoZSBsYW1iZGEgZmFsbHMgdGhyb3VnaCB0byBDRUssIHdoaWNoIHdpbGwgZmluZCB0aGVcbiAgICAgICAgICAgICByZXNvbHZlZCB2YWx1ZSBpbiB0aGUgZW52IG9uIG5leHQgbG9va3VwLiAqKVxuICAgICAgICAgIE5vbmVcbiAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBub24tY2xvc3VyZSBleGVjdXRpb24gZmFpbGVkIChiY1swXT0lZCwgbGVuPSVkKVxcbiUhXCJcbiAgICAgICAgICAgIGZuX25hbWUgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSkgKEFycmF5Lmxlbmd0aCBiYyk7XG4gICAgICAgICAgTm9uZSlcbiAgICAgIGVuZFxuICAgIHwgXyAtPlxuICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiBjb21waWxlciByZXR1cm5lZCAlc1xcbiUhXCIgZm5fbmFtZSAodHlwZV9vZiByZXN1bHQpO1xuICAgICAgTm9uZSlcbiAgd2l0aCBlIC0+XG4gICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlc1xcbiUhXCIgZm5fbmFtZSAoUHJpbnRleGMudG9fc3RyaW5nIGUpO1xuICAgIE5vbmVcblxuKCogV2lyZSB1cCBmb3J3YXJkIHJlZmVyZW5jZXMgKilcbmxldCAoKSA9IGppdF9jb21waWxlX3JlZiA6PSBqaXRfY29tcGlsZV9sYW1iZGFcbmxldCAoKSA9IF92bV9jYWxsX2Nsb3N1cmVfcmVmIDo9IChmdW4gY2wgYXJncyAtPiBjYWxsX2Nsb3N1cmUgY2wgYXJncyBjbC52bV9lbnZfcmVmKVxuXG5cbigqKiB7MSBEZWJ1Z2dpbmcgLyBpbnRyb3NwZWN0aW9ufSAqKVxuXG4oKiogTWFwIG9wY29kZSBpbnRlZ2VyIHRvIGh1bWFuLXJlYWRhYmxlIG5hbWUuICopXG5sZXQgb3Bjb2RlX25hbWUgPSBmdW5jdGlvblxuICB8IDEgLT4gXCJDT05TVFwiIHwgMiAtPiBcIk5JTFwiIHwgMyAtPiBcIlRSVUVcIiB8IDQgLT4gXCJGQUxTRVwiXG4gIHwgNSAtPiBcIlBPUFwiIHwgNiAtPiBcIkRVUFwiXG4gIHwgMTYgLT4gXCJMT0NBTF9HRVRcIiB8IDE3IC0+IFwiTE9DQUxfU0VUXCJcbiAgfCAxOCAtPiBcIlVQVkFMVUVfR0VUXCIgfCAxOSAtPiBcIlVQVkFMVUVfU0VUXCJcbiAgfCAyMCAtPiBcIkdMT0JBTF9HRVRcIiB8IDIxIC0+IFwiR0xPQkFMX1NFVFwiXG4gIHwgMzIgLT4gXCJKVU1QXCIgfCAzMyAtPiBcIkpVTVBfSUZfRkFMU0VcIiB8IDM0IC0+IFwiSlVNUF9JRl9UUlVFXCJcbiAgfCA0OCAtPiBcIkNBTExcIiB8IDQ5IC0+IFwiVEFJTF9DQUxMXCIgfCA1MCAtPiBcIlJFVFVSTlwiXG4gIHwgNTEgLT4gXCJDTE9TVVJFXCIgfCA1MiAtPiBcIkNBTExfUFJJTVwiXG4gIHwgNjQgLT4gXCJMSVNUXCIgfCA2NSAtPiBcIkRJQ1RcIlxuICB8IDEyOCAtPiBcIkRFRklORVwiXG4gIHwgMTQ0IC0+IFwiU1RSX0NPTkNBVFwiXG4gIHwgMTYwIC0+IFwiQUREXCIgfCAxNjEgLT4gXCJTVUJcIiB8IDE2MiAtPiBcIk1VTFwiIHwgMTYzIC0+IFwiRElWXCJcbiAgfCAxNjQgLT4gXCJFUVwiIHwgMTY1IC0+IFwiTFRcIiB8IDE2NiAtPiBcIkdUXCIgfCAxNjcgLT4gXCJOT1RcIlxuICB8IDE2OCAtPiBcIkxFTlwiIHwgMTY5IC0+IFwiRklSU1RcIiB8IDE3MCAtPiBcIlJFU1RcIiB8IDE3MSAtPiBcIk5USFwiXG4gIHwgMTcyIC0+IFwiQ09OU1wiIHwgMTczIC0+IFwiTkVHXCIgfCAxNzQgLT4gXCJJTkNcIiB8IDE3NSAtPiBcIkRFQ1wiXG4gIHwgbiAtPiBQcmludGYuc3ByaW50ZiBcIlVOS05PV05fJWRcIiBuXG5cbigqKiBOdW1iZXIgb2YgZXh0cmEgb3BlcmFuZCBieXRlcyBjb25zdW1lZCBieSBlYWNoIG9wY29kZS5cbiAgICBSZXR1cm5zIChmb3JtYXQsIHRvdGFsX2J5dGVzKSB3aGVyZSBmb3JtYXQgZGVzY3JpYmVzIHRoZSBvcGVyYW5kIHR5cGVzLiAqKVxubGV0IG9wY29kZV9vcGVyYW5kX3NpemUgPSBmdW5jdGlvblxuICB8IDEgKCogQ09OU1QgKikgfCAyMCAoKiBHTE9CQUxfR0VUICopIHwgMjEgKCogR0xPQkFMX1NFVCAqKVxuICB8IDY0ICgqIExJU1QgKikgfCA2NSAoKiBESUNUICopIHwgMTI4ICgqIERFRklORSAqKSAtPiAyICAoKiB1MTYgKilcbiAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgfCAxOCAoKiBVUFZBTFVFX0dFVCAqKSB8IDE5ICgqIFVQVkFMVUVfU0VUICopXG4gIHwgNDggKCogQ0FMTCAqKSB8IDQ5ICgqIFRBSUxfQ0FMTCAqKVxuICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+IDEgICgqIHU4ICopXG4gIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKikgLT4gMiAgKCogaTE2ICopXG4gIHwgNTEgKCogQ0xPU1VSRSAqKSAtPiAyICAoKiB1MTYgZm9yIGNvbnN0YW50IGluZGV4OyB1cHZhbHVlIGRlc2NyaXB0b3JzIGZvbGxvdyBkeW5hbWljYWxseSAqKVxuICB8IDUyICgqIENBTExfUFJJTSAqKSAtPiAzICAoKiB1MTYgKyB1OCAqKVxuICB8IF8gLT4gMCAgKCogbm8gb3BlcmFuZCAqKVxuXG4oKiogVHJhY2UgYSBzaW5nbGUgZXhlY3V0aW9uIOKAlCBjb21waWxlICsgcnVuLCBjb2xsZWN0aW5nIHRyYWNlIGVudHJpZXMuXG4gICAgRWFjaCBlbnRyeSBpcyBhIGRpY3Qgd2l0aCA6b3Bjb2RlLCA6c3RhY2ssIDpkZXB0aC4gKilcbmxldCB0cmFjZV9ydW4gc3JjIGdsb2JhbHMgPVxuICAoKiBDb21waWxlICopXG4gIGxldCBjb21waWxlX2ZuID0gdHJ5IEhhc2h0YmwuZmluZCBnbG9iYWxzIFwiY29tcGlsZVwiXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmFjZTogY29tcGlsZXIgbm90IGxvYWRlZFwiKSBpblxuICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGggW2VdIC0+IGUgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpIGluXG4gIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBleHByXSBpblxuICBsZXQgY29kZV92YWwgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtjb21waWxlX2ZuOyBxdW90ZWRdKSAoRW52IChtYWtlX2VudiAoKSkpIGluXG4gIGxldCBjb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gIGxldCBjbCA9IHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTsgdm1fbmFtZSA9IFNvbWUgXCJ0cmFjZVwiO1xuICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUwID0geyBjbG9zdXJlID0gY2w7IGlwID0gMDsgYmFzZSA9IDA7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGZvciBfID0gMCB0byBjb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZTtcbiAgdm0uZnJhbWVzIDwtIFtmcmFtZTBdO1xuICAoKiBSdW4gd2l0aCB0cmFjaW5nICopXG4gIGxldCB0cmFjZSA9IHJlZiBbXSBpblxuICBsZXQgbWF4X3N0ZXBzID0gMTAwMDAgaW5cbiAgbGV0IHN0ZXBzID0gcmVmIDAgaW5cbiAgKHRyeVxuICAgIHdoaWxlIHZtLmZyYW1lcyA8PiBbXSAmJiAhc3RlcHMgPCBtYXhfc3RlcHMgZG9cbiAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoXG4gICAgICB8IFtdIC0+ICgpXG4gICAgICB8IGZyYW1lIDo6IF8gLT5cbiAgICAgICAgbGV0IGJjID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuXG4gICAgICAgICAgdm0uZnJhbWVzIDwtIFtdXG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgb3AgPSBiYy4oZnJhbWUuaXApIGluXG4gICAgICAgICAgKCogU25hcHNob3Qgc3RhY2sgdG9wIDUgKilcbiAgICAgICAgICBsZXQgc3RhY2tfc25hcCA9IExpc3QuaW5pdCAobWluIDUgdm0uc3ApIChmdW4gaSAtPlxuICAgICAgICAgICAgbGV0IHYgPSB2bS5zdGFjay4odm0uc3AgLSAxIC0gaSkgaW5cbiAgICAgICAgICAgIFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KSkgaW5cbiAgICAgICAgICBsZXQgZW50cnkgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib3Bjb2RlXCIgKFN0cmluZyAob3Bjb2RlX25hbWUgb3ApKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJzdGFja1wiIChMaXN0IHN0YWNrX3NuYXApO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcImRlcHRoXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCB2bS5mcmFtZXMpKSk7XG4gICAgICAgICAgdHJhY2UgOj0gRGljdCBlbnRyeSA6OiAhdHJhY2U7XG4gICAgICAgICAgaW5jciBzdGVwcztcbiAgICAgICAgICAoKiBFeGVjdXRlIG9uZSBzdGVwIOKAlCB1c2UgdGhlIG1haW4gcnVuIGxvb3AgZm9yIDEgc3RlcC5cbiAgICAgICAgICAgICBXZSBkbyB0aGlzIGJ5IHNhdmluZyB0aGUgc3RhdGUgYW5kIHJ1bm5pbmcgdGhlIG9yaWdpbmFsIGRpc3BhdGNoLiAqKVxuICAgICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICAgIGxldCByZXN0X2ZyYW1lcyA9IExpc3QudGwgdm0uZnJhbWVzIGluXG4gICAgICAgICAgKHRyeSBtYXRjaCBvcCB3aXRoXG4gICAgICAgICAgfCAxIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpbiBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeClcbiAgICAgICAgICB8IDIgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgICB8IDMgLT4gcHVzaCB2bSAoQm9vbCB0cnVlKVxuICAgICAgICAgIHwgNCAtPiBwdXNoIHZtIChCb29sIGZhbHNlKVxuICAgICAgICAgIHwgNSAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgICB8IDYgLT4gcHVzaCB2bSAocGVlayB2bSlcbiAgICAgICAgICB8IDE2IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IHYgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIGluXG4gICAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgICB8IDE3IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpbiBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWUgPC0gdlxuICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgICAgfCAxOCAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgcHVzaCB2bSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlXG4gICAgICAgICAgfCAxOSAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgICAgfCAyMCAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIGxldCB2ID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICAgIHwgMjEgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIChwZWVrIHZtKVxuICAgICAgICAgIHwgMzIgLT4gbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgICAgfCAzMyAtPiBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGlmIG5vdCAoc3hfdHJ1dGh5IHYpIHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgICB8IDM0IC0+IGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpbiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICAgIHwgNDggLT4gbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtX2NhbGwgdm0gZiAoTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykpXG4gICAgICAgICAgfCA0OSAtPiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzOyB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgICAgdm1fY2FsbCB2bSBmIChMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSlcbiAgICAgICAgICB8IDUwIC0+IGxldCByZXN1bHQgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lczsgdm0uc3AgPC0gZnJhbWUuYmFzZTsgcHVzaCB2bSByZXN1bHRcbiAgICAgICAgICB8IDUxIC0+ICgqIENMT1NVUkUg4oCUIHNraXAgZm9yIHRyYWNlLCBqdXN0IGFkdmFuY2UgcGFzdCB1cHZhbHVlIGRlc2NyaXB0b3JzICopXG4gICAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBjb2RlX3ZhbDIgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIGluXG4gICAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb2RlX3ZhbDIgd2l0aFxuICAgICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKVxuICAgICAgICAgICAgICB8IF8gLT4gMCBpblxuICAgICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgICAgbGV0IGlzX2xvY2FsID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSBleGlzdGluZyAtPiBleGlzdGluZ1xuICAgICAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IGM7IGMgaW5cbiAgICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICAgIGVuZCBlbHNlIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICAgKSBpblxuICAgICAgICAgICAgbGV0IGlubmVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwyIGluXG4gICAgICAgICAgICBsZXQgYyA9IHsgdm1fY29kZSA9IGlubmVyX2NvZGU7IHZtX3VwdmFsdWVzID0gdXB2YWx1ZXM7IHZtX25hbWUgPSBOb25lO1xuICAgICAgICAgICAgICAgICAgICAgICB2bV9lbnZfcmVmID0gdm0uZ2xvYmFsczsgdm1fY2xvc3VyZV9lbnYgPSBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IH0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjKVxuICAgICAgICAgIHwgNTIgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluIGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgbGV0IGFyZ3MgPSBMaXN0LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgICAgbGV0IGZuX3ZhbCA9IHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZSB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogdW5rbm93biBwcmltaXRpdmUgXCIgXiBuYW1lKSkgaW5cbiAgICAgICAgICAgIChtYXRjaCBmbl92YWwgd2l0aCBOYXRpdmVGbiAoXywgZm4pIC0+IHB1c2ggdm0gKGZuIGFyZ3MpIHwgXyAtPiBwdXNoIHZtIE5pbClcbiAgICAgICAgICB8IDY0IC0+IGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKExpc3QgaXRlbXMpXG4gICAgICAgICAgfCA2NSAtPiBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICAgICAgICAgICAgZm9yIF8gPSAxIHRvIGNvdW50IGRvIGxldCB2ID0gcG9wIHZtIGluIGxldCBrID0gcG9wIHZtIGluXG4gICAgICAgICAgICAgIGxldCBrZXkgPSBtYXRjaCBrIHdpdGggU3RyaW5nIHMgLT4gcyB8IEtleXdvcmQgcyAtPiBzIHwgXyAtPiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBrIGluXG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIGtleSB2IGRvbmU7XG4gICAgICAgICAgICBwdXNoIHZtIChEaWN0IGQpXG4gICAgICAgICAgfCAxMjggLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIChwZWVrIHZtKVxuICAgICAgICAgIHwgMTQ0IC0+IGxldCBjb3VudCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgICAgcHVzaCB2bSAoU3RyaW5nIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIHBhcnRzKSkpXG4gICAgICAgICAgfCAxNjAgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICsuIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjEgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC0uIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjIgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICouIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjMgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC8uIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjQgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW4gcHVzaCB2bSAoQm9vbCAoYSA9IGIpKVxuICAgICAgICAgIHwgMTY1IC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPCB5KSB8IF8gLT4gQm9vbCBmYWxzZSlcbiAgICAgICAgICB8IDE2NiAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4ID4geSkgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCAxNjcgLT4gbGV0IHYgPSBwb3Agdm0gaW4gcHVzaCB2bSAoQm9vbCAobm90IChzeF90cnV0aHkgdikpKVxuICAgICAgICAgIHwgMTY4IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgICAgfCBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoIGwpKVxuICAgICAgICAgICAgICB8IFN0cmluZyBzIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgICAgICAgICAgICB8IF8gLT4gTnVtYmVyIDAuMClcbiAgICAgICAgICB8IDE2OSAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIExpc3QgKHggOjogXykgfCBMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfSAtPiB4IHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzAgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgICB8IExpc3QgKF8gOjogeHMpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gXyA6OiB4cyB9IC0+IExpc3QgeHMgfCBfIC0+IExpc3QgW10pXG4gICAgICAgICAgfCAxNzEgLT4gbGV0IG4gPSBwb3Agdm0gYW5kIGNvbGwgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwsIG4gd2l0aFxuICAgICAgICAgICAgICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IGYpIHdpdGggXyAtPiBOaWwpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzIgLT4gbGV0IGNvbGwgPSBwb3Agdm0gYW5kIHggPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwgd2l0aCBMaXN0IGwgLT4gTGlzdCAoeCA6OiBsKSB8IF8gLT4gTGlzdCBbeF0pXG4gICAgICAgICAgfCAxNzMgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKC0ueCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE3NCAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIE51bWJlciB4IC0+IE51bWJlciAoeCArLiAxLjApIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzUgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggLS4gMS4wKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgXyAtPiAoKVxuICAgICAgICAgIHdpdGggZSAtPlxuICAgICAgICAgICAgbGV0IF8gPSBlIGluXG4gICAgICAgICAgICBpZ25vcmUgc2F2ZWRfaXA7XG4gICAgICAgICAgICAoKiBPbiBlcnJvciBkdXJpbmcgdHJhY2UsIGp1c3Qgc3RvcCAqKVxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIFtdKVxuICAgICAgICBlbmRcbiAgICBkb25lXG4gIHdpdGggXyAtPiAoKSk7XG4gIExpc3QgKExpc3QucmV2ICF0cmFjZSlcblxuKCoqIERpc2Fzc2VtYmxlIGEgdm1fY29kZSBpbnRvIGEgbGlzdCBvZiBpbnN0cnVjdGlvbiBkaWN0cy4gKilcbmxldCBkaXNhc3NlbWJsZSAoY29kZSA6IHZtX2NvZGUpID1cbiAgbGV0IGJjID0gY29kZS52Y19ieXRlY29kZSBpblxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGJjIGluXG4gIGxldCBjb25zdHMgPSBjb2RlLnZjX2NvbnN0YW50cyBpblxuICBsZXQgaW5zdHJzID0gcmVmIFtdIGluXG4gIGxldCBpcCA9IHJlZiAwIGluXG4gIHdoaWxlICFpcCA8IGxlbiBkb1xuICAgIGxldCBvZmZzZXQgPSAhaXAgaW5cbiAgICBsZXQgb3AgPSBiYy4oIWlwKSBpblxuICAgIGlwIDo9ICFpcCArIDE7XG4gICAgbGV0IG5hbWUgPSBvcGNvZGVfbmFtZSBvcCBpblxuICAgIGxldCBvcGVyYW5kcyA9IHJlZiBbXSBpblxuICAgIChtYXRjaCBvcCB3aXRoXG4gICAgfCAxICgqIENPTlNUICopIHwgMjAgKCogR0xPQkFMX0dFVCAqKSB8IDIxICgqIEdMT0JBTF9TRVQgKilcbiAgICB8IDEyOCAoKiBERUZJTkUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IGlkeCA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGlwIDo9ICFpcCArIDI7XG4gICAgICAgIGxldCBjb25zdF9zdHIgPSBpZiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzXG4gICAgICAgICAgdGhlbiBTeF90eXBlcy5pbnNwZWN0IGNvbnN0cy4oaWR4KSBlbHNlIFwiP1wiIGluXG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpOyBTdHJpbmcgY29uc3Rfc3RyXVxuICAgICAgZW5kXG4gICAgfCA2NCAoKiBMSVNUICopIHwgNjUgKCogRElDVCAqKSB8IDUxICgqIENMT1NVUkUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IGlkeCA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGlwIDo9ICFpcCArIDI7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpXTtcbiAgICAgICAgKCogRm9yIENMT1NVUkUsIHNraXAgdXB2YWx1ZSBkZXNjcmlwdG9ycyAqKVxuICAgICAgICBpZiBvcCA9IDUxICYmIGlkeCA8IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlbiBiZWdpblxuICAgICAgICAgIGxldCB1dl9jb3VudCA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoXG4gICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gMClcbiAgICAgICAgICAgIHwgXyAtPiAwIGluXG4gICAgICAgICAgaXAgOj0gIWlwICsgdXZfY291bnQgKiAyXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgICB8IDE4ICgqIFVQVkFMVUVfR0VUICopIHwgMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgICB8IDQ4ICgqIENBTEwgKikgfCA0OSAoKiBUQUlMX0NBTEwgKilcbiAgICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+XG4gICAgICBpZiAhaXAgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgdiA9IGJjLighaXApIGluIGlwIDo9ICFpcCArIDE7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCB2KV1cbiAgICAgIGVuZFxuICAgIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IHJhdyA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGxldCBzaWduZWQgPSBpZiByYXcgPj0gMzI3NjggdGhlbiByYXcgLSA2NTUzNiBlbHNlIHJhdyBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgc2lnbmVkKV1cbiAgICAgIGVuZFxuICAgIHwgNTIgKCogQ0FMTF9QUklNICopIC0+XG4gICAgICBpZiAhaXAgKyAyIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBsZXQgYXJnYyA9IGJjLighaXAgKyAyKSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAzO1xuICAgICAgICBsZXQgcHJpbV9uYW1lID0gaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0c1xuICAgICAgICAgIHRoZW4gKG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiKSBlbHNlIFwiP1wiIGluXG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpOyBTdHJpbmcgcHJpbV9uYW1lOyBOdW1iZXIgKGZsb2F0X29mX2ludCBhcmdjKV1cbiAgICAgIGVuZFxuICAgIHwgXyAtPiAoKSk7XG4gICAgbGV0IGVudHJ5ID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9mZnNldFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBvZmZzZXQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvcGNvZGVcIiAoU3RyaW5nIG5hbWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9wZXJhbmRzXCIgKExpc3QgIW9wZXJhbmRzKTtcbiAgICBpbnN0cnMgOj0gRGljdCBlbnRyeSA6OiAhaW5zdHJzXG4gIGRvbmU7XG4gIGxldCByZXN1bHQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJhcml0eVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2RlLnZjX2FyaXR5KSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJudW1fbG9jYWxzXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGNvZGUudmNfbG9jYWxzKSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJjb25zdGFudHNcIiAoTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gdiAtPiBTdHJpbmcgKFN4X3R5cGVzLmluc3BlY3QgdikpIGNvbnN0cykpKTtcbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcImJ5dGVjb2RlXCIgKExpc3QgKExpc3QucmV2ICFpbnN0cnMpKTtcbiAgRGljdCByZXN1bHRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZXF1YWwiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsOCIsImE0IiwiYTUiLCJhNiIsImE3IiwiZ2xvYmFsX2RhdGEiLCJTeF9yZWYiLCJTeF9ydW50aW1lIiwiU3RkbGliIiwiU3hfdHlwZXMiLCJTeF9wcmltaXRpdmVzIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0FycmF5IiwiU3hfcGFyc2VyIiwiU3RkbGliX1ByaW50ZXhjIiwiaml0X2NvbXBpbGVfcmVmIiwicGFyYW0iLCJqaXRfZmFpbGVkX3NlbnRpbmVsIiwiaXNfaml0X2ZhaWxlZCIsImNsIiwiY3JlYXRlIiwiZ2xvYmFscyIsInB1c2giLCJ2bSIsInYiLCJucyIsInBvcCIsInBlZWsiLCJyZWFkX3U4IiwicmVhZF91MTYiLCJsbyIsImhpIiwicmVhZF9pMTYiLCJjbG9zdXJlX3RvX3ZhbHVlIiwibWF0Y2giLCJhcmdzIiwibiIsInZtX2luc25fY291bnQiLCJ2bV9jYWxsX2NvdW50Iiwidm1fY2VrX2NvdW50Iiwidm1fcmVzZXRfY291bnRlcnMiLCJ2bV9yZXBvcnRfY291bnRlcnMiLCJwdXNoX2Nsb3N1cmVfZnJhbWUiLCJmcmFtZSIsImEiLCJmb3IkIiwiY3N0X2FyaXR5IiwiY3N0X2J5dGVjb2RlIiwiY3N0X2NvbnN0YW50cyIsImNvZGVfZnJvbV92YWx1ZSIsImQiLCJsIiwieCIsImJjX2xpc3QiLCJlbnRyaWVzIiwiY29uc3RhbnRzIiwiZW50cnkiLCJlZCIsImFyaXR5IiwiYWN0aXZlX3ZtIiwiY2FsbF9jbG9zdXJlIiwicHJldl92bSIsImUiLCJjYWxsX2Nsb3N1cmVfcmV1c2UiLCJ2bV9jYWxsIiwiZm4iLCJyZXN1bHQiLCJjc3QiLCJjc3RfYmFzZSIsImNzdF9hdF9pcCIsImNzdF9zcCIsImNzdF9WTV91bmRlZmluZWQiLCJjc3RfVk1fdW5rbm93bl9wcmltaXRpdmUiLCJjc3RfdXB2YWx1ZV9jb3VudCIsInJ1biIsInJlc3RfZnJhbWVzIiwiYmMiLCJjb25zdHMiLCJmbl9uYW1lIiwic2F2ZWRfaXAiLCJvcCIsInN3aXRjaGVyIiwiaWR4IiwibmFtZSIsInMiLCJjb3VudCIsInBhcnRzIiwiYiIsInkiLCJub3JtIiwieHMiLCJjb2xsIiwiaSIsImV4biIsInNsb3QiLCJjZWxsIiwiaWQiLCJlbnYiLCJwIiwid3JpdHRlbiIsIm9mZnNldCIsImFyZ2MiLCJhcmdzX2xpc3QiLCJjb2RlX3ZhbCIsImNvZGUiLCJ1dl9jb3VudCIsInVwdmFsdWVzIiwiaXNfbG9jYWwiLCJpbmRleCIsImV4aXN0aW5nIiwiYyIsImZuX3ZhbCIsIm1zZyIsIml0ZW1zIiwiayIsImtleSIsImV4ZWN1dGVfbW9kdWxlIiwiY3N0X2ppdF9GQUlMIiwiY3N0X2NvbXBpbGUiLCJjc3RfcXVvdGUiLCJqaXRfY29tcGlsZV9sYW1iZGEiLCJlZmZlY3RpdmVfZ2xvYmFscyIsInBhcmFtX3N5bXMiLCJmbl9leHByIiwiY29tcGlsZV9lbnYiLCJvdXRlcl9jb2RlIiwiaW5uZXJfdmFsIiwidmFsdWUiLCJvcGNvZGVfbmFtZSIsIm9wY29kZV9vcGVyYW5kX3NpemUiLCJjc3Rfb3Bjb2RlIiwidHJhY2VfcnVuIiwic3JjIiwiY29tcGlsZV9mbiIsImV4cHJzIiwiZXhwciIsInF1b3RlZCIsImZyYW1lMCIsInRyYWNlIiwic3RlcHMiLCJzdGFja19zbmFwIiwiY29kZV92YWwyIiwiaW5uZXJfY29kZSIsImRpc2Fzc2VtYmxlIiwibGVuIiwiaXAiLCJpbnN0cnMiLCJvcGVyYW5kcyIsInByaW1fbmFtZSIsInJhdyIsInNpZ25lZCIsImNvbnN0X3N0ciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFOLEdBQUFDLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxrQkFBQSxnQkFBQUMsT0NnQ2tCLFNBQUk7QUFBQSxJQUFBQztBQUFBQSxNQU04QztBQUFB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QSw2QkFBQUUsYUFBQSxVQUFBRixPQUFBO0FBQUEsT0FHRSw0QkFBQUUsYUFBQSxVQUFBRixPQUFBO0FBQUE7QUFBQSxRQUFBbkgsS0FDVztBQUFBLFlBQVk7QUFBQSxRQUFBQyxLQUFTO0FBQUEsUUFBQW1ELE1BQzlCO0FBQUEsUUFBQStELE9BQ0E7QUFBQSxPQUNBO0FBQUE7QUFBQSxhQUN3QjtBQUFBLFNBQUFNLFlBQWpCO0FBQUE7QUFBQSxZQUFBQSxZQURQO0FBQUEsV0FBQUosYUFFc0MsdUNBQUFGLE9BQUE7QUFBQTtBQUFBO0FBQUEsTUFxQnhDO0FBQUE7QUFBQSxRQUFBekgsSUFDVTtBQUFBLFFBQUEySCxhQXNCWjtBQUFBLFFBQUFGLE9BQUE7QUFBQTtBQUFBLFdBQUFFLGFBdkJFLFVBQUFGLE9BQUE7QUFBQTtBQUFBLFNBQUF6RixRQXVCVTtBQUFBLEtBQ1o7QUFBQSxLQUNBO0FBQUEsS0FDQTtBQUFBLEtBQWlEO0FBQUE7QUFBQTtBQUFBLFFBQUFVLFNBR3RDO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUEsT0FDd0Q7QUFBQSx3QkFBQTFDLEdBQTRCLHNDQUFvQjtBQUFBLFNBQS9EO0FBQUEsSUFBekM7QUFBQSxZQUN3QztBQUFBLElBQXhDO0FBQUEsSUFBMkQ7QUFBQSxHQUNoRDtBQUFBLEdBbjRCdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHRDcEYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozNzIzOSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfc2NvcGUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogU2NvcGUgc3RhY2tzIOKAlCBkeW5hbWljIHNjb3BlIGZvciByZW5kZXItdGltZSBlZmZlY3RzLlxuXG4gICAgUHJvdmlkZXMgc2NvcGUtcHVzaCEvcG9wIS9wZWVrLCBjb2xsZWN0IS9jb2xsZWN0ZWQvY2xlYXItY29sbGVjdGVkISxcbiAgICBzY29wZS1lbWl0IS9lbWl0dGVkL3Njb3BlLWVtaXR0ZWQsIGNvbnRleHQsIGFuZCBjb29raWUgYWNjZXNzLlxuXG4gICAgQWxsIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCBhcyBwcmltaXRpdmVzIHNvIGJvdGggdGhlIENFSyBldmFsdWF0b3JcbiAgICBhbmQgdGhlIEpJVCBWTSBjYW4gZmluZCB0aGVtIGluIHRoZSBzYW1lIHBsYWNlLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBUaGUgc2hhcmVkIHNjb3BlIHN0YWNrcyBoYXNodGFibGUuIEVhY2gga2V5IG1hcHMgdG8gYSBzdGFjayBvZiB2YWx1ZXMuXG4gICAgVXNlZCBieSBhc2VyIGZvciBzcHJlYWQvcHJvdmlkZS9lbWl0IHBhdHRlcm5zLCBDU1NYIGNvbGxlY3QvZmx1c2gsIGV0Yy4gKilcbmxldCBzY29wZV9zdGFja3MgOiAoc3RyaW5nLCB2YWx1ZSBsaXN0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbigqKiBEZWJ1ZyB0cmFjZSBmb3Igc2NvcGUgb3BlcmF0aW9ucyDigJQgZW5hYmxlZCBmcm9tIEpTICopXG5sZXQgX3Njb3BlX3RyYWNlID0gcmVmIGZhbHNlXG5sZXQgX3Njb3BlX2xvZyA6IHN0cmluZyBsaXN0IHJlZiA9IHJlZiBbXVxubGV0IHNjb3BlX3RyYWNlX2VuYWJsZSAoKSA9IF9zY29wZV90cmFjZSA6PSB0cnVlOyBfc2NvcGVfbG9nIDo9IFtdXG5sZXQgc2NvcGVfdHJhY2VfZGlzYWJsZSAoKSA9IF9zY29wZV90cmFjZSA6PSBmYWxzZVxubGV0IHNjb3BlX3RyYWNlX2RyYWluICgpID1cbiAgbGV0IGxvZyA9IExpc3QucmV2ICFfc2NvcGVfbG9nIGluXG4gIF9zY29wZV9sb2cgOj0gW107XG4gIGxvZ1xuXG4oKiogUmVxdWVzdCBjb29raWVzIOKAlCBzZXQgYnkgdGhlIFB5dGhvbiBicmlkZ2UgYmVmb3JlIGVhY2ggcmVuZGVyLlxuICAgIGdldC1jb29raWUgcmVhZHMgZnJvbSBoZXJlOyBzZXQtY29va2llIGlzIGEgbm8tb3Agb24gdGhlIHNlcnZlci4gKilcbmxldCByZXF1ZXN0X2Nvb2tpZXMgOiAoc3RyaW5nLCBzdHJpbmcpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDhcblxuKCoqIENsZWFyIGFsbCBzY29wZSBzdGFja3MuIENhbGxlZCBiZXR3ZWVuIHJlcXVlc3RzIGlmIG5lZWRlZC4gKilcbmxldCBjbGVhcl9hbGwgKCkgPSBIYXNodGJsLmNsZWFyIHNjb3BlX3N0YWNrc1xuXG5sZXQgKCkgPVxuICBsZXQgcmVnaXN0ZXIgPSBTeF9wcmltaXRpdmVzLnJlZ2lzdGVyIGluXG5cbiAgKCogLS0tIENvb2tpZXMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJnZXQtY29va2llXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCByZXF1ZXN0X2Nvb2tpZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIHYgLT4gU3RyaW5nIHZcbiAgICAgICB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2V0LWNvb2tpZVwiIChmdW4gX2FyZ3MgLT4gTmlsKTtcblxuICAoKiAtLS0gQ29yZSBzY29wZSBzdGFjayBvcGVyYXRpb25zIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIlBVU0ggJXMgZGVwdGg9JWQtPiVkXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChMaXN0Lmxlbmd0aCBzdGFjayArIDEpIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lICh2YWx1ZSA6OiBzdGFjayk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQT1AgJXMgZGVwdGg9JWQtPiVkXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChtYXggMCAoTGlzdC5sZW5ndGggc3RhY2sgLSAxKSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBfIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIHJlc3QgfCBbXSAtPiAoKSk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcGVla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQRUVLICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCB2IDo6IF8gLT4gdiB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQ29udGV4dCAoc2NvcGUgbG9va3VwIHdpdGggb3B0aW9uYWwgZGVmYXVsdCkgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCAoU3RyaW5nIG5hbWUpIDo6IHJlc3QgLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiQ1RYICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgdiA6OiBfIC0+IHZcbiAgICAgICB8IFtdIC0+IChtYXRjaCByZXN0IHdpdGggZGVmYXVsdF92YWwgOjogXyAtPiBkZWZhdWx0X3ZhbCB8IFtdIC0+IE5pbCkpXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0LWRlYnVnXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBsZXQgYWxsX2tleXMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBzY29wZV9zdGFja3MgW10gaW5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJuYW1lPSVzIHN0YWNrX2xlbj0lZCBhbGxfa2V5cz1bJXNdXCJcbiAgICAgICAgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChTdHJpbmcuY29uY2F0IFwiLFwiIGFsbF9rZXlzKSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiYmFkIGFyZ3NcIik7XG5cbiAgKCogLS0tIENvbGxlY3QgLyBjb2xsZWN0ZWQgLyBjbGVhci1jb2xsZWN0ZWQhIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgTGlzdCBpdGVtcyA6OiByZXN0IC0+XG4gICAgICAgICBpZiBub3QgKExpc3QubWVtIHZhbHVlIGl0ZW1zKSB0aGVuXG4gICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSAoTGlzdCAoaXRlbXMgQCBbdmFsdWVdKSA6OiByZXN0KVxuICAgICAgIHwgW10gLT5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJjbGVhci1jb2xsZWN0ZWQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgXyA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbXSA6OiByZXN0KVxuICAgICAgIHwgW10gLT4gSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIFtMaXN0IFtdXSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gRW1pdCAvIGVtaXR0ZWQgKGZvciBzcHJlYWQgYXR0cnMgaW4gYWRhcHRlci1odG1sLnN4KSAtLS0gKilcblxuICByZWdpc3RlciBcInNjb3BlLWVtaXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IExpc3QgaXRlbXMgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBOaWwgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIChMaXN0IFt2YWx1ZV0gOjogcmVzdClcbiAgICAgICB8IFtdIC0+XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2Ugc2NvcGVfc3RhY2tzIG5hbWUgW0xpc3QgW3ZhbHVlXV1cbiAgICAgICB8IF8gOjogXyAtPiAoKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcImVtaXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogQWxpYXMgZm9yIHNjb3BlLWVtaXQhICopXG4gICAgbWF0Y2ggU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIFwic2NvcGUtZW1pdCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJlbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIFwiZW1pdHRlZFwiIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJncyB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1jb2xsZWN0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgXCJjb2xsZWN0ZWRcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBcImNsZWFyLWNvbGxlY3RlZCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFByb3ZpZGUgYWxpYXNlcyAtLS0gKilcblxuICByZWdpc3RlciBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgXCJzY29wZS1wdXNoIVwiIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJncyB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBcInNjb3BlLXBvcCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwzIiwiYTEiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX1ByaW50ZiIsInNjb3BlX3N0YWNrcyIsInNjb3BlX3RyYWNlIiwic2NvcGVfbG9nIiwic2NvcGVfdHJhY2VfZW5hYmxlIiwicGFyYW0iLCJzY29wZV90cmFjZV9kaXNhYmxlIiwic2NvcGVfdHJhY2VfZHJhaW4iLCJsb2ciLCJyZXF1ZXN0X2Nvb2tpZXMiLCJjbGVhcl9hbGwiLCJyZWdpc3RlciIsImFyZ3MiLCJuYW1lIiwibWF0Y2giLCJ2IiwiY3N0X2RlcHRoIiwiY3N0IiwiY3N0X3Njb3BlX3B1c2giLCJ2YWx1ZSIsInN0YWNrIiwiZXhuIiwiY3N0X3Njb3BlX3BvcCIsInJlc3QiLCJjc3RfZm91bmQiLCJkZWZhdWx0X3ZhbCIsImFsbF9rZXlzIiwiayIsImFjYyIsIml0ZW1zIiwiY3N0X2NvbGxlY3RlZCIsImNzdF9jbGVhcl9jb2xsZWN0ZWQiLCJjc3Rfc2NvcGVfZW1pdCIsImZuIiwiY3N0X2VtaXR0ZWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVDWW9EO0FBQUEsSUFBQUMsY0FBZ0I7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsbUJBQUFDO0FBQUFBLElBS3hDO0FBQUEsSUFBc0I7QUFBQTtBQUFBLEdBQWdCO0FBQUEsWUFBQUMsb0JBQUFELE9BQ3JDLDZCQUFxQjtBQUFBLFlBQUFFLGtCQUFBRjtBQUFBQSxRQUFBRyxNQUV0QztBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsR0FBRztBQUFBLE9BQUFDLGtCQUk4QztBQUFBLFlBQUFDLFVBQUFMO0FBQUFBLElBR2hDLGlEQUEwQjtBQUFBO0FBQUEs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bGluZSI6Mzc3MjcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlbmRlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBIVE1MIHJlbmRlcmVyIGZvciBTWCB2YWx1ZXMuXG5cbiAgICBFeHRyYWN0ZWQgZnJvbSBydW5fdGVzdHMubWwg4oCUIHJlbmRlcnMgYW4gU1ggZXhwcmVzc2lvbiB0cmVlIHRvIGFuXG4gICAgSFRNTCBzdHJpbmcsIGV4cGFuZGluZyBjb21wb25lbnRzIGFuZCBtYWNyb3MgYWxvbmcgdGhlIHdheS5cblxuICAgIERlcGVuZHMgb24gW1N4X3JlZi5ldmFsX2V4cHJdIGZvciBldmFsdWF0aW5nIHN1Yi1leHByZXNzaW9uc1xuICAgIGR1cmluZyByZW5kZXJpbmcgKGtleXdvcmQgYXJnIHZhbHVlcywgY29uZGl0aW9uYWxzLCBldGMuKS4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBUYWcgLyBhdHRyaWJ1dGUgcmVnaXN0cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgaHRtbF90YWdzID0gW1xuICBcImh0bWxcIjsgXCJoZWFkXCI7IFwiYm9keVwiOyBcInRpdGxlXCI7IFwibWV0YVwiOyBcImxpbmtcIjsgXCJzY3JpcHRcIjsgXCJzdHlsZVwiOyBcIm5vc2NyaXB0XCI7XG4gIFwiaGVhZGVyXCI7IFwibmF2XCI7IFwibWFpblwiOyBcInNlY3Rpb25cIjsgXCJhcnRpY2xlXCI7IFwiYXNpZGVcIjsgXCJmb290ZXJcIjtcbiAgXCJoMVwiOyBcImgyXCI7IFwiaDNcIjsgXCJoNFwiOyBcImg1XCI7IFwiaDZcIjsgXCJoZ3JvdXBcIjtcbiAgXCJkaXZcIjsgXCJwXCI7IFwiYmxvY2txdW90ZVwiOyBcInByZVwiOyBcImZpZ3VyZVwiOyBcImZpZ2NhcHRpb25cIjsgXCJhZGRyZXNzXCI7IFwiaHJcIjtcbiAgXCJ1bFwiOyBcIm9sXCI7IFwibGlcIjsgXCJkbFwiOyBcImR0XCI7IFwiZGRcIjsgXCJtZW51XCI7XG4gIFwiYVwiOyBcInNwYW5cIjsgXCJlbVwiOyBcInN0cm9uZ1wiOyBcInNtYWxsXCI7IFwiYlwiOyBcImlcIjsgXCJ1XCI7IFwic1wiOyBcInN1YlwiOyBcInN1cFwiO1xuICBcIm1hcmtcIjsgXCJkZWxcIjsgXCJpbnNcIjsgXCJxXCI7IFwiY2l0ZVwiOyBcImRmblwiOyBcImFiYnJcIjsgXCJjb2RlXCI7IFwidmFyXCI7IFwic2FtcFwiO1xuICBcImtiZFwiOyBcImRhdGFcIjsgXCJ0aW1lXCI7IFwicnVieVwiOyBcInJ0XCI7IFwicnBcIjsgXCJiZGlcIjsgXCJiZG9cIjsgXCJ3YnJcIjsgXCJiclwiO1xuICBcInRhYmxlXCI7IFwidGhlYWRcIjsgXCJ0Ym9keVwiOyBcInRmb290XCI7IFwidHJcIjsgXCJ0aFwiOyBcInRkXCI7IFwiY2FwdGlvblwiOyBcImNvbGdyb3VwXCI7IFwiY29sXCI7XG4gIFwiZm9ybVwiOyBcImlucHV0XCI7IFwidGV4dGFyZWFcIjsgXCJzZWxlY3RcIjsgXCJvcHRpb25cIjsgXCJvcHRncm91cFwiOyBcImJ1dHRvblwiOyBcImxhYmVsXCI7XG4gIFwiZmllbGRzZXRcIjsgXCJsZWdlbmRcIjsgXCJkYXRhbGlzdFwiOyBcIm91dHB1dFwiOyBcInByb2dyZXNzXCI7IFwibWV0ZXJcIjtcbiAgXCJkZXRhaWxzXCI7IFwic3VtbWFyeVwiOyBcImRpYWxvZ1wiO1xuICBcImltZ1wiOyBcInZpZGVvXCI7IFwiYXVkaW9cIjsgXCJzb3VyY2VcIjsgXCJwaWN0dXJlXCI7IFwiY2FudmFzXCI7IFwiaWZyYW1lXCI7IFwiZW1iZWRcIjsgXCJvYmplY3RcIjsgXCJwYXJhbVwiO1xuICBcInN2Z1wiOyBcInBhdGhcIjsgXCJjaXJjbGVcIjsgXCJyZWN0XCI7IFwibGluZVwiOyBcInBvbHlsaW5lXCI7IFwicG9seWdvblwiOyBcImVsbGlwc2VcIjtcbiAgXCJnXCI7IFwiZGVmc1wiOyBcInVzZVwiOyBcInRleHRcIjsgXCJ0c3BhblwiOyBcImNsaXBQYXRoXCI7IFwibWFza1wiOyBcInBhdHRlcm5cIjtcbiAgXCJsaW5lYXJHcmFkaWVudFwiOyBcInJhZGlhbEdyYWRpZW50XCI7IFwic3RvcFwiOyBcImZpbHRlclwiOyBcImZlQmxlbmRcIjsgXCJmZUZsb29kXCI7XG4gIFwiZmVHYXVzc2lhbkJsdXJcIjsgXCJmZU9mZnNldFwiOyBcImZlTWVyZ2VcIjsgXCJmZU1lcmdlTm9kZVwiOyBcImZlQ29tcG9zaXRlXCI7XG4gIFwidGVtcGxhdGVcIjsgXCJzbG90XCI7XG5dXG5cbmxldCB2b2lkX2VsZW1lbnRzID0gW1xuICBcImFyZWFcIjsgXCJiYXNlXCI7IFwiYnJcIjsgXCJjb2xcIjsgXCJlbWJlZFwiOyBcImhyXCI7IFwiaW1nXCI7IFwiaW5wdXRcIjtcbiAgXCJsaW5rXCI7IFwibWV0YVwiOyBcInBhcmFtXCI7IFwic291cmNlXCI7IFwidHJhY2tcIjsgXCJ3YnJcIlxuXVxuXG5sZXQgYm9vbGVhbl9hdHRycyA9IFtcbiAgXCJhc3luY1wiOyBcImF1dG9mb2N1c1wiOyBcImF1dG9wbGF5XCI7IFwiY2hlY2tlZFwiOyBcImNvbnRyb2xzXCI7IFwiZGVmYXVsdFwiO1xuICBcImRlZmVyXCI7IFwiZGlzYWJsZWRcIjsgXCJmb3Jtbm92YWxpZGF0ZVwiOyBcImhpZGRlblwiOyBcImluZXJ0XCI7IFwiaXNtYXBcIjtcbiAgXCJsb29wXCI7IFwibXVsdGlwbGVcIjsgXCJtdXRlZFwiOyBcIm5vbW9kdWxlXCI7IFwibm92YWxpZGF0ZVwiOyBcIm9wZW5cIjtcbiAgXCJwbGF5c2lubGluZVwiOyBcInJlYWRvbmx5XCI7IFwicmVxdWlyZWRcIjsgXCJyZXZlcnNlZFwiOyBcInNlbGVjdGVkXCJcbl1cblxubGV0IGlzX2h0bWxfdGFnIG5hbWUgPSBMaXN0Lm1lbSBuYW1lIGh0bWxfdGFnc1xubGV0IGlzX3ZvaWQgbmFtZSA9IExpc3QubWVtIG5hbWUgdm9pZF9lbGVtZW50c1xubGV0IGlzX2Jvb2xlYW5fYXR0ciBuYW1lID0gTGlzdC5tZW0gbmFtZSBib29sZWFuX2F0dHJzXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogSFRNTCBlc2NhcGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGVzY2FwZV9odG1sIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICB8ICcmJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImYW1wO1wiXG4gICAgfCAnPCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmx0O1wiXG4gICAgfCAnPicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmd0O1wiXG4gICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZxdW90O1wiXG4gICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEF0dHJpYnV0ZSByZW5kZXJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZW5kZXJfYXR0cnMgYXR0cnMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgZW5kXG4gICAgZW5kIGVsc2UgaWYgbm90IChpc19uaWwgdikgdGhlbiBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGVzY2FwZV9odG1sICh2YWx1ZV90b19zdHJpbmcgdikpO1xuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG4gICAgZW5kKSBhdHRycztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEhUTUwgcmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIEZvcndhcmQgcmVmIOKAlCByZXNvbHZlZCBhdCBzZXR1cCB0aW1lICopXG5sZXQgcmVuZGVyX3RvX2h0bWxfcmVmIDogKHZhbHVlIC0+IGVudiAtPiBzdHJpbmcpIHJlZiA9XG4gIHJlZiAoZnVuIF9leHByIF9lbnYgLT4gXCJcIilcblxubGV0IHJlbmRlcl90b19odG1sIGV4cHIgZW52ID0gIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuXG4oKiogUmVuZGVyIHZpYSB0aGUgU1ggYWRhcHRlciAocmVuZGVyLXRvLWh0bWwgZnJvbSBhZGFwdGVyLWh0bWwuc3gpLlxuICAgIEZhbGxzIGJhY2sgdG8gdGhlIG5hdGl2ZSByZWYgaWYgdGhlIFNYIGFkYXB0ZXIgaXNuJ3QgbG9hZGVkLiAqKVxubGV0IHN4X3JlbmRlcl90b19odG1sIHJlbmRlcl9lbnYgZXhwciBldmFsX2VudiA9XG4gIGlmIGVudl9oYXMgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgdGhlblxuICAgIGxldCBmbiA9IGVudl9nZXQgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmNla19jYWxsIGZuIChMaXN0IFtleHByOyBFbnYgZXZhbF9lbnZdKSBpblxuICAgIG1hdGNoIHJlc3VsdCB3aXRoIFN0cmluZyBzIC0+IHMgfCBSYXdIVE1MIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgcmVzdWx0XG4gIGVsc2VcbiAgICByZW5kZXJfdG9faHRtbCBleHByIGV2YWxfZW52XG5cbmxldCByZW5kZXJfY2hpbGRyZW4gY2hpbGRyZW4gZW52ID1cbiAgU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCAoZnVuIGMgLT4gcmVuZGVyX3RvX2h0bWwgYyBlbnYpIGNoaWxkcmVuKVxuXG4oKiogUGFyc2Uga2V5d29yZCBhdHRycyBhbmQgcG9zaXRpb25hbCBjaGlsZHJlbiBmcm9tIGFuIGVsZW1lbnQgY2FsbCdzIGFyZ3MuXG4gICAgQXR0cnMgYXJlIGV2YWx1YXRlZDsgY2hpbGRyZW4gYXJlIHJldHVybmVkIFVORVZBTFVBVEVEIGZvciByZW5kZXIgZGlzcGF0Y2guICopXG5sZXQgcGFyc2VfZWxlbWVudF9hcmdzIGFyZ3MgZW52ID1cbiAgbGV0IGF0dHJzID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICBsZXQgY2hpbGRyZW4gPSByZWYgW10gaW5cbiAgbGV0IHNraXAgPSByZWYgZmFsc2UgaW5cbiAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgTGlzdC5pdGVyaSAoZnVuIGlkeCBhcmcgLT5cbiAgICBpZiAhc2tpcCB0aGVuIHNraXAgOj0gZmFsc2VcbiAgICBlbHNlIG1hdGNoIGFyZyB3aXRoXG4gICAgfCBLZXl3b3JkIGsgd2hlbiBpZHggKyAxIDwgbGVuIC0+XG4gICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QubnRoIGFyZ3MgKGlkeCArIDEpKSAoRW52IGVudikgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBhdHRycyBrIHY7XG4gICAgICBza2lwIDo9IHRydWVcbiAgICB8IFNwcmVhZCBwYWlycyAtPlxuICAgICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwucmVwbGFjZSBhdHRycyBrIHYpIHBhaXJzXG4gICAgfCBfIC0+XG4gICAgICBjaGlsZHJlbiA6PSBhcmcgOjogIWNoaWxkcmVuXG4gICkgYXJncztcbiAgKGF0dHJzLCBMaXN0LnJldiAhY2hpbGRyZW4pXG5cbmxldCByZW5kZXJfaHRtbF9lbGVtZW50IHRhZyBhcmdzIGVudiA9XG4gIGxldCAoYXR0cnMsIGNoaWxkcmVuKSA9IHBhcnNlX2VsZW1lbnRfYXJncyBhcmdzIGVudiBpblxuICBsZXQgYXR0cl9zdHIgPSByZW5kZXJfYXR0cnMgYXR0cnMgaW5cbiAgaWYgaXNfdm9pZCB0YWcgdGhlblxuICAgIFwiPFwiIF4gdGFnIF4gYXR0cl9zdHIgXiBcIiAvPlwiXG4gIGVsc2VcbiAgICBsZXQgY29udGVudCA9IFN0cmluZy5jb25jYXQgXCJcIlxuICAgICAgKExpc3QubWFwIChmdW4gYyAtPiByZW5kZXJfdG9faHRtbCBjIGVudikgY2hpbGRyZW4pIGluXG4gICAgXCI8XCIgXiB0YWcgXiBhdHRyX3N0ciBeIFwiPlwiIF4gY29udGVudCBeIFwiPC9cIiBeIHRhZyBeIFwiPlwiXG5cbmxldCByZW5kZXJfY29tcG9uZW50IGNvbXAgYXJncyBlbnYgPVxuICBtYXRjaCBjb21wIHdpdGhcbiAgfCBDb21wb25lbnQgYyAtPlxuICAgIGxldCBrd2FyZ3MgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgbGV0IGNoaWxkcmVuX2V4cHJzID0gcmVmIFtdIGluXG4gICAgbGV0IHNraXAgPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpZHggYXJnIC0+XG4gICAgICBpZiAhc2tpcCB0aGVuIHNraXAgOj0gZmFsc2VcbiAgICAgIGVsc2UgbWF0Y2ggYXJnIHdpdGhcbiAgICAgIHwgS2V5d29yZCBrIHdoZW4gaWR4ICsgMSA8IGxlbiAtPlxuICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QubnRoIGFyZ3MgKGlkeCArIDEpKSAoRW52IGVudikgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGt3YXJncyBrIHY7XG4gICAgICAgIHNraXAgOj0gdHJ1ZVxuICAgICAgfCBfIC0+XG4gICAgICAgIGNoaWxkcmVuX2V4cHJzIDo9IGFyZyA6OiAhY2hpbGRyZW5fZXhwcnNcbiAgICApIGFyZ3M7XG4gICAgbGV0IGNoaWxkcmVuID0gTGlzdC5yZXYgIWNoaWxkcmVuX2V4cHJzIGluXG4gICAgbGV0IGxvY2FsID0gZW52X21lcmdlIGMuY19jbG9zdXJlIGVudiBpblxuICAgIExpc3QuaXRlciAoZnVuIHAgLT5cbiAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBrd2FyZ3MgcCB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCB2KVxuICAgICkgYy5jX3BhcmFtcztcbiAgICBpZiBjLmNfaGFzX2NoaWxkcmVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCByZW5kZXJlZF9jaGlsZHJlbiA9IFN0cmluZy5jb25jYXQgXCJcIlxuICAgICAgICAoTGlzdC5tYXAgKGZ1biBjIC0+IHJlbmRlcl90b19odG1sIGMgZW52KSBjaGlsZHJlbikgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgXCJjaGlsZHJlblwiIChSYXdIVE1MIHJlbmRlcmVkX2NoaWxkcmVuKSlcbiAgICBlbmQ7XG4gICAgcmVuZGVyX3RvX2h0bWwgYy5jX2JvZHkgbG9jYWxcbiAgfCBfIC0+IFwiXCJcblxubGV0IGV4cGFuZF9tYWNybyAobSA6IG1hY3JvKSBhcmdzIF9lbnYgPVxuICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIG0ubV9jbG9zdXJlIGluXG4gIGxldCBwYXJhbXMgPSBtLm1fcGFyYW1zIGluXG4gIGxldCByZWMgYmluZF9wYXJhbXMgcHMgYXMnID1cbiAgICBtYXRjaCBwcywgYXMnIHdpdGhcbiAgICB8IFtdLCByZXN0IC0+XG4gICAgICAobWF0Y2ggbS5tX3Jlc3RfcGFyYW0gd2l0aFxuICAgICAgIHwgU29tZSBycCAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHJwIChMaXN0IHJlc3QpKVxuICAgICAgIHwgTm9uZSAtPiAoKSlcbiAgICB8IHAgOjogcHNfcmVzdCwgYSA6OiBhc19yZXN0IC0+XG4gICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSk7XG4gICAgICBiaW5kX3BhcmFtcyBwc19yZXN0IGFzX3Jlc3RcbiAgICB8IF8gOjogXywgW10gLT5cbiAgICAgIExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIE5pbCkpIChMaXN0LnJldiBwcylcbiAgaW5cbiAgYmluZF9wYXJhbXMgcGFyYW1zIGFyZ3M7XG4gIFN4X3JlZi5ldmFsX2V4cHIgbS5tX2JvZHkgKEVudiBsb2NhbClcblxubGV0IHJlYyBkb19yZW5kZXJfdG9faHRtbCAoZXhwciA6IHZhbHVlKSAoZW52IDogZW52KSA6IHN0cmluZyA9XG4gIG1hdGNoIGV4cHIgd2l0aFxuICB8IE5pbCAtPiBcIlwiXG4gIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBTdHJpbmcgcyAtPiBlc2NhcGVfaHRtbCBzXG4gIHwgS2V5d29yZCBrIC0+IGVzY2FwZV9odG1sIGtcbiAgfCBSYXdIVE1MIHMgLT4gc1xuICB8IFN5bWJvbCBzIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChTeW1ib2wgcykgKEVudiBlbnYpIGluXG4gICAgZG9fcmVuZGVyX3RvX2h0bWwgdiBlbnZcbiAgfCBMaXN0IFtdIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfSAtPiBcIlwiXG4gIHwgTGlzdCAoaGVhZCA6OiBhcmdzKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGhlYWQgOjogYXJncyB9IC0+XG4gICAgcmVuZGVyX2xpc3RfdG9faHRtbCBoZWFkIGFyZ3MgZW52XG4gIHwgXyAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZW52KSBpblxuICAgIGRvX3JlbmRlcl90b19odG1sIHYgZW52XG5cbmFuZCByZW5kZXJfbGlzdF90b19odG1sIGhlYWQgYXJncyBlbnYgPVxuICBtYXRjaCBoZWFkIHdpdGhcbiAgfCBTeW1ib2wgXCI8PlwiIC0+XG4gICAgcmVuZGVyX2NoaWxkcmVuIGFyZ3MgZW52XG4gIHwgU3ltYm9sIFwicmF3IVwiIC0+XG4gICAgKCogSW5qZWN0IHByZS1yZW5kZXJlZCBIVE1MIHdpdGhvdXQgZXNjYXBpbmcgKilcbiAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QuaGQgYXJncykgKEVudiBlbnYpIGluXG4gICAgKG1hdGNoIHYgd2l0aFxuICAgICB8IFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHNcbiAgICAgfCBfIC0+IHZhbHVlX3RvX3N0cmluZyB2KVxuICB8IFN5bWJvbCB0YWcgd2hlbiBpc19odG1sX3RhZyB0YWcgLT5cbiAgICByZW5kZXJfaHRtbF9lbGVtZW50IHRhZyBhcmdzIGVudlxuICB8IFN5bWJvbCBcImlmXCIgLT5cbiAgICBsZXQgY29uZF92YWwgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0LmhkIGFyZ3MpIChFbnYgZW52KSBpblxuICAgIGlmIHN4X3RydXRoeSBjb25kX3ZhbCB0aGVuXG4gICAgICAoaWYgTGlzdC5sZW5ndGggYXJncyA+IDEgdGhlbiBkb19yZW5kZXJfdG9faHRtbCAoTGlzdC5udGggYXJncyAxKSBlbnYgZWxzZSBcIlwiKVxuICAgIGVsc2VcbiAgICAgIChpZiBMaXN0Lmxlbmd0aCBhcmdzID4gMiB0aGVuIGRvX3JlbmRlcl90b19odG1sIChMaXN0Lm50aCBhcmdzIDIpIGVudiBlbHNlIFwiXCIpXG4gIHwgU3ltYm9sIFwid2hlblwiIC0+XG4gICAgbGV0IGNvbmRfdmFsID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdC5oZCBhcmdzKSAoRW52IGVudikgaW5cbiAgICBpZiBzeF90cnV0aHkgY29uZF92YWwgdGhlblxuICAgICAgU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCAoZnVuIGUgLT4gZG9fcmVuZGVyX3RvX2h0bWwgZSBlbnYpIChMaXN0LnRsIGFyZ3MpKVxuICAgIGVsc2UgXCJcIlxuICB8IFN5bWJvbCBcImNvbmRcIiAtPlxuICAgIHJlbmRlcl9jb25kIGFyZ3MgZW52XG4gIHwgU3ltYm9sIFwiY2FzZVwiIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IChoZWFkIDo6IGFyZ3MpKSAoRW52IGVudikgaW5cbiAgICBkb19yZW5kZXJfdG9faHRtbCB2IGVudlxuICB8IFN5bWJvbCAoXCJsZXRcIiB8IFwibGV0KlwiKSAtPlxuICAgIHJlbmRlcl9sZXQgYXJncyBlbnZcbiAgfCBTeW1ib2wgKFwiYmVnaW5cIiB8IFwiZG9cIikgLT5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gXCJcIlxuICAgICAgfCBbbGFzdF0gLT4gZG9fcmVuZGVyX3RvX2h0bWwgbGFzdCBlbnZcbiAgICAgIHwgZSA6OiByZXN0IC0+XG4gICAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciBlIChFbnYgZW52KSk7XG4gICAgICAgIGdvIHJlc3RcbiAgICBpbiBnbyBhcmdzXG4gIHwgU3ltYm9sIChcImRlZmluZVwiIHwgXCJkZWZjb21wXCIgfCBcImRlZm1hY3JvXCIgfCBcImRlZmlzbGFuZFwiKSAtPlxuICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpKTtcbiAgICBcIlwiXG4gIHwgU3ltYm9sIFwibWFwXCIgLT5cbiAgICByZW5kZXJfbWFwIGFyZ3MgZW52IGZhbHNlXG4gIHwgU3ltYm9sIFwibWFwLWluZGV4ZWRcIiAtPlxuICAgIHJlbmRlcl9tYXAgYXJncyBlbnYgdHJ1ZVxuICB8IFN5bWJvbCBcImZpbHRlclwiIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IChoZWFkIDo6IGFyZ3MpKSAoRW52IGVudikgaW5cbiAgICBkb19yZW5kZXJfdG9faHRtbCB2IGVudlxuICB8IFN5bWJvbCBcImZvci1lYWNoXCIgLT5cbiAgICByZW5kZXJfZm9yX2VhY2ggYXJncyBlbnZcbiAgfCBTeW1ib2wgbmFtZSAtPlxuICAgICh0cnlcbiAgICAgIGxldCB2ID0gZW52X2dldCBlbnYgbmFtZSBpblxuICAgICAgKG1hdGNoIHYgd2l0aFxuICAgICAgIHwgQ29tcG9uZW50IGMgd2hlbiBjLmNfYWZmaW5pdHkgPSBcImNsaWVudFwiIC0+IFwiXCIgICgqIHNraXAgY2xpZW50LW9ubHkgKilcbiAgICAgICB8IENvbXBvbmVudCBfIC0+IHJlbmRlcl9jb21wb25lbnQgdiBhcmdzIGVudlxuICAgICAgIHwgSXNsYW5kIF9pIC0+XG4gICAgICAgICBsZXQgY2FsbF9zeCA9IFwiKFwiIF4gU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgICAgICB8IFN5bWJvbCBzIC0+IHMgfCBLZXl3b3JkIGsgLT4gXCI6XCIgXiBrIHwgU3RyaW5nIHMgLT4gXCJcXFwiXCIgXiBzIF4gXCJcXFwiXCJcbiAgICAgICAgICAgfCBfIC0+IFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIHZcbiAgICAgICAgICkgKFN5bWJvbCBuYW1lIDo6IGFyZ3MpKSBeIFwiKVwiIGluXG4gICAgICAgICBQcmludGYuc3ByaW50ZiBcIjxzcGFuIGRhdGEtc3gtaXNsYW5kPVxcXCIlc1xcXCI+JXM8L3NwYW4+XCIgX2kuaV9uYW1lIGNhbGxfc3hcbiAgICAgICB8IE1hY3JvIG0gLT5cbiAgICAgICAgIGxldCBleHBhbmRlZCA9IGV4cGFuZF9tYWNybyBtIGFyZ3MgZW52IGluXG4gICAgICAgICBkb19yZW5kZXJfdG9faHRtbCBleHBhbmRlZCBlbnZcbiAgICAgICB8IF8gLT5cbiAgICAgICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IChoZWFkIDo6IGFyZ3MpKSAoRW52IGVudikgaW5cbiAgICAgICAgIGRvX3JlbmRlcl90b19odG1sIHJlc3VsdCBlbnYpXG4gICAgd2l0aCBFdmFsX2Vycm9yIF8gLT4gXCJcIilcbiAgfCBfIC0+XG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgIGRvX3JlbmRlcl90b19odG1sIHJlc3VsdCBlbnZcblxuYW5kIHJlbmRlcl9jb25kIGFyZ3MgZW52ID1cbiAgbGV0IGFzX2xpc3QgPSBmdW5jdGlvbiBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gU29tZSBsIHwgXyAtPiBOb25lIGluXG4gIGxldCBpc19zY2hlbWUgPSBMaXN0LmZvcl9hbGwgKGZ1biBhIC0+IG1hdGNoIGFzX2xpc3QgYSB3aXRoXG4gICAgfCBTb21lIGl0ZW1zIHdoZW4gTGlzdC5sZW5ndGggaXRlbXMgPSAyIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2UpIGFyZ3NcbiAgaW5cbiAgaWYgaXNfc2NoZW1lIHRoZW4gYmVnaW5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gXCJcIlxuICAgICAgfCBjbGF1c2UgOjogcmVzdCAtPlxuICAgICAgICAobWF0Y2ggYXNfbGlzdCBjbGF1c2Ugd2l0aFxuICAgICAgICAgfCBTb21lIFt0ZXN0OyBib2R5XSAtPlxuICAgICAgICAgICBsZXQgaXNfZWxzZSA9IG1hdGNoIHRlc3Qgd2l0aFxuICAgICAgICAgICAgIHwgS2V5d29yZCBcImVsc2VcIiAtPiB0cnVlXG4gICAgICAgICAgICAgfCBTeW1ib2wgXCJlbHNlXCIgfCBTeW1ib2wgXCI6ZWxzZVwiIC0+IHRydWVcbiAgICAgICAgICAgICB8IF8gLT4gZmFsc2VcbiAgICAgICAgICAgaW5cbiAgICAgICAgICAgaWYgaXNfZWxzZSB0aGVuIGRvX3JlbmRlcl90b19odG1sIGJvZHkgZW52XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgdGVzdCAoRW52IGVudikgaW5cbiAgICAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGRvX3JlbmRlcl90b19odG1sIGJvZHkgZW52XG4gICAgICAgICAgICAgZWxzZSBnbyByZXN0XG4gICAgICAgICB8IF8gLT4gXCJcIilcbiAgICBpbiBnbyBhcmdzXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IFwiXCJcbiAgICAgIHwgW19dIC0+IFwiXCJcbiAgICAgIHwgdGVzdCA6OiBib2R5IDo6IHJlc3QgLT5cbiAgICAgICAgbGV0IGlzX2Vsc2UgPSBtYXRjaCB0ZXN0IHdpdGhcbiAgICAgICAgICB8IEtleXdvcmQgXCJlbHNlXCIgLT4gdHJ1ZVxuICAgICAgICAgIHwgU3ltYm9sIFwiZWxzZVwiIHwgU3ltYm9sIFwiOmVsc2VcIiAtPiB0cnVlXG4gICAgICAgICAgfCBfIC0+IGZhbHNlXG4gICAgICAgIGluXG4gICAgICAgIGlmIGlzX2Vsc2UgdGhlbiBkb19yZW5kZXJfdG9faHRtbCBib2R5IGVudlxuICAgICAgICBlbHNlXG4gICAgICAgICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIHRlc3QgKEVudiBlbnYpIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBkb19yZW5kZXJfdG9faHRtbCBib2R5IGVudlxuICAgICAgICAgIGVsc2UgZ28gcmVzdFxuICAgIGluIGdvIGFyZ3NcbiAgZW5kXG5cbmFuZCByZW5kZXJfbGV0IGFyZ3MgZW52ID1cbiAgbGV0IGFzX2xpc3QgPSBmdW5jdGlvbiBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gU29tZSBsIHwgXyAtPiBOb25lIGluXG4gIGxldCBiaW5kaW5nc19leHByID0gTGlzdC5oZCBhcmdzIGluXG4gIGxldCBib2R5ID0gTGlzdC50bCBhcmdzIGluXG4gIGxldCBsb2NhbCA9IGVudl9leHRlbmQgZW52IGluXG4gIGxldCBiaW5kaW5ncyA9IG1hdGNoIGFzX2xpc3QgYmluZGluZ3NfZXhwciB3aXRoIFNvbWUgbCAtPiBsIHwgTm9uZSAtPiBbXSBpblxuICBsZXQgaXNfc2NoZW1lID0gbWF0Y2ggYmluZGluZ3Mgd2l0aFxuICAgIHwgKExpc3QgXyA6OiBfKSB8IChMaXN0UmVmIF8gOjogXykgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBpZiBpc19zY2hlbWUgdGhlblxuICAgIExpc3QuaXRlciAoZnVuIGIgLT5cbiAgICAgIG1hdGNoIGFzX2xpc3QgYiB3aXRoXG4gICAgICB8IFNvbWUgW1N5bWJvbCBuYW1lOyBleHByXSB8IFNvbWUgW1N0cmluZyBuYW1lOyBleHByXSAtPlxuICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGxvY2FsKSBpblxuICAgICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIG5hbWUgdilcbiAgICAgIHwgXyAtPiAoKVxuICAgICkgYmluZGluZ3NcbiAgZWxzZSBiZWdpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiAoKVxuICAgICAgfCAoU3ltYm9sIG5hbWUpIDo6IGV4cHIgOjogcmVzdCB8IChTdHJpbmcgbmFtZSkgOjogZXhwciA6OiByZXN0IC0+XG4gICAgICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgbG9jYWwpIGluXG4gICAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgbmFtZSB2KTtcbiAgICAgICAgZ28gcmVzdFxuICAgICAgfCBfIC0+ICgpXG4gICAgaW4gZ28gYmluZGluZ3NcbiAgZW5kO1xuICBsZXQgcmVjIHJlbmRlcl9ib2R5ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IFwiXCJcbiAgICB8IFtsYXN0XSAtPiBkb19yZW5kZXJfdG9faHRtbCBsYXN0IGxvY2FsXG4gICAgfCBlIDo6IHJlc3QgLT5cbiAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciBlIChFbnYgbG9jYWwpKTtcbiAgICAgIHJlbmRlcl9ib2R5IHJlc3RcbiAgaW4gcmVuZGVyX2JvZHkgYm9keVxuXG5hbmQgcmVuZGVyX21hcCBhcmdzIGVudiBpbmRleGVkID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwaSAoZnVuIGkgaXRlbSAtPlxuICAgIGxldCBjYWxsX2FyZ3MgPSBpZiBpbmRleGVkIHRoZW4gW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyBpdGVtXSBlbHNlIFtpdGVtXSBpblxuICAgIG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPlxuICAgICAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCBsLmxfY2xvc3VyZSBpblxuICAgICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSkpXG4gICAgICAgIGwubF9wYXJhbXMgY2FsbF9hcmdzO1xuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgbC5sX2JvZHkgbG9jYWxcbiAgICB8IF8gLT5cbiAgICAgIGxldCByZXN1bHQgPSBTeF9ydW50aW1lLnN4X2NhbGwgZm5fdmFsIGNhbGxfYXJncyBpblxuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgcmVzdWx0IGVudlxuICApIGl0ZW1zKVxuXG5hbmQgcmVuZGVyX2Zvcl9lYWNoIGFyZ3MgZW52ID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gaXRlbSAtPlxuICAgIG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPlxuICAgICAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCBsLmxfY2xvc3VyZSBpblxuICAgICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSkpXG4gICAgICAgIGwubF9wYXJhbXMgW2l0ZW1dO1xuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgbC5sX2JvZHkgbG9jYWxcbiAgICB8IF8gLT5cbiAgICAgIGxldCByZXN1bHQgPSBTeF9ydW50aW1lLnN4X2NhbGwgZm5fdmFsIFtpdGVtXSBpblxuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgcmVzdWx0IGVudlxuICApIGl0ZW1zKVxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEJ1ZmZlci1iYXNlZCBzdHJlYW1pbmcgcmVuZGVyZXIg4oCUIHplcm8gaW50ZXJtZWRpYXRlIHN0cmluZyBhbGxvY2F0aW9uICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIEVzY2FwZSBIVE1MIGRpcmVjdGx5IGludG8gYSBidWZmZXIuICopXG5sZXQgZXNjYXBlX2h0bWxfYnVmIGJ1ZiBzID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZhbXA7XCJcbiAgICB8ICc8JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImbHQ7XCJcbiAgICB8ICc+JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImZ3Q7XCJcbiAgICB8ICdcIicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJnF1b3Q7XCJcbiAgICB8IGMgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjXG4gIGRvbmVcblxuKCoqIFJlbmRlciBhdHRyaWJ1dGVzIGRpcmVjdGx5IGludG8gYSBidWZmZXIuICopXG5sZXQgcmVuZGVyX2F0dHJzX2J1ZiBidWYgYXR0cnMgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgZW5kXG4gICAgZW5kIGVsc2UgaWYgbm90IChpc19uaWwgdikgdGhlbiBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICBlc2NhcGVfaHRtbF9idWYgYnVmICh2YWx1ZV90b19zdHJpbmcgdik7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICBlbmQpIGF0dHJzXG5cbigqKiBCdWZmZXItYmFzZWQgcmVuZGVyX3RvX2h0bWwg4oCUIHdyaXRlcyBkaXJlY3RseSwgbm8gaW50ZXJtZWRpYXRlIHN0cmluZ3MuICopXG5sZXQgcmVjIHJlbmRlcl90b19idWYgYnVmIChleHByIDogdmFsdWUpIChlbnYgOiBlbnYpIDogdW5pdCA9XG4gIG1hdGNoIGV4cHIgd2l0aFxuICB8IE5pbCAtPiAoKVxuICB8IEJvb2wgdHJ1ZSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImZhbHNlXCJcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCAoaW50X29mX2Zsb2F0IG4pKVxuICAgIGVsc2UgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIiVnXCIgbilcbiAgfCBTdHJpbmcgcyAtPiBlc2NhcGVfaHRtbF9idWYgYnVmIHNcbiAgfCBLZXl3b3JkIGsgLT4gZXNjYXBlX2h0bWxfYnVmIGJ1ZiBrXG4gIHwgUmF3SFRNTCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgU3ltYm9sIHMgLT5cbiAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKFN5bWJvbCBzKSAoRW52IGVudikgaW5cbiAgICByZW5kZXJfdG9fYnVmIGJ1ZiB2IGVudlxuICB8IExpc3QgW10gfCBMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9IC0+ICgpXG4gIHwgTGlzdCAoaGVhZCA6OiBhcmdzKSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGhlYWQgOjogYXJncyB9IC0+XG4gICAgcmVuZGVyX2xpc3RfYnVmIGJ1ZiBoZWFkIGFyZ3MgZW52XG4gIHwgXyAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZW52KSBpblxuICAgIHJlbmRlcl90b19idWYgYnVmIHYgZW52XG5cbmFuZCByZW5kZXJfbGlzdF9idWYgYnVmIGhlYWQgYXJncyBlbnYgPVxuICBtYXRjaCBoZWFkIHdpdGhcbiAgfCBTeW1ib2wgXCI8PlwiIC0+XG4gICAgTGlzdC5pdGVyIChmdW4gYyAtPiByZW5kZXJfdG9fYnVmIGJ1ZiBjIGVudikgYXJnc1xuICB8IFN5bWJvbCBcInJhdyFcIiAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdC5oZCBhcmdzKSAoRW52IGVudikgaW5cbiAgICAobWF0Y2ggdiB3aXRoXG4gICAgIHwgU3RyaW5nIHMgfCBSYXdIVE1MIHMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgICAgfCBfIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAodmFsdWVfdG9fc3RyaW5nIHYpKVxuICB8IFN5bWJvbCB0YWcgd2hlbiBpc19odG1sX3RhZyB0YWcgLT5cbiAgICByZW5kZXJfZWxlbWVudF9idWYgYnVmIHRhZyBhcmdzIGVudlxuICB8IFN5bWJvbCBcImlmXCIgLT5cbiAgICBsZXQgY29uZF92YWwgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0LmhkIGFyZ3MpIChFbnYgZW52KSBpblxuICAgIGlmIHN4X3RydXRoeSBjb25kX3ZhbCB0aGVuXG4gICAgICAoaWYgTGlzdC5sZW5ndGggYXJncyA+IDEgdGhlbiByZW5kZXJfdG9fYnVmIGJ1ZiAoTGlzdC5udGggYXJncyAxKSBlbnYpXG4gICAgZWxzZVxuICAgICAgKGlmIExpc3QubGVuZ3RoIGFyZ3MgPiAyIHRoZW4gcmVuZGVyX3RvX2J1ZiBidWYgKExpc3QubnRoIGFyZ3MgMikgZW52KVxuICB8IFN5bWJvbCBcIndoZW5cIiAtPlxuICAgIGxldCBjb25kX3ZhbCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QuaGQgYXJncykgKEVudiBlbnYpIGluXG4gICAgaWYgc3hfdHJ1dGh5IGNvbmRfdmFsIHRoZW5cbiAgICAgIExpc3QuaXRlciAoZnVuIGUgLT4gcmVuZGVyX3RvX2J1ZiBidWYgZSBlbnYpIChMaXN0LnRsIGFyZ3MpXG4gIHwgU3ltYm9sIFwiY29uZFwiIC0+XG4gICAgcmVuZGVyX2NvbmRfYnVmIGJ1ZiBhcmdzIGVudlxuICB8IFN5bWJvbCBcImNhc2VcIiAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgcmVuZGVyX3RvX2J1ZiBidWYgdiBlbnZcbiAgfCBTeW1ib2wgKFwibGV0XCIgfCBcImxldCpcIikgLT5cbiAgICByZW5kZXJfbGV0X2J1ZiBidWYgYXJncyBlbnZcbiAgfCBTeW1ib2wgKFwiYmVnaW5cIiB8IFwiZG9cIikgLT5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gKClcbiAgICAgIHwgW2xhc3RdIC0+IHJlbmRlcl90b19idWYgYnVmIGxhc3QgZW52XG4gICAgICB8IGUgOjogcmVzdCAtPiBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgZSAoRW52IGVudikpOyBnbyByZXN0XG4gICAgaW4gZ28gYXJnc1xuICB8IFN5bWJvbCAoXCJkZWZpbmVcIiB8IFwiZGVmY29tcFwiIHwgXCJkZWZtYWNyb1wiIHwgXCJkZWZpc2xhbmRcIikgLT5cbiAgICBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSlcbiAgfCBTeW1ib2wgXCJtYXBcIiAtPiByZW5kZXJfbWFwX2J1ZiBidWYgYXJncyBlbnYgZmFsc2VcbiAgfCBTeW1ib2wgXCJtYXAtaW5kZXhlZFwiIC0+IHJlbmRlcl9tYXBfYnVmIGJ1ZiBhcmdzIGVudiB0cnVlXG4gIHwgU3ltYm9sIFwiZmlsdGVyXCIgLT5cbiAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgIHJlbmRlcl90b19idWYgYnVmIHYgZW52XG4gIHwgU3ltYm9sIFwiZm9yLWVhY2hcIiAtPiByZW5kZXJfZm9yX2VhY2hfYnVmIGJ1ZiBhcmdzIGVudlxuICB8IFN5bWJvbCBuYW1lIC0+XG4gICAgKHRyeVxuICAgICAgbGV0IHYgPSBlbnZfZ2V0IGVudiBuYW1lIGluXG4gICAgICAobWF0Y2ggdiB3aXRoXG4gICAgICAgfCBDb21wb25lbnQgYyB3aGVuIGMuY19hZmZpbml0eSA9IFwiY2xpZW50XCIgLT4gKClcbiAgICAgICB8IENvbXBvbmVudCBfIC0+IHJlbmRlcl9jb21wb25lbnRfYnVmIGJ1ZiB2IGFyZ3MgZW52XG4gICAgICAgfCBJc2xhbmQgX2kgLT5cbiAgICAgICAgICgqIElzbGFuZHMgYXJlIGNsaWVudC1yZW5kZXJlZCDigJQgZW1pdCBwbGFjZWhvbGRlciB3aXRoIFNYIGNhbGxcbiAgICAgICAgICAgIGV4cHJlc3Npb24gc28gdGhlIGNsaWVudCBjYW4gaHlkcmF0ZSBmcm9tIHNvdXJjZS4gKilcbiAgICAgICAgIGxldCBjYWxsX3N4ID0gXCIoXCIgXiBTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCAoZnVuIHYgLT5cbiAgICAgICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICAgICAgIHwgU3ltYm9sIHMgLT4gcyB8IEtleXdvcmQgayAtPiBcIjpcIiBeIGsgfCBTdHJpbmcgcyAtPiBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgICAgICAgICB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgdlxuICAgICAgICAgKSAoU3ltYm9sIG5hbWUgOjogYXJncykpIF4gXCIpXCIgaW5cbiAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoUHJpbnRmLnNwcmludGYgXCI8c3BhbiBkYXRhLXN4LWlzbGFuZD1cXFwiJXNcXFwiPiVzPC9zcGFuPlwiXG4gICAgICAgICAgIF9pLmlfbmFtZSBjYWxsX3N4KVxuICAgICAgIHwgTWFjcm8gbSAtPlxuICAgICAgICAgbGV0IGV4cGFuZGVkID0gZXhwYW5kX21hY3JvIG0gYXJncyBlbnYgaW5cbiAgICAgICAgIHJlbmRlcl90b19idWYgYnVmIGV4cGFuZGVkIGVudlxuICAgICAgIHwgXyAtPlxuICAgICAgICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgICAgICAgcmVuZGVyX3RvX2J1ZiBidWYgcmVzdWx0IGVudilcbiAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAoKiBVbmtub3duIHN5bWJvbC9jb21wb25lbnQg4oCUIHNraXAgc2lsZW50bHkgZHVyaW5nIFNTUi5cbiAgICAgICAgIFRoZSBjbGllbnQgd2lsbCByZW5kZXIgZnJvbSBwYWdlLXN4LiAqKVxuICAgICAgUHJpbnRmLmVwcmludGYgXCJbc3NyLXNraXBdICVzXFxuJSFcIiBtc2cpXG4gIHwgXyAtPlxuICAgICh0cnlcbiAgICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IChoZWFkIDo6IGFyZ3MpKSAoRW52IGVudikgaW5cbiAgICAgIHJlbmRlcl90b19idWYgYnVmIHJlc3VsdCBlbnZcbiAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICBQcmludGYuZXByaW50ZiBcIltzc3Itc2tpcF0gJXNcXG4lIVwiIG1zZylcblxuYW5kIHJlbmRlcl9lbGVtZW50X2J1ZiBidWYgdGFnIGFyZ3MgZW52ID1cbiAgbGV0IChhdHRycywgY2hpbGRyZW4pID0gcGFyc2VfZWxlbWVudF9hcmdzIGFyZ3MgZW52IGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJzwnO1xuICBCdWZmZXIuYWRkX3N0cmluZyBidWYgdGFnO1xuICByZW5kZXJfYXR0cnNfYnVmIGJ1ZiBhdHRycztcbiAgaWYgaXNfdm9pZCB0YWcgdGhlblxuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiAvPlwiXG4gIGVsc2UgYmVnaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc+JztcbiAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IHJlbmRlcl90b19idWYgYnVmIGMgZW52KSBjaGlsZHJlbjtcbiAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCI8L1wiO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiB0YWc7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnPidcbiAgZW5kXG5cbmFuZCByZW5kZXJfY29tcG9uZW50X2J1ZiBidWYgY29tcCBhcmdzIGVudiA9XG4gIG1hdGNoIGNvbXAgd2l0aFxuICB8IENvbXBvbmVudCBjIC0+XG4gICAgbGV0IGt3YXJncyA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICBsZXQgY2hpbGRyZW5fZXhwcnMgPSByZWYgW10gaW5cbiAgICBsZXQgc2tpcCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBhcmdzIGluXG4gICAgTGlzdC5pdGVyaSAoZnVuIGlkeCBhcmcgLT5cbiAgICAgIGlmICFza2lwIHRoZW4gc2tpcCA6PSBmYWxzZVxuICAgICAgZWxzZSBtYXRjaCBhcmcgd2l0aFxuICAgICAgfCBLZXl3b3JkIGsgd2hlbiBpZHggKyAxIDwgbGVuIC0+XG4gICAgICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdC5udGggYXJncyAoaWR4ICsgMSkpIChFbnYgZW52KSBpblxuICAgICAgICBIYXNodGJsLnJlcGxhY2Uga3dhcmdzIGsgdjtcbiAgICAgICAgc2tpcCA6PSB0cnVlXG4gICAgICB8IF8gLT4gY2hpbGRyZW5fZXhwcnMgOj0gYXJnIDo6ICFjaGlsZHJlbl9leHByc1xuICAgICkgYXJncztcbiAgICBsZXQgY2hpbGRyZW4gPSBMaXN0LnJldiAhY2hpbGRyZW5fZXhwcnMgaW5cbiAgICBsZXQgbG9jYWwgPSBlbnZfbWVyZ2UgYy5jX2Nsb3N1cmUgZW52IGluXG4gICAgTGlzdC5pdGVyIChmdW4gcCAtPlxuICAgICAgbGV0IHYgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGt3YXJncyBwIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbCBpblxuICAgICAgaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIHYpXG4gICAgKSBjLmNfcGFyYW1zO1xuICAgIGlmIGMuY19oYXNfY2hpbGRyZW4gdGhlbiBiZWdpblxuICAgICAgbGV0IGNoaWxkX2J1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IHJlbmRlcl90b19idWYgY2hpbGRfYnVmIGMgZW52KSBjaGlsZHJlbjtcbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgXCJjaGlsZHJlblwiIChSYXdIVE1MIChCdWZmZXIuY29udGVudHMgY2hpbGRfYnVmKSkpXG4gICAgZW5kO1xuICAgIHJlbmRlcl90b19idWYgYnVmIGMuY19ib2R5IGxvY2FsXG4gIHwgXyAtPiAoKVxuXG5hbmQgcmVuZGVyX2NvbmRfYnVmIGJ1ZiBhcmdzIGVudiA9XG4gIGxldCBhc19saXN0ID0gZnVuY3Rpb24gTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IFNvbWUgbCB8IF8gLT4gTm9uZSBpblxuICBsZXQgaXNfc2NoZW1lID0gTGlzdC5mb3JfYWxsIChmdW4gYSAtPiBtYXRjaCBhc19saXN0IGEgd2l0aFxuICAgIHwgU29tZSBpdGVtcyB3aGVuIExpc3QubGVuZ3RoIGl0ZW1zID0gMiAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgYXJncyBpblxuICBpZiBpc19zY2hlbWUgdGhlbiBiZWdpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiAoKVxuICAgICAgfCBjbGF1c2UgOjogcmVzdCAtPlxuICAgICAgICAobWF0Y2ggYXNfbGlzdCBjbGF1c2Ugd2l0aFxuICAgICAgICAgfCBTb21lIFt0ZXN0OyBib2R5XSAtPlxuICAgICAgICAgICBsZXQgaXNfZWxzZSA9IG1hdGNoIHRlc3Qgd2l0aFxuICAgICAgICAgICAgIHwgS2V5d29yZCBcImVsc2VcIiB8IFN5bWJvbCBcImVsc2VcIiB8IFN5bWJvbCBcIjplbHNlXCIgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UgaW5cbiAgICAgICAgICAgaWYgaXNfZWxzZSB0aGVuIHJlbmRlcl90b19idWYgYnVmIGJvZHkgZW52XG4gICAgICAgICAgIGVsc2UgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIHRlc3QgKEVudiBlbnYpIGluXG4gICAgICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiByZW5kZXJfdG9fYnVmIGJ1ZiBib2R5IGVudiBlbHNlIGdvIHJlc3RcbiAgICAgICAgIHwgXyAtPiAoKSlcbiAgICBpbiBnbyBhcmdzXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+ICgpIHwgW19dIC0+ICgpXG4gICAgICB8IHRlc3QgOjogYm9keSA6OiByZXN0IC0+XG4gICAgICAgIGxldCBpc19lbHNlID0gbWF0Y2ggdGVzdCB3aXRoXG4gICAgICAgICAgfCBLZXl3b3JkIFwiZWxzZVwiIHwgU3ltYm9sIFwiZWxzZVwiIHwgU3ltYm9sIFwiOmVsc2VcIiAtPiB0cnVlIHwgXyAtPiBmYWxzZSBpblxuICAgICAgICBpZiBpc19lbHNlIHRoZW4gcmVuZGVyX3RvX2J1ZiBidWYgYm9keSBlbnZcbiAgICAgICAgZWxzZSBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgdGVzdCAoRW52IGVudikgaW5cbiAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIHJlbmRlcl90b19idWYgYnVmIGJvZHkgZW52IGVsc2UgZ28gcmVzdFxuICAgIGluIGdvIGFyZ3NcbiAgZW5kXG5cbmFuZCByZW5kZXJfbGV0X2J1ZiBidWYgYXJncyBlbnYgPVxuICBsZXQgYXNfbGlzdCA9IGZ1bmN0aW9uIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBTb21lIGwgfCBfIC0+IE5vbmUgaW5cbiAgbGV0IGJpbmRpbmdzX2V4cHIgPSBMaXN0LmhkIGFyZ3MgaW5cbiAgbGV0IGJvZHkgPSBMaXN0LnRsIGFyZ3MgaW5cbiAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCBlbnYgaW5cbiAgbGV0IGJpbmRpbmdzID0gbWF0Y2ggYXNfbGlzdCBiaW5kaW5nc19leHByIHdpdGggU29tZSBsIC0+IGwgfCBOb25lIC0+IFtdIGluXG4gIGxldCBpc19zY2hlbWUgPSBtYXRjaCBiaW5kaW5ncyB3aXRoIChMaXN0IF8gOjogXykgfCAoTGlzdFJlZiBfIDo6IF8pIC0+IHRydWUgfCBfIC0+IGZhbHNlIGluXG4gIGlmIGlzX3NjaGVtZSB0aGVuXG4gICAgTGlzdC5pdGVyIChmdW4gYiAtPlxuICAgICAgbWF0Y2ggYXNfbGlzdCBiIHdpdGhcbiAgICAgIHwgU29tZSBbU3ltYm9sIG5hbWU7IGV4cHJdIHwgU29tZSBbU3RyaW5nIG5hbWU7IGV4cHJdIC0+XG4gICAgICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgbG9jYWwpIGluXG4gICAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgbmFtZSB2KVxuICAgICAgfCBfIC0+ICgpXG4gICAgKSBiaW5kaW5nc1xuICBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+ICgpXG4gICAgICB8IChTeW1ib2wgbmFtZSkgOjogZXhwciA6OiByZXN0IHwgKFN0cmluZyBuYW1lKSA6OiBleHByIDo6IHJlc3QgLT5cbiAgICAgICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBsb2NhbCkgaW5cbiAgICAgICAgaWdub3JlIChlbnZfYmluZCBsb2NhbCBuYW1lIHYpOyBnbyByZXN0XG4gICAgICB8IF8gLT4gKClcbiAgICBpbiBnbyBiaW5kaW5nc1xuICBlbmQ7XG4gIGxldCByZWMgcmVuZGVyX2JvZHkgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gKClcbiAgICB8IFtsYXN0XSAtPiByZW5kZXJfdG9fYnVmIGJ1ZiBsYXN0IGxvY2FsXG4gICAgfCBlIDo6IHJlc3QgLT4gaWdub3JlIChTeF9yZWYuZXZhbF9leHByIGUgKEVudiBsb2NhbCkpOyByZW5kZXJfYm9keSByZXN0XG4gIGluIHJlbmRlcl9ib2R5IGJvZHlcblxuYW5kIHJlbmRlcl9tYXBfYnVmIGJ1ZiBhcmdzIGVudiBpbmRleGVkID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBMaXN0Lml0ZXJpIChmdW4gaSBpdGVtIC0+XG4gICAgbGV0IGNhbGxfYXJncyA9IGlmIGluZGV4ZWQgdGhlbiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IGl0ZW1dIGVsc2UgW2l0ZW1dIGluXG4gICAgbWF0Y2ggZm5fdmFsIHdpdGhcbiAgICB8IExhbWJkYSBsIC0+XG4gICAgICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIGwubF9jbG9zdXJlIGluXG4gICAgICBMaXN0Lml0ZXIyIChmdW4gcCBhIC0+IGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCBhKSkgbC5sX3BhcmFtcyBjYWxsX2FyZ3M7XG4gICAgICByZW5kZXJfdG9fYnVmIGJ1ZiBsLmxfYm9keSBsb2NhbFxuICAgIHwgXyAtPlxuICAgICAgbGV0IHJlc3VsdCA9IFN4X3J1bnRpbWUuc3hfY2FsbCBmbl92YWwgY2FsbF9hcmdzIGluXG4gICAgICByZW5kZXJfdG9fYnVmIGJ1ZiByZXN1bHQgZW52XG4gICkgaXRlbXNcblxuYW5kIHJlbmRlcl9mb3JfZWFjaF9idWYgYnVmIGFyZ3MgZW52ID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBMaXN0Lml0ZXIgKGZ1biBpdGVtIC0+XG4gICAgbWF0Y2ggZm5fdmFsIHdpdGhcbiAgICB8IExhbWJkYSBsIC0+XG4gICAgICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIGwubF9jbG9zdXJlIGluXG4gICAgICBMaXN0Lml0ZXIyIChmdW4gcCBhIC0+IGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCBhKSkgbC5sX3BhcmFtcyBbaXRlbV07XG4gICAgICByZW5kZXJfdG9fYnVmIGJ1ZiBsLmxfYm9keSBsb2NhbFxuICAgIHwgXyAtPlxuICAgICAgbGV0IHJlc3VsdCA9IFN4X3J1bnRpbWUuc3hfY2FsbCBmbl92YWwgW2l0ZW1dIGluXG4gICAgICByZW5kZXJfdG9fYnVmIGJ1ZiByZXN1bHQgZW52XG4gICkgaXRlbXNcblxuKCoqIFB1YmxpYyBBUEk6IHJlbmRlciB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyLiAqKVxubGV0IHJlbmRlcl90b19idWZmZXIgYnVmIGV4cHIgZW52ID0gcmVuZGVyX3RvX2J1ZiBidWYgZXhwciBlbnZcblxuKCoqIENvbnZlbmllbmNlOiByZW5kZXIgdG8gc3RyaW5nIHVzaW5nIHRoZSBidWZmZXIgcmVuZGVyZXIuICopXG5sZXQgcmVuZGVyX3RvX2h0bWxfc3RyZWFtaW5nIGV4cHIgZW52ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjU1MzYgaW5cbiAgcmVuZGVyX3RvX2J1ZiBidWYgZXhwciBlbnY7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBTZXR1cCDigJQgYmluZCByZW5kZXIgcHJpbWl0aXZlcyBpbiBhbiBlbnYgYW5kIHdpcmUgdXAgdGhlIHJlZiAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBzZXR1cF9yZW5kZXJfZW52IGVudiA9XG4gIHJlbmRlcl90b19odG1sX3JlZiA6PSBkb19yZW5kZXJfdG9faHRtbDtcblxuICBsZXQgYmluZCBuYW1lIGZuID1cbiAgICBpZ25vcmUgKGVudl9iaW5kIGVudiBuYW1lIChOYXRpdmVGbiAobmFtZSwgZm4pKSlcbiAgaW5cblxuICBiaW5kIFwicmVuZGVyLWh0bWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSAtPlxuICAgICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICAgIGxldCBleHByID0gbWF0Y2ggZXhwcnMgd2l0aFxuICAgICAgICB8IFtlXSAtPiBlXG4gICAgICAgIHwgW10gLT4gTmlsXG4gICAgICAgIHwgXyAtPiBMaXN0IChTeW1ib2wgXCJkb1wiIDo6IGV4cHJzKVxuICAgICAgaW5cbiAgICAgIFN0cmluZyAocmVuZGVyX3RvX2h0bWwgZXhwciBlbnYpXG4gICAgfCBbZXhwcl0gLT5cbiAgICAgIFN0cmluZyAocmVuZGVyX3RvX2h0bWwgZXhwciBlbnYpXG4gICAgfCBbZXhwcjsgRW52IGVdIC0+XG4gICAgICBTdHJpbmcgKHJlbmRlcl90b19odG1sIGV4cHIgZSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuXG4gIGJpbmQgXCJyZW5kZXItdG8taHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgbGV0IGV4cHIgPSBtYXRjaCBleHBycyB3aXRoXG4gICAgICAgIHwgW2VdIC0+IGVcbiAgICAgICAgfCBbXSAtPiBOaWxcbiAgICAgICAgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpXG4gICAgICBpblxuICAgICAgU3RyaW5nIChyZW5kZXJfdG9faHRtbCBleHByIGVudilcbiAgICB8IFtleHByXSAtPlxuICAgICAgU3RyaW5nIChyZW5kZXJfdG9faHRtbCBleHByIGVudilcbiAgICB8IFtleHByOyBFbnYgZV0gLT5cbiAgICAgIFN0cmluZyAocmVuZGVyX3RvX2h0bWwgZXhwciBlKVxuICAgIHwgXyAtPiBTdHJpbmcgXCJcIilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfY29tcGFyZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiY3N0X2JyIiwiY3N0X2NvbCIsImNzdF9lbWJlZCIsImNzdF9maWx0ZXIiLCJjc3RfaHIiLCJjc3RfaW1nIiwiY3N0X2lucHV0IiwiY3N0X2xpbmsiLCJjc3RfbWV0YSIsImNzdF9wYXJhbSIsImNzdF9zb3VyY2UiLCJjc3Rfd2JyIiwiaHRtbF90YWdzIiwidm9pZF9lbGVtZW50cyIsImJvb2xlYW5fYXR0cnMiLCJTeF9yZWYiLCJTdGRsaWJfRmxvYXQiLCJTdGRsaWIiLCJTdGRsaWJfUHJpbnRmIiwiU3hfcnVudGltZSIsIlN0ZGxpYl9MaXN0IiwiU3hfdHlwZXMiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfcGFyc2VyIiwiaXNfaHRtbF90YWciLCJuYW1lIiwiaXNfdm9pZCIsImlzX2Jvb2xlYW5fYXR0ciIsImNzdF9hbXAiLCJjc3RfZ3QiLCJjc3RfbHQiLCJjc3RfcXVvdCIsImVzY2FwZV9odG1sIiwicyIsImJ1ZiIsImMiLCJjc3QiLCJyZW5kZXJfYXR0cnMiLCJhdHRycyIsImsiLCJ2IiwicmVuZGVyX3RvX2h0bWxfcmVmIiwiZXhwciIsImVudiIsInJlbmRlcl90b19odG1sIiwiY3N0X3JlbmRlcl90b19odG1sIiwic3hfcmVuZGVyX3RvX2h0bWwiLCJyZW5kZXJfZW52IiwiZXZhbF9lbnYiLCJmbiIsInJlc3VsdCIsInJlbmRlcl9jaGlsZHJlbiIsImNoaWxkcmVuIiwicGFyc2VfZWxlbWVudF9hcmdzIiwiYXJncyIsImxlbiIsInNraXAiLCJpZHgiLCJhcmciLCJwYWlycyIsInBhcmFtIiwicmVuZGVyX2h0bWxfZWxlbWVudCIsInRhZyIsIm1hdGNoIiwiYXR0cl9zdHIiLCJjb250ZW50IiwiY3N0X2NoaWxkcmVuIiwicmVuZGVyX2NvbXBvbmVudCIsImNvbXAiLCJrd2FyZ3MiLCJjaGlsZHJlbl9leHBycyIsImxvY2FsIiwicCIsInJlbmRlcmVkX2NoaWxkcmVuIiwiZXhwYW5kX21hY3JvIiwibSIsInBhcmFtcyIsInBzIiwiYXMiLCJycCIsInBzX3Jlc3QiLCJhc19yZXN0IiwiYSIsImNzdF9nIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJkb19yZW5kZXJfdG9faHRtbCIsImNvdW50ZXIiLCJuIiwiaGVhZCIsImNzdF9zcGFuIiwiY3N0X3NwYW5fZGF0YV9zeF9pc2xhbmQiLCJjc3Rfc3Bhbl9kYXRhX3N4X2lzbGFuZF9zX3Nfc3AiLCJjc3RfYmVnaW4iLCJjc3RfY2FzZSIsImNzdF9jbGllbnQiLCJjc3RfY29uZCIsImNzdF9kZWZjb21wIiwiY3N0X2RlZmluZSIsImNzdF9kZWZpc2xhbmQiLCJjc3RfZGVmbWFjcm8iLCJjc3RfZG8iLCJjc3RfZm9yX2VhY2giLCJjc3RfaWYiLCJjc3RfbGV0IiwiY3N0X21hcCIsImNzdF9tYXBfaW5kZXhlZCIsImNzdF9yYXciLCJjc3Rfd2hlbiIsInJlbmRlcl9saXN0X3RvX2h0bWwiLCJzd2l0Y2gkIiwiY29uZF92YWwiLCJlIiwibGFzdCIsInJlc3QiLCJpIiwiY2FsbF9zeCIsImV4cGFuZGVkIiwiZXhuIiwiY3N0X2Vsc2UiLCJyZW5kZXJfY29uZCIsImFzX2xpc3QiLCJsIiwiaXNfc2NoZW1lIiwiaXRlbXMiLCJjbGF1c2UiLCJib2R5IiwidGVzdCIsImlzX2Vsc2UiLCJyZW5kZXJfbGV0IiwiYmluZGluZ3NfZXhwciIsImJpbmRpbmdzIiwiYiIsInJlbmRlcl9tYXAiLCJpbmRleGVkIiwidmEiLCJ2YiIsImNvbGxfdmFsIiwiZm5fdmFsIiwiaXRlbSIsImNhbGxfYXJncyIsInJlbmRlcl9mb3JfZWFjaCIsImVzY2FwZV9odG1sX2J1ZiIsInJlbmRlcl9hdHRyc19idWYiLCJyZW5kZXJfdG9fYnVmIiwiY3N0X3Nzcl9za2lwIiwiY3N0X3Nzcl9za2lwX3MiLCJyZW5kZXJfbGlzdF9idWYiLCJtc2ciLCJyZW5kZXJfZWxlbWVudF9idWYiLCJyZW5kZXJfY29tcG9uZW50X2J1ZiIsImNoaWxkX2J1ZiIsInJlbmRlcl9jb25kX2J1ZiIsInJlbmRlcl9sZXRfYnVmIiwicmVuZGVyX21hcF9idWYiLCJyZW5kZXJfZm9yX2VhY2hfYnVmIiwicmVuZGVyX3RvX2J1ZmZlciIsInJlbmRlcl90b19odG1sX3N0cmVhbWluZyIsInNldHVwX3JlbmRlcl9lbnYiLCJiaW5kIiwic3JjIiwiZXhwcnMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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LE9BQ3pCO0FBQUEsTUFBUztBQUFBLElBQUM7QUFBQTtBQUFBLHNCQUFBMUQ7QUFBQUEsY0FHakI7QUFBQSxtQkFBQVosT0FBQTtBQUFBO0FBQUEsb0JBQUFzSCxNQUFBLFNBQUFDLFFBRWM7QUFBQSxnQkFDWjtBQUFBO0FBQUEsc0JBQUF2SCxTQUdTO0FBQUE7QUFBQSxzQkFBQXNFLE1BSFQsVUFBQXRFLFNBQ1c7QUFBQTtBQUFBLHFCQUFBQSxTQUNEO0FBQUEsZ0JBR0gsdUNBQXlCO0FBQUE7QUFBQSxtQkFBQXFCLFFBUmxDO0FBQUEsMkJBVVMscUNBQXlCO0FBQUEsdUJBVmxDO0FBQUEsMEVBQUFpRCxJQUFBLE1BWVMsbUNBQXVCO0FBQUE7QUFBQSxjQUN6QjtBQUFBLGFBQVMsRUFBQztBQUFBO0FBQUEsR0R6dUJyQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM5NTM3LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Impzb29fcnVudGltZS5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIl0sIm5hbWVzIjpbInJ1bnRpbWUiXSwibWFwcGluZ3MiOiJPQUFBQSxVQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzk1NTAsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvb19ydW50aW1lLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBKc19vZl9vY2FtbCBsaWJyYXJ5XG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4gKiBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbiAqKVxuXG5tb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgcnVudGltZV92YWx1ZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc29vX3J1bnRpbWVfdmFsdWVcIlxuICAoKiogW3J1bnRpbWVfdmFsdWUgXCJGT09cIl0gcmV0dXJucyB0aGUgSmF2YVNjcmlwdCB2YWx1ZSBGT08gcHJvdmlkZWQgYnkgdGhlIEphdmFTY3JpcHQgcnVudGltZSAod2l0aCAnLy9Qcm92aWRlczogRk9PJykuIFRoZSBzdHJpbmcgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBsaXRlcmFsLiAqKVxuXG4gIGV4dGVybmFsIGN1c3RvbV9pZGVudGlmaWVyIDogT2JqLnQgLT4gc3RyaW5nID0gXCJjYW1sX2N1c3RvbV9pZGVudGlmaWVyXCJcbmVuZFxuXG5tb2R1bGUgU3lzID0gc3RydWN0XG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAnYVxuXG4gIGV4dGVybmFsIGNyZWF0ZV9maWxlIDogbmFtZTpzdHJpbmcgLT4gY29udGVudDpzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9jcmVhdGVfZmlsZVwiXG5cbiAgZXh0ZXJuYWwgcmVhZF9maWxlIDogbmFtZTpzdHJpbmcgLT4gc3RyaW5nID0gXCJjYW1sX3JlYWRfZmlsZV9jb250ZW50XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9vdXRwdXQnIDogb3V0X2NoYW5uZWwgLT4gKGpzX3N0cmluZzpKcy50IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX2lucHV0JyA6IGluX2NoYW5uZWwgLT4gKHVuaXQgLT4gc3RyaW5nKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXCJcblxuICBleHRlcm5hbCBtb3VudF9wb2ludCA6IHVuaXQgLT4gc3RyaW5nIGxpc3QgPSBcImNhbWxfbGlzdF9tb3VudF9wb2ludFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfYXV0b2xvYWQgOiBzdHJpbmcgLT4gKHN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvbikgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21vdW50X2F1dG9sb2FkXCJcblxuICBleHRlcm5hbCB1bm1vdW50IDogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfdW5tb3VudFwiXG5cbiAgdHlwZSByZWRpcmVjdGlvblxuXG4gIGV4dGVybmFsIHJlZGlyZWN0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiBpbnRvOm91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uXG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFwiXG5cbiAgZXh0ZXJuYWwgcmVzdG9yZV9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb24gLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVwiXG5cbiAgbW9kdWxlIENvbmZpZyA9IHN0cnVjdFxuICAgIGV4dGVybmFsIHVzZV9qc19zdHJpbmcgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXCJcblxuICAgIHR5cGUgZWZmZWN0c19iYWNrZW5kID1cbiAgICAgIFsgYERpc2FibGVkXG4gICAgICB8IGBDcHNcbiAgICAgIHwgYERvdWJsZV90cmFuc2xhdGlvblxuICAgICAgXVxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0c18gOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuXG4gICAgbGV0IGVmZmVjdHMgKCkgPVxuICAgICAgbWF0Y2ggZWZmZWN0c18gKCkgd2l0aFxuICAgICAgfCBcImRpc2FibGVkXCIgLT4gYERpc2FibGVkXG4gICAgICB8IFwiY3BzXCIgLT4gYENwc1xuICAgICAgfCBcImRvdWJsZS10cmFuc2xhdGlvblwiIC0+IGBEb3VibGVfdHJhbnNsYXRpb25cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgZW5kXG5cbiAgbGV0IHZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uc1xuXG4gIGxldCBnaXRfdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5naXRfdmVyc2lvblxuZW5kXG5cbm1vZHVsZSBFcnJvciA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcmFpc2VfIDogdCAtPiAnYVxuXG4gIHZhbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuXG4gICgqKiBBdHRhY2ggYSBKYXZhU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhU2NyaXB0IGVycm9ycyB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5IHdoZW4gY29tcGlsaW5nIHdpdGhcbiAgICBbLS1lbmFibGUgd2l0aC1qcy1lcnJvcl0uICopXG5cbiAgdmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvblxuICAoKiogRXh0cmFjdCBhIEphdmFTY3JpcHQgZXJyb3IgYXR0YWNoZWQgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLCBpZiBhbnkuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgICAgaW5zcGVjdCBhbiBldmVudHVhbCBzdGFjayB0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBleHRlcm5hbCByYWlzZV8gOiB0IC0+ICdhID0gXCJjYW1sX3Rocm93X2pzX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbid0IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuXG4gIGV4dGVybmFsIGNhbWxfc3RyaW5nX29mX2FycmF5IDogJ2EgYXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9hcnJheVwiXG5lbmRcblxubW9kdWxlIFR5cGVkX2FycmF5ID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdHlwZWRBcnJheSA9IEpzLnRcblxuICB0eXBlIGFycmF5QnVmZmVyID0gSnMudFxuXG4gIHR5cGUgdWludDhBcnJheSA9IEpzLnRcblxuICBleHRlcm5hbCBraW5kIDogKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiKSBCaWdhcnJheS5raW5kXG4gICAgPSBcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgZnJvbV9nZW5hcnJheSA6XG4gICAgKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnQgLT4gKCdhLCAnYikgdHlwZWRBcnJheVxuICAgID0gXCJjYW1sX2JhX3RvX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19nZW5hcnJheSA6XG4gICAgKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudFxuICAgID0gXCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXlcIlxuXG4gIG1vZHVsZSBCaWdzdHJpbmcgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSAoY2hhciwgQmlnYXJyYXkuaW50OF91bnNpZ25lZF9lbHQsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5BcnJheTEudFxuXG4gICAgZXh0ZXJuYWwgdG9fYXJyYXlCdWZmZXIgOiB0IC0+IGFycmF5QnVmZmVyID0gXCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIHRvX3VpbnQ4QXJyYXkgOiB0IC0+IHVpbnQ4QXJyYXkgPSBcImJpZ3N0cmluZ190b190eXBlZF9hcnJheVwiXG5cbiAgICBleHRlcm5hbCBvZl9hcnJheUJ1ZmZlciA6IGFycmF5QnVmZmVyIC0+IHQgPSBcImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gdCA9IFwiYmlnc3RyaW5nX29mX3R5cGVkX2FycmF5XCJcbiAgZW5kXG5cbiAgZXh0ZXJuYWwgc3RyaW5nX29mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGJ5dGVzX29mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IGJ5dGVzID0gXCJjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XCJcblxuICBleHRlcm5hbCB1aW50OEFycmF5X29mX2J5dGVzIDogYnl0ZXMgLT4gdWludDhBcnJheSA9IFwiY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1wiXG5lbmRcblxubW9kdWxlIEludDY0ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZV9pbnQ2NF9sb19taV9oaSA6IGludCAtPiBpbnQgLT4gaW50IC0+IEludDY0LnRcbiAgICA9IFwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcIlxuZW5kXG5cbm1vZHVsZSBFZmZlY3QgOiBzaWdcbiAgZXh0ZXJuYWwgYXNzdW1lX25vX3BlcmZvcm0gOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfYXNzdW1lX25vX3BlcmZvcm1cIlxuICAoKiogUGFzc2luZyBhIGZ1bmN0aW9uIFtmXSBhcyBhcmd1bWVudCBvZiBgYXNzdW1lX25vX3BlcmZvcm1gIGd1YXJhbnRlZXMgdGhhdCxcbiAgICAgIHdoZW4gY29tcGlsaW5nIHdpdGggYC0tZWZmZWN0cz1kb3VibGUtdHJhbnNsYXRpb25gLCB0aGUgZGlyZWN0LXN0eWxlXG4gICAgICB2ZXJzaW9uIG9mIFtmXSBpcyBjYWxsZWQsIHdoaWNoIGlzIGZhc3RlciB0aGFuIHRoZSBDUFMgdmVyc2lvbi4gQXMgYVxuICAgICAgY29uc2VxdWVuY2UsIHBlcmZvcm1pbmcgYW4gZWZmZWN0IGluIGEgdHJhbnNpdGl2ZSBjYWxsZWUgb2YgW2ZdIHdpbGxcbiAgICAgIHJhaXNlIGBFZmZlY3QuVW5oYW5kbGVkYCwgcmVnYXJkbGVzcyBvZiBhbnkgZWZmZWN0IGhhbmRsZXJzIGluc3RhbGxlZFxuICAgICAgYmVmb3JlIHRoZSBjYWxsIHRvIGBhc3N1bWVfbm9fcGVyZm9ybWAsIHVubGVzcyBhIG5ldyBlZmZlY3QgaGFuZGxlciB3YXNcbiAgICAgIGluc3RhbGxlZCBpbiB0aGUgbWVhbnRpbWUuXG5cbiAgICAgIFRoaXMgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIHdoZW4gZG91YmxlIHRyYW5zbGF0aW9uIGlzIGRpc2FibGVkLiAqKVxuZW5kID0gc3RydWN0XG4gIGV4dGVybmFsIGFzc3VtZV9ub19wZXJmb3JtIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2Fzc3VtZV9ub19wZXJmb3JtXCJcbmVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiSnNvb19ydW50aW1lX1J1bnRpbWVfdmVyc2lvbiIsIlN0ZGxpYl9DYWxsYmFjayIsImVmZmVjdHMiLCJwYXJhbSIsIm1hdGNoIiwidmVyc2lvbiIsImdpdF92ZXJzaW9uIiwiRXhuIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQywrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUE7QUFBQSxZQUFBQyxRQUFBQztBQUFBQSxRQUFBQyxRQ2lLWTtBQUFBLElBQVcsb0JBRU47QUFBQSxJQUZNLHlCQUNEO0FBQUEsSUFEQztBQUFBLEtBSVY7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUFDLFVEckt6QjtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsR0N3TVU7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQTREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHhNdEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozOTU5OCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc19vZl9vY2FtbC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL2pzX29mX29jYW1sL2ltcG9ydC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEpzX29mX29jYW1sXG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4gKiBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbiAqKVxuXG5tb2R1bGUgUG9seSA9IHN0cnVjdFxuICBleHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcblxuICBleHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuXG4gIGV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuXG4gIGV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxuICBleHRlcm5hbCBlcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5lbmRcblxubW9kdWxlIEludF9yZXBsYWNlX3BvbHltb3JwaGljX2NvbXBhcmUgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgKCA8ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA8PSApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcblxuICBleHRlcm5hbCAoIDw+ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA9ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgKCA+ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA+PSApIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcblxuICBleHRlcm5hbCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxuICBleHRlcm5hbCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBsZXQgbWF4ICh4IDogaW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuICBsZXQgbWluICh4IDogaW50KSB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmVuZFxuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG5cbiAgbGV0IGVxdWFsICh4IDogc3RyaW5nKSAoeSA6IHN0cmluZykgPSBQb2x5LmVxdWFsIHggeVxuZW5kXG5cbm1vZHVsZSBDaGFyID0gc3RydWN0XG4gIGluY2x1ZGUgQ2hhclxuXG4gIGxldCBlcXVhbCAoeCA6IGNoYXIpICh5IDogY2hhcikgPSBQb2x5LmVxdWFsIHggeVxuZW5kXG5cbmluY2x1ZGUgSW50X3JlcGxhY2VfcG9seW1vcnBoaWNfY29tcGFyZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsIm1heCIsIngiLCJ5IiwibWluIiwibWFrZSIsImluaXQiLCJlbXB0eSIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJibGl0IiwiY29uY2F0IiwiY2F0IiwiY29tcGFyZSIsInN0YXJ0c193aXRoIiwiZW5kc193aXRoIiwiY29udGFpbnNfZnJvbSIsInJjb250YWluc19mcm9tIiwiY29udGFpbnMiLCJzdWIiLCJzcGxpdF9vbl9jaGFyIiwibWFwIiwibWFwaSIsImZvbGRfbGVmdCIsImZvbGRfcmlnaHQiLCJmb3JfYWxsIiwiZXhpc3RzIiwidHJpbSIsImVzY2FwZWQiLCJ1cHBlcmNhc2VfYXNjaWkiLCJsb3dlcmNhc2VfYXNjaWkiLCJjYXBpdGFsaXplX2FzY2lpIiwidW5jYXBpdGFsaXplX2FzY2lpIiwiaXRlciIsIml0ZXJpIiwiaW5kZXhfZnJvbSIsImluZGV4X2Zyb21fb3B0IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfZnJvbV9vcHQiLCJpbmRleCIsImluZGV4X29wdCIsInJpbmRleCIsInJpbmRleF9vcHQiLCJ0b19zZXEiLCJ0b19zZXFpIiwib2Zfc2VxIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X3VpbnQ4IiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X25lIiwiZ2V0X3VpbnQxNl9iZSIsImdldF91aW50MTZfbGUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MzJfbmUiLCJoYXNoIiwic2VlZGVkX2hhc2giLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50NjRfbmUiLCJnZXRfaW50NjRfYmUiLCJnZXRfaW50NjRfbGUiLCJlcXVhbCIsImNociJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsWUFBQUMsSUFBQUMsR0FBQUMsR0NxRHdCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFGLEdBQUFDLEdBRXZCLHFCQUF1QjtBQUFBO0FBQUEsSUFBQUUsT0R2RC9DO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUF6QyxZQUFBO0FBQUEsSUFBQUUsb0JBQUE7QUFBQSxJQUFBRCxvQkFBQTtBQUFBLElBQUFoQixZQUFBO0FBQUEsSUFBQWlELGdCQUFBO0FBQUEsSUFBQUQsU0FBQTtBQUFBLFlBQUFPLFFBQUFsRSxHQUFBQyxHQ21Fb0MsdUJBQWM7QUFBQSxHRG5FbEQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozOTc3MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc19vZl9vY2FtbC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL2pzX29mX29jYW1sL2pzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogSnNfb2Zfb2NhbWwgbGlicmFyeVxuICogaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbiAqIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuICogTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5vcGVuISBJbXBvcnRcblxuKCogVGhpcyBsb2NhbCBtb2R1bGUgW0pzXSBpcyBuZWVkZWQgc28gdGhhdCB0aGUgcHB4X2pzIGV4dGVuc2lvbiB3b3JrIHdpdGhpbiB0aGF0IGZpbGUuICopXG5tb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSArJ2EgdFxuXG4gIHR5cGUgKC0nYSwgKydiKSBtZXRoX2NhbGxiYWNrXG5cbiAgbW9kdWxlIFVuc2FmZSA9IHN0cnVjdFxuICAgIHR5cGUgdG9wXG5cbiAgICB0eXBlIGFueSA9IHRvcCB0XG5cbiAgICB0eXBlIGFueV9qc19hcnJheSA9IGFueVxuXG4gICAgZXh0ZXJuYWwgaW5qZWN0IDogJ2EgLT4gYW55ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgZXh0ZXJuYWwgY29lcmNlIDogXyB0IC0+IF8gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGV4dGVybmFsIGdldCA6ICdhIC0+ICdiIC0+ICdjID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgICBleHRlcm5hbCBzZXQgOiAnYSAtPiAnYiAtPiAnYyAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgICBleHRlcm5hbCBkZWxldGUgOiAnYSAtPiAnYiAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgICBleHRlcm5hbCBjYWxsIDogJ2EgLT4gJ2IgLT4gYW55IGFycmF5IC0+ICdjID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgZnVuX2NhbGwgOiAnYSAtPiBhbnkgYXJyYXkgLT4gJ2IgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogJ2EgLT4gc3RyaW5nIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gICAgZXh0ZXJuYWwgbmV3X29iaiA6ICdhIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19uZXdcIlxuXG4gICAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiAnYSAtPiBhbnlfanNfYXJyYXkgLT4gJ2IgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gICAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIGFueSkgYXJyYXkgLT4gJ2EgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICAgIGV4dGVybmFsIGVxdWFscyA6ICdhIC0+ICdiIC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiAnYSAtPiAnYiAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gICAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgICBsZXQgZ2xvYmFsID0gcHVyZV9qc19leHByIFwiZ2xvYmFsVGhpc1wiXG5cbiAgICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICAgKGFueV9qc19hcnJheSAtPiAnYikgLT4gKCdjLCBhbnlfanNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICAgIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgICAoJ2IgLT4gYW55X2pzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIGFueV9qc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgICBleHRlcm5hbCBydW50aW1lX3ZhbHVlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzb29fcnVudGltZV92YWx1ZVwiXG5cbiAgICAoKiBERVBSRUNBVEVEICopXG4gICAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbiAgZW5kXG5cbiAgKCoqKiopXG5cbiAgdHlwZSAnYSBvcHQgPSAnYVxuXG4gIHR5cGUgJ2Egb3B0ZGVmID0gJ2FcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGxldCBudWxsIDogJ2Egb3B0ID0gVW5zYWZlLnB1cmVfanNfZXhwciBcIm51bGxcIlxuXG4gIGV4dGVybmFsIHNvbWUgOiAnYSAtPiAnYSBvcHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IHVuZGVmaW5lZCA6ICdhIG9wdGRlZiA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJ1bmRlZmluZWRcIlxuXG4gIGV4dGVybmFsIGRlZiA6ICdhIC0+ICdhIG9wdGRlZiA9IFwiJWlkZW50aXR5XCJcblxuICBtb2R1bGUgdHlwZSBPUFQgPSBzaWdcbiAgICB0eXBlICdhIHRcblxuICAgIHZhbCBlbXB0eSA6ICdhIHRcblxuICAgIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG5cbiAgICB2YWwgbWFwIDogJ2EgdCAtPiAoJ2EgLT4gJ2IpIC0+ICdiIHRcblxuICAgIHZhbCBiaW5kIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuXG4gICAgdmFsIHRlc3QgOiAnYSB0IC0+IGJvb2xcblxuICAgIHZhbCBpdGVyIDogJ2EgdCAtPiAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG4gICAgdmFsIGNhc2UgOiAnYSB0IC0+ICh1bml0IC0+ICdiKSAtPiAoJ2EgLT4gJ2IpIC0+ICdiXG5cbiAgICB2YWwgZ2V0IDogJ2EgdCAtPiAodW5pdCAtPiAnYSkgLT4gJ2FcblxuICAgIHZhbCBvcHRpb24gOiAnYSBvcHRpb24gLT4gJ2EgdFxuXG4gICAgdmFsIHRvX29wdGlvbiA6ICdhIHQgLT4gJ2Egb3B0aW9uXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG4gIGVuZFxuXG4gIG1vZHVsZSBPcHQgOiBPUFQgd2l0aCB0eXBlICdhIHQgPSAnYSBvcHQgPSBzdHJ1Y3RcbiAgICB0eXBlICdhIHQgPSAnYSBvcHRcblxuICAgIGxldCBlbXB0eSA9IG51bGxcblxuICAgIGxldCByZXR1cm4gPSBzb21lXG5cbiAgICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICAgIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgICBsZXQgbWFwIHggZiA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBudWxsIGVsc2UgcmV0dXJuIChmIHgpXG5cbiAgICBsZXQgYmluZCB4IGYgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gbnVsbCBlbHNlIGYgeFxuXG4gICAgbGV0IHRlc3QgeCA9IG5vdCAoZXF1YWxzIHggbnVsbClcblxuICAgIGxldCBpdGVyIHggZiA9IGlmIG5vdCAoZXF1YWxzIHggbnVsbCkgdGhlbiBmIHhcblxuICAgIGxldCBjYXNlIHggZiBnID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIGYgKCkgZWxzZSBnIHhcblxuICAgIGxldCBnZXQgeCBmID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIGYgKCkgZWxzZSB4XG5cbiAgICBsZXQgb3B0aW9uIHggPVxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gZW1wdHlcbiAgICAgIHwgU29tZSB4IC0+IHJldHVybiB4XG5cbiAgICBsZXQgdG9fb3B0aW9uIHggPSBjYXNlIHggKGZ1biAoKSAtPiBOb25lKSAoZnVuIHggLT4gU29tZSB4KVxuICBlbmRcblxuICBtb2R1bGUgT3B0ZGVmIDogT1BUIHdpdGggdHlwZSAnYSB0ID0gJ2Egb3B0ZGVmID0gc3RydWN0XG4gICAgdHlwZSAnYSB0ID0gJ2Egb3B0ZGVmXG5cbiAgICBsZXQgZW1wdHkgPSB1bmRlZmluZWRcblxuICAgIGxldCByZXR1cm4gPSBkZWZcblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAgIGxldCBtYXAgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIHVuZGVmaW5lZCBlbHNlIHJldHVybiAoZiB4KVxuXG4gICAgbGV0IGJpbmQgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIHVuZGVmaW5lZCBlbHNlIGYgeFxuXG4gICAgbGV0IHRlc3QgeCA9IG5vdCAoc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZClcblxuICAgIGxldCBpdGVyIHggZiA9IGlmIG5vdCAoc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCkgdGhlbiBmIHhcblxuICAgIGxldCBjYXNlIHggZiBnID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIGYgKCkgZWxzZSBnIHhcblxuICAgIGxldCBnZXQgeCBmID0gaWYgc3RyaWN0X2VxdWFscyB4IHVuZGVmaW5lZCB0aGVuIGYgKCkgZWxzZSB4XG5cbiAgICBsZXQgb3B0aW9uIHggPVxuICAgICAgbWF0Y2ggeCB3aXRoXG4gICAgICB8IE5vbmUgLT4gZW1wdHlcbiAgICAgIHwgU29tZSB4IC0+IHJldHVybiB4XG5cbiAgICBsZXQgdG9fb3B0aW9uIHggPSBjYXNlIHggKGZ1biAoKSAtPiBOb25lKSAoZnVuIHggLT4gU29tZSB4KVxuICBlbmRcblxuICAoKioqKilcblxuICBsZXQgY29lcmNlIHggZiBnID0gT3B0LmdldCAoZiB4KSAoZnVuICgpIC0+IGcgeClcblxuICBsZXQgY29lcmNlX29wdCB4IGYgZyA9IE9wdC5nZXQgKE9wdC5iaW5kIHggZikgKGZ1biAoKSAtPiBnIHgpXG5cbiAgKCoqKiopXG5cbiAgdHlwZSArJ2EgbWV0aFxuXG4gIHR5cGUgKydhIGdlbl9wcm9wXG5cbiAgdHlwZSAnYSByZWFkb25seV9wcm9wID0gPCBnZXQgOiAnYSA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSB3cml0ZW9ubHlfcHJvcCA9IDwgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSBwcm9wID0gPCBnZXQgOiAnYSA7IHNldCA6ICdhIC0+IHVuaXQgPiBnZW5fcHJvcFxuXG4gIHR5cGUgJ2Egb3B0ZGVmX3Byb3AgPSA8IGdldCA6ICdhIG9wdGRlZiA7IHNldCA6ICdhIC0+IHVuaXQgPiBnZW5fcHJvcFxuXG4gIHR5cGUgKydhIGNvbnN0clxuXG4gICgqKioqKVxuXG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAodW5pdCwgJ2EpIG1ldGhfY2FsbGJhY2tcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcblxuICAoKioqKilcblxuICBleHRlcm5hbCBlcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICgqKioqKVxuXG4gIGxldCBfdHJ1ZSA9IFVuc2FmZS5wdXJlX2pzX2V4cHIgXCJ0cnVlXCJcblxuICBsZXQgX2ZhbHNlID0gVW5zYWZlLnB1cmVfanNfZXhwciBcImZhbHNlXCJcblxuICB0eXBlIG1hdGNoX3Jlc3VsdF9oYW5kbGVcblxuICB0eXBlIHN0cmluZ19hcnJheVxuXG4gIGNsYXNzIHR5cGUgbnVtYmVyID0gb2JqZWN0XG4gICAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvU3RyaW5nX3JhZGl4IDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0ZpeGVkIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0V4cG9uZW50aWFsIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRXhwb25lbnRpYWxfZGlnaXRzIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1ByZWNpc2lvbiA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG4gIGVuZFxuXG4gIGFuZCBqc19zdHJpbmcgPSBvYmplY3RcbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdmFsdWVPZiA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjaGFyQXQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNoYXJDb2RlQXQgOiBpbnQgLT4gbnVtYmVyIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvZGVQb2ludEF0IDogaW50IC0+IG51bWJlciB0IG9wdGRlZiBtZXRoXG5cbiAgICAoKiBUaGlzIG1heSByZXR1cm4gTmFOLi4uICopXG4gICAgbWV0aG9kIGNvbmNhdCA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfMiA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfMyA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBjb25jYXRfNCA6XG4gICAgICBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgaW5kZXhPZiA6IGpzX3N0cmluZyB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgaW5kZXhPZl9mcm9tIDoganNfc3RyaW5nIHQgLT4gaW50IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgbGFzdEluZGV4T2YgOiBqc19zdHJpbmcgdCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGxhc3RJbmRleE9mX2Zyb20gOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBsb2NhbGVDb21wYXJlIDoganNfc3RyaW5nIHQgLT4gbnVtYmVyIHQgbWV0aFxuXG4gICAgbWV0aG9kIF9tYXRjaCA6IHJlZ0V4cCB0IC0+IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCBvcHQgbWV0aFxuXG4gICAgbWV0aG9kIG5vcm1hbGl6ZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBub3JtYWxpemVfZm9ybSA6IG5vcm1hbGl6YXRpb24gdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgcmVwbGFjZSA6IHJlZ0V4cCB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCByZXBsYWNlX3N0cmluZyA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzZWFyY2ggOiByZWdFeHAgdCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIHNsaWNlIDogaW50IC0+IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc2xpY2VfZW5kIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdCA6IGpzX3N0cmluZyB0IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9saW1pdGVkIDoganNfc3RyaW5nIHQgLT4gaW50IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9yZWdFeHAgOiByZWdFeHAgdCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3BsaXRfcmVnRXhwTGltaXRlZCA6IHJlZ0V4cCB0IC0+IGludCAtPiBzdHJpbmdfYXJyYXkgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3Vic3RyaW5nIDogaW50IC0+IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc3Vic3RyaW5nX3RvRW5kIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvd2VyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZUxvd2VyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b1VwcGVyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0b0xvY2FsZVVwcGVyQ2FzZSA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB0cmltIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGxlbmd0aCA6IGludCByZWFkb25seV9wcm9wXG4gIGVuZFxuXG4gIGFuZCByZWdFeHAgPSBvYmplY3RcbiAgICBtZXRob2QgZXhlYyA6IGpzX3N0cmluZyB0IC0+IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCBvcHQgbWV0aFxuXG4gICAgbWV0aG9kIHRlc3QgOiBqc19zdHJpbmcgdCAtPiBib29sIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNvdXJjZSA6IGpzX3N0cmluZyB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBnbG9iYWwgOiBib29sIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIGlnbm9yZUNhc2UgOiBib29sIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIG11bHRpbGluZSA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgbGFzdEluZGV4IDogaW50IHByb3BcbiAgZW5kXG5cbiAgYW5kIG5vcm1hbGl6YXRpb24gPSBqc19zdHJpbmdcblxuICB0eXBlIG51bWJlcl90ID0gbnVtYmVyIHRcblxuICAoKiBzdHJpbmcgaXMgdXNlZCBieSBwcHhfanMsIGl0IG5lZWRzIHRvIGNvbWUgYmVmb3JlIGFueSB1c2Ugb2YgdGhlXG4gICAgIG5ldyBzeW50YXggaW4gdGhpcyBmaWxlICopXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiBqc19zdHJpbmcgdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IGpzX3N0cmluZyB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGxldCBuZmMgPSBzdHJpbmcgXCJORkNcIlxuXG4gIGxldCBuZmQgPSBzdHJpbmcgXCJORkRcIlxuXG4gIGxldCBuZmtjID0gc3RyaW5nIFwiTkZLQ1wiXG5cbiAgbGV0IG5ma2QgPSBzdHJpbmcgXCJORktEXCJcbmVuZFxuXG5pbmNsdWRlIEpzXG5cbmNsYXNzIHR5cGUgc3RyaW5nX2NvbnN0ciA9IG9iamVjdFxuICBtZXRob2QgZnJvbUNoYXJDb2RlIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5sZXQgc3RyaW5nX2NvbnN0ciA9IFVuc2FmZS5nbG9iYWwjIy5fU3RyaW5nXG5cbmxldCByZWdFeHAgPSBVbnNhZmUuZ2xvYmFsIyMuX1JlZ0V4cFxuXG5sZXQgcmVnRXhwX2NvcHkgPSByZWdFeHBcblxubGV0IHJlZ0V4cF93aXRoRmxhZ3MgPSByZWdFeHBcblxuY2xhc3MgdHlwZSBbJ2FdIGpzX2FycmF5ID0gb2JqZWN0XG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIGNvbmNhdCA6ICdhIGpzX2FycmF5IHQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIGpvaW4gOiBqc19zdHJpbmcgdCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHBvcCA6ICdhIG9wdGRlZiBtZXRoXG5cbiAgbWV0aG9kIHB1c2ggOiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzIgOiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzMgOiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBwdXNoXzQgOiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCByZXZlcnNlIDogJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNoaWZ0IDogJ2Egb3B0ZGVmIG1ldGhcblxuICBtZXRob2Qgc2xpY2UgOiBpbnQgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzbGljZV9lbmQgOiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNvcnQgOiAoJ2EgLT4gJ2EgLT4gbnVtYmVyX3QpIGNhbGxiYWNrIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzb3J0X2FzU3RyaW5ncyA6ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2UgOiBpbnQgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfMSA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV8yIDogaW50IC0+IGludCAtPiAnYSAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzMgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfNCA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnQgOiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzIgOiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzMgOiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCB1bnNoaWZ0XzQgOiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBzb21lIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IGJvb2wgdCkgY2FsbGJhY2sgLT4gYm9vbCB0IG1ldGhcblxuICBtZXRob2QgZXZlcnkgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiBib29sIHQgbWV0aFxuXG4gIG1ldGhvZCBmb3JFYWNoIDogKCdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXQgbWV0aFxuXG4gIG1ldGhvZCBtYXAgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBmaWx0ZXIgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2QgcmVkdWNlX2luaXQgOiAoJ2IgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiIC0+ICdiIG1ldGhcblxuICBtZXRob2QgcmVkdWNlIDogKCdhIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdhKSBjYWxsYmFjayAtPiAnYSBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZVJpZ2h0X2luaXQgOlxuICAgICgnYiAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgLT4gJ2IgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2VSaWdodCA6ICgnYSAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYSkgY2FsbGJhY2sgLT4gJ2EgbWV0aFxuXG4gIG1ldGhvZCBsZW5ndGggOiBpbnQgcHJvcFxuZW5kXG5cbmxldCBvYmplY3RfY29uc3RydWN0b3IgPSBVbnNhZmUuZ2xvYmFsIyMuX09iamVjdFxuXG5sZXQgb2JqZWN0X2tleXMgbyA6IGpzX3N0cmluZyB0IGpzX2FycmF5IHQgPSBvYmplY3RfY29uc3RydWN0b3IjI2tleXMgb1xuXG5sZXQgYXJyYXlfY29uc3RydWN0b3IgPSBVbnNhZmUuZ2xvYmFsIyMuX0FycmF5XG5cbmxldCBhcnJheV9lbXB0eSA9IGFycmF5X2NvbnN0cnVjdG9yXG5cbmxldCBhcnJheV9sZW5ndGggPSBhcnJheV9jb25zdHJ1Y3RvclxuXG5sZXQgYXJyYXlfZ2V0IDogJ2EgI2pzX2FycmF5IHQgLT4gaW50IC0+ICdhIG9wdGRlZiA9IFVuc2FmZS5nZXRcblxubGV0IGFycmF5X3NldCA6ICdhICNqc19hcnJheSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gVW5zYWZlLnNldFxuXG5sZXQgYXJyYXlfbWFwX3BvbHkgOlxuICAgICdhICNqc19hcnJheSB0IC0+ICgnYSAtPiBpbnQgLT4gJ2EgI2pzX2FycmF5IHQgLT4gJ2IpIGNhbGxiYWNrIC0+ICdiICNqc19hcnJheSB0ID1cbiBmdW4gYSBjYiAtPiAoVW5zYWZlLmNvZXJjZSBhKSMjbWFwIGNiXG5cbmxldCBhcnJheV9tYXAgZiBhID0gYXJyYXlfbWFwX3BvbHkgYSAod3JhcF9jYWxsYmFjayAoZnVuIHggX2lkeCBfIC0+IGYgeCkpXG5cbmxldCBhcnJheV9tYXBpIGYgYSA9IGFycmF5X21hcF9wb2x5IGEgKHdyYXBfY2FsbGJhY2sgKGZ1biB4IGlkeCBfIC0+IGYgaWR4IHgpKVxuXG5jbGFzcyB0eXBlIG1hdGNoX3Jlc3VsdCA9IG9iamVjdFxuICBpbmhlcml0IFtqc19zdHJpbmcgdF0ganNfYXJyYXlcblxuICBtZXRob2QgaW5kZXggOiBpbnQgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBpbnB1dCA6IGpzX3N0cmluZyB0IHJlYWRvbmx5X3Byb3BcbmVuZFxuXG5sZXQgc3RyX2FycmF5IDogc3RyaW5nX2FycmF5IHQgLT4ganNfc3RyaW5nIHQganNfYXJyYXkgdCA9IFVuc2FmZS5jb2VyY2VcblxubGV0IG1hdGNoX3Jlc3VsdCA6IG1hdGNoX3Jlc3VsdF9oYW5kbGUgdCAtPiBtYXRjaF9yZXN1bHQgdCA9IFVuc2FmZS5jb2VyY2VcblxuY2xhc3MgdHlwZSBkYXRlID0gb2JqZWN0XG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9EYXRlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b1RpbWVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZURhdGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlVGltZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdmFsdWVPZiA6IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZ2V0VGltZSA6IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZ2V0RnVsbFllYXIgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENGdWxsWWVhciA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldE1vbnRoIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTW9udGggOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXREYXRlIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDRGF0ZSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldERheSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0RheSA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldEhvdXJzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDSG91cnMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRNaW51dGVzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTWludXRlcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENTZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0TWlsbGlzZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDTWlsbGlzZWNvbmRzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VGltZXpvbmVPZmZzZXQgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBzZXRUaW1lIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRGdWxsWWVhciA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0Z1bGxZZWFyIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0TW9udGggOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNb250aCA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldERhdGUgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENEYXRlIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0SG91cnMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENIb3VycyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldE1pbnV0ZXMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNaW51dGVzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0U2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ1NlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRNaWxsaXNlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRVVENNaWxsaXNlY29uZHMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCB0b1VUQ1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9JU09TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvSlNPTiA6ICdhIC0+IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5jbGFzcyB0eXBlIGRhdGVfY29uc3RyID0gb2JqZWN0XG4gIG1ldGhvZCBwYXJzZSA6IGpzX3N0cmluZyB0IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19tb250aCA6IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX2RheSA6IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX2hvdXIgOiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21pbiA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX3NlYyA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgX1VUQ19tcyA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG5vdyA6IG51bWJlcl90IG1ldGhcbmVuZFxuXG5sZXQgZGF0ZV9jb25zdHIgPSBVbnNhZmUuZ2xvYmFsIyMuX0RhdGVcblxubGV0IGRhdGUgOiBkYXRlX2NvbnN0ciB0ID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbm93IDogZGF0ZSB0IGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX2Zyb21UaW1lVmFsdWUgOiAobnVtYmVyX3QgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9tb250aCA6IChpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfZGF5IDogKGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfaG91ciA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9taW4gOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX3NlYyA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21zIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9XG4gIGRhdGVfY29uc3RyXG5cbmNsYXNzIHR5cGUgbWF0aCA9IG9iamVjdFxuICBtZXRob2QgX0UgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MTjIgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MTjEwIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfTE9HMkUgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MT0cxMEUgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9QSSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX1NRUlQxXzJfIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfU1FSVDIgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIGFicyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYWNvcyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXNpbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXRhbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgYXRhbjIgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGNlaWwgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGNvcyA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgZXhwIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBmbG9vciA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbG9nIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtYXggOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heF8zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtYXhfNCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWluIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW5fMyA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWluXzQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHBvdyA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgcmFuZG9tIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCByb3VuZCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2luIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzcXJ0IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCB0YW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5lbmRcblxubGV0IG1hdGggPSBVbnNhZmUuZ2xvYmFsIyMuX01hdGhcblxuY2xhc3MgdHlwZSBlcnJvciA9IG9iamVjdFxuICBtZXRob2QgbmFtZSA6IGpzX3N0cmluZyB0IHByb3BcblxuICBtZXRob2QgbWVzc2FnZSA6IGpzX3N0cmluZyB0IHByb3BcblxuICBtZXRob2Qgc3RhY2sgOiBqc19zdHJpbmcgdCBvcHRkZWYgcHJvcFxuXG4gIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcbmVuZFxuXG5sZXQgZXJyb3JfY29uc3RyID0gVW5zYWZlLmdsb2JhbCMjLl9FcnJvclxuXG5tb2R1bGUgSnNfZXJyb3IgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvcl90ID0gZXJyb3IgdFxuXG4gIGluY2x1ZGUgSnNvb19ydW50aW1lLkVycm9yXG5cbiAgZXh0ZXJuYWwgb2ZfZXJyb3IgOiBlcnJvcl90IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgZXh0ZXJuYWwgdG9fZXJyb3IgOiB0IC0+IGVycm9yX3QgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IG5hbWUgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjIy5uYW1lXG5cbiAgbGV0IG1lc3NhZ2UgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjIy5tZXNzYWdlXG5cbiAgbGV0IHN0YWNrIChlIDogdCkgOiBzdHJpbmcgb3B0aW9uID1cbiAgICBPcHQudG9fb3B0aW9uIChPcHQubWFwICh0b19lcnJvciBlKSMjLnN0YWNrIHRvX3N0cmluZylcblxuICBsZXQgdG9fc3RyaW5nIGUgPSB0b19zdHJpbmcgKHRvX2Vycm9yIGUpIyN0b1N0cmluZ1xuZW5kXG5cbm1vZHVsZSBNYWdpYyA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBUID0gc2lnXG4gICAgZXhjZXB0aW9uIEVycm9yIG9mIGVycm9yIHRcbiAgZW5kXG5cbiAgdHlwZSAoJ2EsICdiKSBlcSA9IEVxIDogKCdhLCAnYSkgZXFcblxuICBsZXQgKGVxIDogKGVycm9yIHQsIEpzX2Vycm9yLnQpIGVxKSA9IE9iai5tYWdpYyBFcVxuXG4gIGxldCBtID1cbiAgICBtYXRjaCBlcSB3aXRoXG4gICAgfCBFcSAtPlxuICAgICAgICAobW9kdWxlIHN0cnVjdFxuICAgICAgICAgIGV4Y2VwdGlvbiBFcnJvciA9IEpzX2Vycm9yLkV4blxuICAgICAgICBlbmQgOiBUKVxuXG4gIG1vZHVsZSBFcnJvciA9ICh2YWwgbSA6IFQpXG5lbmRcblxuaW5jbHVkZSBNYWdpYy5FcnJvclxuXG5sZXQgcmFpc2VfanNfZXJyb3IgZSA9IEpzX2Vycm9yLnJhaXNlXyAoSnNfZXJyb3Iub2ZfZXJyb3IgZSlcblxubGV0IHN0cmluZ19vZl9lcnJvciBlID0gSnNfZXJyb3IudG9fc3RyaW5nIChKc19lcnJvci5vZl9lcnJvciBlKVxuXG5sZXQgZXhuX3dpdGhfanNfYmFja3RyYWNlID0gSnNfZXJyb3IuYXR0YWNoX2pzX2JhY2t0cmFjZVxuXG5leHRlcm5hbCBqc19lcnJvcl9vZl9leG4gOiBleG4gLT4gZXJyb3IgdCBvcHQgPSBcImNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uXCJcblxuY2xhc3MgdHlwZSBqc29uID0gb2JqZWN0XG4gIG1ldGhvZCBwYXJzZSA6IGpzX3N0cmluZyB0IC0+ICdhIG1ldGhcblxuICBtZXRob2Qgc3RyaW5naWZ5IDogJ2EgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBfSlNPTiA6IGpzb24gdCA9IFVuc2FmZS5nbG9iYWwjIy5fSlNPTlxuXG5sZXQgZGVjb2RlVVJJIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmRlY29kZVVSSSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGRlY29kZVVSSUNvbXBvbmVudCAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5kZWNvZGVVUklDb21wb25lbnQgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBlbmNvZGVVUkkgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZW5jb2RlVVJJIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZW5jb2RlVVJJQ29tcG9uZW50IChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmVuY29kZVVSSUNvbXBvbmVudCBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGVzY2FwZSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5lc2NhcGUgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCB1bmVzY2FwZSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy51bmVzY2FwZSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxuZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gYm9vbCB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbmV4dGVybmFsIHRvX2Jvb2wgOiBib29sIHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiAnYSBqc19hcnJheSB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG5leHRlcm5hbCB0b19hcnJheSA6ICdhIGpzX2FycmF5IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG5leHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IGpzX3N0cmluZyB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbmV4dGVybmFsIGZsb2F0IDogZmxvYXQgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbmV4dGVybmFsIHRvX2Zsb2F0IDogbnVtYmVyX3QgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG5leHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiBudW1iZXIgdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogbnVtYmVyIHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG5leHRlcm5hbCBpbnQzMiA6IGludDMyIC0+IG51bWJlcl90ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG5leHRlcm5hbCB0b19pbnQzMiA6IG51bWJlcl90IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuZXh0ZXJuYWwgbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IG51bWJlcl90ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuZXh0ZXJuYWwgdG9fbmF0aXZlaW50IDogbnVtYmVyX3QgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbmV4dGVybmFsIHR5cGVvZiA6IF8gdCAtPiBqc19zdHJpbmcgdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG5leHRlcm5hbCBpbnN0YW5jZW9mIDogXyB0IC0+IF8gY29uc3RyIC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbmxldCBpc05hTiAoaSA6ICdhKSA6IGJvb2wgPVxuICB0b19ib29sIChVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmlzTmFOIFt8IFVuc2FmZS5pbmplY3QgaSB8XSlcblxubGV0IHBhcnNlSW50IChzIDoganNfc3RyaW5nIHQpIDogaW50ID1cbiAgbGV0IHMgPSBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnBhcnNlSW50IFt8IFVuc2FmZS5pbmplY3QgcyB8XSBpblxuICBpZiBpc05hTiBzIHRoZW4gZmFpbHdpdGggXCJwYXJzZUludFwiIGVsc2Ugc1xuXG5sZXQgcGFyc2VGbG9hdCAocyA6IGpzX3N0cmluZyB0KSA6IG51bWJlcl90ID1cbiAgbGV0IHMgPSBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnBhcnNlRmxvYXQgW3wgVW5zYWZlLmluamVjdCBzIHxdIGluXG4gIGlmIGlzTmFOIHMgdGhlbiBmYWlsd2l0aCBcInBhcnNlRmxvYXRcIiBlbHNlIHNcblxubGV0IF8gPVxuICBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIChmdW4gZSAtPlxuICAgICAgaWYgaW5zdGFuY2VvZiAoT2JqLm1hZ2ljIGUgOiA8IC4uID4gdCkgZXJyb3JfY29uc3RyXG4gICAgICB0aGVuXG4gICAgICAgIGxldCBlID0gSnNfZXJyb3Iub2ZfZXJyb3IgKE9iai5tYWdpYyBlIDogZXJyb3IgdCkgaW5cbiAgICAgICAgU29tZSAoSnNfZXJyb3IudG9fc3RyaW5nIGUpXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGUgd2l0aFxuICAgICAgICB8IEpzX2Vycm9yLkV4biBlIC0+IFNvbWUgKEpzX2Vycm9yLnRvX3N0cmluZyBlKVxuICAgICAgICB8IF8gLT4gTm9uZSlcblxubGV0IGV4cG9ydF9qcyAoZmllbGQgOiBqc19zdHJpbmcgdCkgeCA9XG4gIFVuc2FmZS5zZXRcbiAgICAoVW5zYWZlLnB1cmVfanNfZXhwciBcImpzb29fZXhwb3J0c1wiKVxuICAgIGZpZWxkXG4gICAgKGlmXG4gICAgICAgU3RyaW5nLmVxdWFsIChKcy50b19zdHJpbmcgKHR5cGVvZiAoT2JqLm1hZ2ljIHgpKSkgXCJmdW5jdGlvblwiXG4gICAgICAgKCogZnVuY3Rpb24gd2l0aCBhcml0eS9sZW5ndGggZXF1YWwgdG8gemVybyBhcmUgYWxyZWFkeSB3cmFwcGVkICopXG4gICAgICAgJiYgVW5zYWZlLmdldCAoT2JqLm1hZ2ljIHgpIChKcy5zdHJpbmcgXCJsZW5ndGhcIikgPiAwXG4gICAgIHRoZW4gT2JqLm1hZ2ljICh3cmFwX2NhbGxiYWNrIChPYmoubWFnaWMgeCkpXG4gICAgIGVsc2UgeClcblxubGV0IGV4cG9ydCBmaWVsZCB4ID0gZXhwb3J0X2pzIChzdHJpbmcgZmllbGQpIHhcblxubGV0IGV4cG9ydF9hbGwgb2JqID1cbiAgbGV0IGtleXMgPSBvYmplY3Rfa2V5cyBvYmogaW5cbiAga2V5cyMjZm9yRWFjaFxuICAgICh3cmFwX2NhbGxiYWNrIChmdW4gKGtleSA6IGpzX3N0cmluZyB0KSBfIF8gLT4gZXhwb3J0X2pzIGtleSAoVW5zYWZlLmdldCBvYmoga2V5KSkpXG5cbigqKioqKVxuXG4oKiBERVBSRUNBVEVEICopXG5cbnR5cGUgZmxvYXRfcHJvcCA9IG51bWJlcl90IHByb3BcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9qc19nZXQiLCJjYW1sX2pzX3NldCIsImNhbWxfanNfd3JhcF9jYWxsYmFjayIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiSnNfb2Zfb2NhbWxfSW1wb3J0IiwiU3RkbGliIiwiSnNvb19ydW50aW1lIiwiU3RkbGliX1ByaW50ZXhjIiwiZ2xvYmFsIiwibnVsbCQiLCJ1bmRlZmluZWQkIiwicmV0dXJuJCIsIm1hcCIsIngiLCJiaW5kIiwidGVzdCIsIml0ZXIiLCJjYXNlJCIsImciLCJnZXQiLCJvcHRpb24iLCJ0b19vcHRpb24iLCJjb2VyY2UiLCJjb2VyY2Vfb3B0Iiwic3RyaW5nX2NvbnN0ciIsInJlZ0V4cCIsIm9iamVjdF9jb25zdHJ1Y3RvciIsIm9iamVjdF9rZXlzIiwidDQiLCJhcnJheV9jb25zdHJ1Y3RvciIsImFycmF5X21hcCIsInQ2IiwiY2IiLCJpZHgiLCJwYXJhbSIsImFycmF5X21hcGkiLCJzdHJfYXJyYXkiLCJtYXRjaF9yZXN1bHQiLCJkYXRlX2NvbnN0ciIsIm1hdGgiLCJlcnJvcl9jb25zdHIiLCJpbmNsdWRlIiwicmFpc2UiLCJleG5fd2l0aF9qc19iYWNrdHJhY2UiLCJvZl9leG4iLCJFcnJvciIsIm5hbWUiLCJ0MTEiLCJtZXNzYWdlIiwidDEyIiwic3RhY2siLCJ0MTMiLCJ0b19zdHJpbmciLCJ0MTQiLCJyYWlzZV9qc19lcnJvciIsImUiLCJzdHJpbmdfb2ZfZXJyb3IiLCJKU09OIiwiZGVjb2RlVVJJIiwicyIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsInVuZXNjYXBlIiwiaXNOYU4iLCJpIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0IiwiZXhwb3J0X2pzIiwiZmllbGQiLCJleHBvcnQkIiwiZXhwb3J0X2FsbCIsIm9iaiIsImtleXMiLCJ0MjYiLCJrZXkiLCJKc19vZl9vY2FtbF9KcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxZQUFB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QUEsbUJEdnpCcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDdXpCb0I7QUFBQTtBQUFBLEVEdnpCcEIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjo0MDAyMywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL2R1bmVfX2V4ZV9fU3hfYnJvd3Nlci5jbW8uanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jyb3dzZXIvc3hfYnJvd3Nlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBzeF9icm93c2VyLm1sIOKAlCBPQ2FtbCBTWCBrZXJuZWwgY29tcGlsZWQgdG8gV0FTTS9KUyBmb3IgYnJvd3NlciB1c2UuXG5cbiAgICBFeHBvc2VzIHRoZSBDRUsgbWFjaGluZSwgYnl0ZWNvZGUgVk0sIHBhcnNlciwgYW5kIHByaW1pdGl2ZXMgYXMgYVxuICAgIGdsb2JhbCBbU3hLZXJuZWxdIG9iamVjdCB0aGF0IHRoZSBKUyBwbGF0Zm9ybSBsYXllciBiaW5kcyB0by5cblxuICAgIEZyZXNoIGltcGxlbWVudGF0aW9uIG9uIHRoZSBvY2FtbC12bSBicmFuY2gg4oCUIGJ1aWxkcyBvbiB0aGUgYnl0ZWNvZGVcbiAgICBWTSArIGxhenkgSklUIGluZnJhc3RydWN0dXJlLiAqKVxuXG5vcGVuIEpzX29mX29jYW1sXG5vcGVuIFN4X3R5cGVzXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogT3BhcXVlIHZhbHVlIGhhbmRsZSB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogTm9uLXByaW1pdGl2ZSBTWCB2YWx1ZXMgKGxhbWJkYXMsIGNvbXBvbmVudHMsIHNpZ25hbHMsIGV0Yy4pIGFyZSAgICAqKVxuKCogc3RvcmVkIGhlcmUgYW5kIHJlcHJlc2VudGVkIG9uIHRoZSBKUyBzaWRlIGFzIG9iamVjdHMgd2l0aCBhbiAgICAgICAqKVxuKCogX19zeF9oYW5kbGUgaW50ZWdlciBrZXkuICBQcmVzZXJ2ZXMgaWRlbnRpdHkgYWNyb3NzIEpT4oaUT0NhbWwuICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgX25leHRfaGFuZGxlID0gcmVmIDBcbmxldCBfaGFuZGxlX3RhYmxlIDogKGludCwgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDI1NlxuXG5sZXQgYWxsb2NfaGFuZGxlICh2IDogdmFsdWUpIDogaW50ID1cbiAgbGV0IGlkID0gIV9uZXh0X2hhbmRsZSBpblxuICBpbmNyIF9uZXh0X2hhbmRsZTtcbiAgSGFzaHRibC5yZXBsYWNlIF9oYW5kbGVfdGFibGUgaWQgdjtcbiAgaWRcblxubGV0IGdldF9oYW5kbGUgKGlkIDogaW50KSA6IHZhbHVlID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfaGFuZGxlX3RhYmxlIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiSW52YWxpZCBTWCBoYW5kbGU6ICVkXCIgaWQpKVxuXG4oKiBKUy1zaWRlIG9wYXF1ZSBob3N0IG9iamVjdCB0YWJsZS5cbiAgIEhvc3Qgb2JqZWN0cyAoRE9NIGVsZW1lbnRzLCBjb25zb2xlLCBldGMuKSBhcmUgc3RvcmVkIGhlcmUgdG8gcHJlc2VydmVcbiAgIGlkZW50aXR5IGFjcm9zcyB0aGUgT0NhbWzihpRKUyBib3VuZGFyeS4gUmVwcmVzZW50ZWQgYXMgRGljdCB3aXRoXG4gICBfX2hvc3RfaGFuZGxlIGtleSBvbiB0aGUgT0NhbWwgc2lkZS4gKilcbmxldCBfbmV4dF9ob3N0X2hhbmRsZSA9IHJlZiAwXG5sZXQgX2FsbG9jX2hvc3RfaGFuZGxlID0gSnMuVW5zYWZlLnB1cmVfanNfZXhwclxuICBcIihmdW5jdGlvbigpIHsgdmFyIHQgPSB7fTsgdmFyIG4gPSAwOyByZXR1cm4geyBwdXQ6IGZ1bmN0aW9uKG9iaikgeyB2YXIgaWQgPSBuKys7IHRbaWRdID0gb2JqOyByZXR1cm4gaWQ7IH0sIGdldDogZnVuY3Rpb24oaWQpIHsgcmV0dXJuIHRbaWRdOyB9IH07IH0pKClcIlxubGV0IGhvc3RfcHV0IChvYmogOiBKcy5VbnNhZmUuYW55KSA6IGludCA9XG4gIGxldCBpZCA9ICFfbmV4dF9ob3N0X2hhbmRsZSBpblxuICBpbmNyIF9uZXh0X2hvc3RfaGFuZGxlO1xuICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGwgX2FsbG9jX2hvc3RfaGFuZGxlIFwicHV0XCIgW3wgb2JqIHxdKTtcbiAgaWRcbmxldCBob3N0X2dldF9qcyAoaWQgOiBpbnQpIDogSnMuVW5zYWZlLmFueSA9XG4gIEpzLlVuc2FmZS5tZXRoX2NhbGwgX2FsbG9jX2hvc3RfaGFuZGxlIFwiZ2V0XCIgW3wgSnMuVW5zYWZlLmluamVjdCBpZCB8XVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEdsb2JhbCBlbnZpcm9ubWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiBGb3JjZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24g4oCUIHRoZXNlIG1vZHVsZXMgcmVnaXN0ZXIgcHJpbWl0aXZlc1xuICAgaW4gdGhlaXIgbGV0ICgpID0gLi4uIGJsb2NrcyBidXQgYXJlbid0IHJlZmVyZW5jZWQgZGlyZWN0bHkuICopXG5sZXQgKCkgPSBTeF9zY29wZS5jbGVhcl9hbGwgKClcblxubGV0IGdsb2JhbF9lbnYgPSBtYWtlX2VudiAoKVxubGV0IF9zeF9yZW5kZXJfbW9kZSA9IHJlZiBmYWxzZVxuXG5sZXQgY2FsbF9zeF9mbiAoZm4gOiB2YWx1ZSkgKGFyZ3MgOiB2YWx1ZSBsaXN0KSA6IHZhbHVlID1cbiAgbGV0IHJlc3VsdCA9IFN4X3J1bnRpbWUuc3hfY2FsbCBmbiBhcmdzIGluXG4gICFTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIHJlc3VsdFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFZhbHVlIGNvbnZlcnNpb246IE9DYW1sIDwtPiBKUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogVGFnIGEgSlMgZnVuY3Rpb24gd2l0aCBfX3N4X2hhbmRsZSBhbmQgX3R5cGUgcHJvcGVydGllcy4gKilcbmxldCBfdGFnX2ZuID0gSnMuVW5zYWZlLnB1cmVfanNfZXhwclxuICBcIihmdW5jdGlvbihmbiwgaGFuZGxlLCB0eXBlKSB7IGZuLl9fc3hfaGFuZGxlID0gaGFuZGxlOyBmbi5fdHlwZSA9IHR5cGU7IHJldHVybiBmbjsgfSlcIlxuXG5sZXQgcmVjIHZhbHVlX3RvX2pzICh2IDogdmFsdWUpIDogSnMuVW5zYWZlLmFueSA9XG4gIG1hdGNoIHYgd2l0aFxuICB8IE5pbCAtPiBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcbiAgfCBCb29sIGIgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCBiKVxuICB8IE51bWJlciBuIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCBuKVxuICB8IFN0cmluZyBzIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKVxuICB8IFJhd0hUTUwgcyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgcylcbiAgfCBTeW1ib2wgcyAtPlxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLlVuc2FmZS5vYmogW3xcbiAgICAgIChcIl90eXBlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcInN5bWJvbFwiKSk7XG4gICAgICAoXCJuYW1lXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKSkgfF0pXG4gIHwgS2V5d29yZCBrIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwia2V5d29yZFwiKSk7XG4gICAgICAoXCJuYW1lXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBrKSkgfF0pXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT5cbiAgICBsZXQgYXJyID0gaXRlbXMgfD4gTGlzdC5tYXAgdmFsdWVfdG9fanMgfD4gQXJyYXkub2ZfbGlzdCBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLlVuc2FmZS5vYmogW3xcbiAgICAgIChcIl90eXBlXCIsIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcImxpc3RcIikpO1xuICAgICAgKFwiaXRlbXNcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkgYXJyKSkgfF0pXG4gIHwgRGljdCBkIC0+XG4gICAgKCogQ2hlY2sgZm9yIF9faG9zdF9oYW5kbGUg4oCUIHJldHVybiBvcmlnaW5hbCBKUyBvYmplY3QgKilcbiAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiX19ob3N0X2hhbmRsZVwiIHdpdGhcbiAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaG9zdF9nZXRfanMgKGludF9vZl9mbG9hdCBuKVxuICAgICB8IF8gLT5cbiAgICAgICBsZXQgb2JqID0gSnMuVW5zYWZlLm9iaiBbfHxdIGluXG4gICAgICAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBcIl90eXBlXCIpIChKcy5zdHJpbmcgXCJkaWN0XCIpO1xuICAgICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPlxuICAgICAgICAgSnMuVW5zYWZlLnNldCBvYmogKEpzLnN0cmluZyBrKSAodmFsdWVfdG9fanMgdikpIGQ7XG4gICAgICAgSnMuVW5zYWZlLmluamVjdCBvYmopXG4gICgqIENhbGxhYmxlIHZhbHVlczogd3JhcCBhcyBKUyBmdW5jdGlvbnMgd2l0aCBfX3N4X2hhbmRsZSAqKVxuICB8IExhbWJkYSBfIHwgTmF0aXZlRm4gXyB8IENvbnRpbnVhdGlvbiBfIHwgVm1DbG9zdXJlIF8gLT5cbiAgICBsZXQgaGFuZGxlID0gYWxsb2NfaGFuZGxlIHYgaW5cbiAgICBsZXQgaW5uZXIgPSBKcy53cmFwX2NhbGxiYWNrIChmdW4gYXJnc19qcyAtPlxuICAgICAgdHJ5XG4gICAgICAgIGxldCBhcmcgPSBqc190b192YWx1ZSBhcmdzX2pzIGluXG4gICAgICAgIGxldCBhcmdzID0gbWF0Y2ggYXJnIHdpdGggTmlsIC0+IFtdIHwgXyAtPiBbYXJnXSBpblxuICAgICAgICBsZXQgcmVzdWx0ID0gY2FsbF9zeF9mbiB2IGFyZ3MgaW5cbiAgICAgICAgdmFsdWVfdG9fanMgcmVzdWx0XG4gICAgICB3aXRoXG4gICAgICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgIGxldCBmbl9pbmZvID0gUHJpbnRmLnNwcmludGYgXCIgW2NhbGxiYWNrICVzIGhhbmRsZT0lZF1cIiAodHlwZV9vZiB2KSBoYW5kbGUgaW5cbiAgICAgICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAgICAgKEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiY29uc29sZVwiKSlcbiAgICAgICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gXCIgXiBtc2cgXiBmbl9pbmZvKSkgfF0pO1xuICAgICAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcbiAgICAgIHwgZXhuIC0+XG4gICAgICAgIGxldCBmbl9pbmZvID0gUHJpbnRmLnNwcmludGYgXCIgW2NhbGxiYWNrICVzIGhhbmRsZT0lZF1cIiAodHlwZV9vZiB2KSBoYW5kbGUgaW5cbiAgICAgICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAgICAgKEpzLlVuc2FmZS5nZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiY29uc29sZVwiKSlcbiAgICAgICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gVU5DQVVHSFQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4biBeIGZuX2luZm8pKSB8XSk7XG4gICAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkgaW5cbiAgICBKcy5VbnNhZmUuZnVuX2NhbGwgX3RhZ19mbiBbfFxuICAgICAgSnMuVW5zYWZlLmluamVjdCBpbm5lcjtcbiAgICAgIEpzLlVuc2FmZS5pbmplY3QgaGFuZGxlO1xuICAgICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIHYpKSB8XVxuICAoKiBOb24tY2FsbGFibGUgY29tcG91bmQ6IHRhZ2dlZCBvYmplY3Qgd2l0aCBoYW5kbGUgKilcbiAgfCBfIC0+XG4gICAgbGV0IGhhbmRsZSA9IGFsbG9jX2hhbmRsZSB2IGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIHYpKSk7XG4gICAgICAoXCJfX3N4X2hhbmRsZVwiLCBKcy5VbnNhZmUuaW5qZWN0IGhhbmRsZSkgfF0pXG5cbmFuZCBqc190b192YWx1ZSAoanMgOiBKcy5VbnNhZmUuYW55KSA6IHZhbHVlID1cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBqcyBKcy5udWxsIHx8IEpzLlVuc2FmZS5lcXVhbHMganMgSnMudW5kZWZpbmVkIHRoZW4gTmlsXG4gIGVsc2VcbiAgICBsZXQgdHkgPSBKcy50b19zdHJpbmcgKEpzLnR5cGVvZiBqcykgaW5cbiAgICBtYXRjaCB0eSB3aXRoXG4gICAgfCBcIm51bWJlclwiIC0+IE51bWJlciAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGpzKSlcbiAgICB8IFwiYm9vbGVhblwiIC0+IEJvb2wgKEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5jb2VyY2UganMpKVxuICAgIHwgXCJzdHJpbmdcIiAtPiBTdHJpbmcgKEpzLnRvX3N0cmluZyAoSnMuVW5zYWZlLmNvZXJjZSBqcykpXG4gICAgfCBcImZ1bmN0aW9uXCIgLT5cbiAgICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICAgIGlmIG5vdCAoSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICAoKiBQbGFpbiBKUyBmdW5jdGlvbiDigJQgd3JhcCBhcyBOYXRpdmVGbiAqKVxuICAgICAgICBOYXRpdmVGbiAoXCJqcy1jYWxsYmFja1wiLCBmdW4gYXJncyAtPlxuICAgICAgICAgIGxldCBqc19hcmdzID0gYXJncyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAgICAgICAganNfdG9fdmFsdWUgKEpzLlVuc2FmZS5mdW5fY2FsbCBqcyAoQXJyYXkubWFwIEZ1bi5pZCBqc19hcmdzKSkpXG4gICAgfCBcIm9iamVjdFwiIC0+XG4gICAgICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gICAgICBpZiBub3QgKEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQpIHRoZW5cbiAgICAgICAgZ2V0X2hhbmRsZSAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGgpIHw+IGludF9vZl9mbG9hdClcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IHR5cGVfZmllbGQgPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJfdHlwZVwiKSBpblxuICAgICAgICBpZiBKcy5VbnNhZmUuZXF1YWxzIHR5cGVfZmllbGQgSnMudW5kZWZpbmVkIHRoZW4gYmVnaW5cbiAgICAgICAgICBpZiBKcy50b19ib29sIChKcy5VbnNhZmUuZ2xvYmFsIyMuX0FycmF5IyNpc0FycmF5IGpzKSB0aGVuIGJlZ2luXG4gICAgICAgICAgICBsZXQgbiA9IEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSAoSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwibGVuZ3RoXCIpKSkgfD4gaW50X29mX2Zsb2F0IGluXG4gICAgICAgICAgICBMaXN0IChMaXN0LmluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICAgICAganNfdG9fdmFsdWUgKEpzLmFycmF5X2dldCAoSnMuVW5zYWZlLmNvZXJjZSBqcykgaSB8PiBKcy5PcHRkZWYudG9fb3B0aW9uIHw+IE9wdGlvbi5nZXQpKSlcbiAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgKCogT3BhcXVlIGhvc3Qgb2JqZWN0IOKAlCBzdG9yZSBpbiBKUy1zaWRlIHRhYmxlLCByZXR1cm4gRGljdCB3aXRoIF9faG9zdF9oYW5kbGUgKilcbiAgICAgICAgICAgIGxldCBpZCA9IGhvc3RfcHV0IGpzIGluXG4gICAgICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiX19ob3N0X2hhbmRsZVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBpZCkpO1xuICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgZW5kXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgbGV0IHRhZyA9IEpzLnRvX3N0cmluZyAoSnMuVW5zYWZlLmNvZXJjZSB0eXBlX2ZpZWxkKSBpblxuICAgICAgICAgIG1hdGNoIHRhZyB3aXRoXG4gICAgICAgICAgfCBcInN5bWJvbFwiIC0+IFN5bWJvbCAoSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJuYW1lXCIpKSlcbiAgICAgICAgICB8IFwia2V5d29yZFwiIC0+IEtleXdvcmQgKEpzLnRvX3N0cmluZyAoSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwibmFtZVwiKSkpXG4gICAgICAgICAgfCBcImxpc3RcIiAtPlxuICAgICAgICAgICAgbGV0IGl0ZW1zX2pzID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiaXRlbXNcIikgaW5cbiAgICAgICAgICAgIGxldCBuID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGl0ZW1zX2pzIChKcy5zdHJpbmcgXCJsZW5ndGhcIikpKSB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICAgICAgICAgIExpc3QgKExpc3QuaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgICAgICBqc190b192YWx1ZSAoSnMuYXJyYXlfZ2V0IChKcy5VbnNhZmUuY29lcmNlIGl0ZW1zX2pzKSBpIHw+IEpzLk9wdGRlZi50b19vcHRpb24gfD4gT3B0aW9uLmdldCkpKVxuICAgICAgICAgIHwgXCJkaWN0XCIgLT5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgICAgICAgbGV0IGtleXMgPSBKcy5VbnNhZmUuZ2xvYmFsIyMuX09iamVjdCMja2V5cyBqcyBpblxuICAgICAgICAgICAgbGV0IGxlbiA9IGtleXMjIy5sZW5ndGggaW5cbiAgICAgICAgICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAgICAgICAgIGxldCBrID0gSnMudG9fc3RyaW5nIChKcy5hcnJheV9nZXQga2V5cyBpIHw+IEpzLk9wdGRlZi50b19vcHRpb24gfD4gT3B0aW9uLmdldCkgaW5cbiAgICAgICAgICAgICAgaWYgayA8PiBcIl90eXBlXCIgdGhlblxuICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIGsgKGpzX3RvX3ZhbHVlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgaykpKVxuICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgIERpY3QgZFxuICAgICAgICAgIHwgXyAtPiBOaWxcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IE5pbFxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFNpZGUtY2hhbm5lbCByZXR1cm4gKGJ5cGFzc2VzIGpzX29mX29jYW1sIHN0cmlwcGluZyBwcm9wZXJ0aWVzKSAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHYgOiBKcy5VbnNhZmUuYW55KSA6IEpzLlVuc2FmZS5hbnkgPVxuICBKcy5VbnNhZmUuc2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcIl9fc3hSXCIpIHY7IHZcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQZXJzaXN0ZW50IFZNIGdsb2JhbHMg4oCUIHN5bmNlZCB3aXRoIGdsb2JhbF9lbnYgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiBTdHJpbmcta2V5ZWQgbWlycm9yIG9mIGdsb2JhbF9lbnYuYmluZGluZ3MgZm9yIFZtQ2xvc3VyZXMuXG4gICBWbUNsb3N1cmVzIGZyb20gYnl0ZWNvZGUgbW9kdWxlcyBob2xkIHZtX2Vudl9yZWYgcG9pbnRpbmcgaGVyZS5cbiAgIE11c3Qgc3RheSBpbiBzeW5jIHNvIFZtQ2xvc3VyZXMgc2VlIHBvc3QtYm9vdCBkZWZpbml0aW9ucy4gKilcbmxldCBfdm1fZ2xvYmFscyA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA1MTJcbmxldCBfaW5fYmF0Y2ggPSByZWYgZmFsc2VcblxuKCogU3luYyBlbnbihpJWTTogY29weSBhbGwgYmluZGluZ3MgZnJvbSBnbG9iYWxfZW52LmJpbmRpbmdzIHRvIF92bV9nbG9iYWxzLlxuICAgQ2FsbGVkIGFmdGVyIENFSyBldmFsL2xvYWQgc28gVm1DbG9zdXJlcyBjYW4gc2VlIG5ldyBkZWZpbml0aW9ucy4gKilcbmxldCBzeW5jX2Vudl90b192bSAoKSA9XG4gIEhhc2h0YmwuaXRlciAoZnVuIGlkIHYgLT5cbiAgICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgKHVuaW50ZXJuIGlkKSB2XG4gICkgZ2xvYmFsX2Vudi5iaW5kaW5nc1xuXG4oKiBIb29rOiBpbnRlcmNlcHQgZW52X2JpbmQgb24gZ2xvYmFsX2VudiB0byBhbHNvIHVwZGF0ZSBfdm1fZ2xvYmFscy5cbiAgIE9ubHkgc3luYyBiaW5kaW5ncyBvbiB0aGUgZ2xvYmFsIGVudiDigJQgbGV0IGJpbmRpbmdzIGluIGNoaWxkIGVudnNcbiAgIG11c3QgTk9UIGxlYWsgaW50byBfdm1fZ2xvYmFscyAodGhleSdkIG92ZXJ3cml0ZSByZWFsIGRlZmluaXRpb25zKS4gKilcbmxldCAoKSA9XG4gIFN4X3R5cGVzLl9lbnZfYmluZF9ob29rIDo9IFNvbWUgKGZ1biBlbnYgbmFtZSB2IC0+XG4gICAgaWYgZW52ID09IGdsb2JhbF9lbnYgdGhlblxuICAgICAgSGFzaHRibC5yZXBsYWNlIF92bV9nbG9iYWxzIG5hbWUgdilcblxuKCogUmV2ZXJzZSBob29rOiBzeW5jIFZNIEdMT0JBTF9TRVQgbXV0YXRpb25zIGJhY2sgdG8gZ2xvYmFsX2Vudi5cbiAgIFdpdGhvdXQgdGhpcywgc2V0ISBpbnNpZGUgSklULWNvbXBpbGVkIGZ1bmN0aW9ucyB3cml0ZXMgdG8gX3ZtX2dsb2JhbHNcbiAgIGJ1dCBsZWF2ZXMgZ2xvYmFsX2VudiBzdGFsZSDigJQgQ0VLIHJlYWRzIHRoZW4gc2VlIHRoZSBvbGQgdmFsdWUuICopXG5sZXQgKCkgPVxuICBTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIDo9IFNvbWUgKGZ1biBuYW1lIHYgLT5cbiAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyAoU3hfdHlwZXMuaW50ZXJuIG5hbWUpIHYpXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogQ29yZSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBhcGlfcGFyc2Ugc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IHZhbHVlcyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuYXJyYXkgKHZhbHVlcyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0KSlcbiAgd2l0aCBQYXJzZV9lcnJvciBtc2cgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxubGV0IGFwaV9ldmFsIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGVudiA9IEVudiBnbG9iYWxfZW52IGluXG4gICAgbGV0IHJlc3VsdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBleHByIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlbnYpIE5pbCBleHBycyBpblxuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyByZXN1bHQpXG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbigqKiBldmFsVk06IGNvbXBpbGUgU1ggc291cmNlIHRvIGJ5dGVjb2RlIGFuZCBydW4gdGhyb3VnaCB0aGUgVk0uXG4gICAgR2xvYmFscyBkZWZpbmVkIHdpdGggYGRlZmluZWAgYXJlIHZpc2libGUgdG8gc3Vic2VxdWVudCBldmFsVk0vZXZhbCBjYWxscy5cbiAgICBUaGlzIHRlc3RzIHRoZSBleGFjdCBzYW1lIGNvZGUgcGF0aCBhcyBpc2xhbmQgaHlkcmF0aW9uIGFuZCBjbGljayBoYW5kbGVycy4gKilcbmxldCBhcGlfZXZhbF92bSBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBjb21waWxlX2ZuID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBfdm1fZ2xvYmFscyBcImNvbXBpbGUtbW9kdWxlXCIgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgfCBOb25lIC0+IGVudl9nZXQgZ2xvYmFsX2VudiBcImNvbXBpbGUtbW9kdWxlXCIgaW5cbiAgICBsZXQgY29kZV92YWwgPSBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGNvbXBpbGVfZm4gW0xpc3QgZXhwcnNdKSBpblxuICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gICAgbGV0IHJlc3VsdCA9IFN4X3ZtLmV4ZWN1dGVfbW9kdWxlIGNvZGUgX3ZtX2dsb2JhbHMgaW5cbiAgICAoKiBTeW5jIFZNIGdsb2JhbHMg4oaSIENFSyBlbnYgc28gc3Vic2VxdWVudCBldmFsKCkgY2FsbHMgc2VlIGRlZmluZXMgKilcbiAgICBIYXNodGJsLml0ZXIgKGZ1biBuYW1lIHYgLT5cbiAgICAgIGxldCBpZCA9IGludGVybiBuYW1lIGluXG4gICAgICBpZiBub3QgKEhhc2h0YmwubWVtIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQpIHRoZW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgZWxzZSAobWF0Y2ggSGFzaHRibC5maW5kIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQsIHYgd2l0aFxuICAgICAgICB8IFZtQ2xvc3VyZSBfLCBWbUNsb3N1cmUgXyB8IF8sIFZtQ2xvc3VyZSBfIC0+IEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgICAgfCBfIC0+ICgpKVxuICAgICkgX3ZtX2dsb2JhbHM7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBOb3RfZm91bmQgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IGNvbXBpbGUtbW9kdWxlIG5vdCBsb2FkZWRcIilcblxubGV0IGFwaV9ldmFsX2V4cHIgZXhwcl9qcyBfZW52X2pzID1cbiAgbGV0IGV4cHIgPSBqc190b192YWx1ZSBleHByX2pzIGluXG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBnbG9iYWxfZW52KSBpblxuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyByZXN1bHQpXG4gIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcblxubGV0IGFwaV9sb2FkIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGVudiA9IEVudiBnbG9iYWxfZW52IGluXG4gICAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biBleHByIC0+IGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciBleHByIGVudik7IGluY3IgY291bnQpIGV4cHJzO1xuICAgIHN5bmNfZW52X3RvX3ZtICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgIWNvdW50XG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG5cbmxldCBhcGlfYmVnaW5fbW9kdWxlX2xvYWQgKCkgPVxuICAoKiBTbmFwc2hvdCBjdXJyZW50IGVudiBpbnRvIHRoZSBwZXJzaXN0ZW50IFZNIGdsb2JhbHMgdGFibGUgKilcbiAgSGFzaHRibC5jbGVhciBfdm1fZ2xvYmFscztcbiAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPiBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgKHVuaW50ZXJuIGlkKSB2KSBnbG9iYWxfZW52LmJpbmRpbmdzO1xuICBfaW5fYmF0Y2ggOj0gdHJ1ZTtcbiAgSnMuVW5zYWZlLmluamVjdCB0cnVlXG5cbmxldCBhcGlfZW5kX21vZHVsZV9sb2FkICgpID1cbiAgaWYgIV9pbl9iYXRjaCB0aGVuIGJlZ2luXG4gICAgKCogQ29weSBWTSBnbG9iYWxzIGJhY2sgdG8gZW52IChieXRlY29kZSBtb2R1bGVzIGRlZmluZWQgbmV3IHN5bWJvbHMpICopXG4gICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyAoaW50ZXJuIGspIHZcbiAgICApIF92bV9nbG9iYWxzO1xuICAgIF9pbl9iYXRjaCA6PSBmYWxzZVxuICBlbmQ7XG4gIEpzLlVuc2FmZS5pbmplY3QgdHJ1ZVxuXG5sZXQgc3luY192bV90b19lbnYgKCkgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBuYW1lIHYgLT5cbiAgICBsZXQgaWQgPSBpbnRlcm4gbmFtZSBpblxuICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCkgdGhlblxuICAgICAgSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgIGVsc2UgYmVnaW5cbiAgICAgICgqIFVwZGF0ZSBleGlzdGluZyBiaW5kaW5nIGlmIHRoZSBWTSBoYXMgYSBuZXdlciB2YWx1ZSAqKVxuICAgICAgbGV0IGV4aXN0aW5nID0gSGFzaHRibC5maW5kIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgaW5cbiAgICAgIG1hdGNoIGV4aXN0aW5nLCB2IHdpdGhcbiAgICAgIHwgVm1DbG9zdXJlIF8sIFZtQ2xvc3VyZSBfIC0+IEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIHZcbiAgICAgIHwgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kXG4gICkgX3ZtX2dsb2JhbHNcblxubGV0IGFwaV9sb2FkX21vZHVsZSBtb2R1bGVfanMgPVxuICB0cnlcbiAgICBsZXQgY29kZV92YWwgPSBqc190b192YWx1ZSBtb2R1bGVfanMgaW5cbiAgICBsZXQgY29kZSA9IFN4X3ZtLmNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgIGxldCBfcmVzdWx0ID0gU3hfdm0uZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscyBpblxuICAgIHN5bmNfdm1fdG9fZW52ICgpO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgKEhhc2h0YmwubGVuZ3RoIF92bV9nbG9iYWxzKVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgZXhuIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKSlcblxubGV0IGFwaV9kZWJ1Z19lbnYgbmFtZV9qcyA9XG4gIGxldCBuYW1lID0gSnMudG9fc3RyaW5nIG5hbWVfanMgaW5cbiAgbGV0IGlkID0gaW50ZXJuIG5hbWUgaW5cbiAgbGV0IGZvdW5kX2VudiA9IEhhc2h0YmwuZmluZF9vcHQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCBpblxuICBsZXQgZm91bmRfdm0gPSBIYXNodGJsLmZpbmRfb3B0IF92bV9nbG9iYWxzIG5hbWUgaW5cbiAgbGV0IHRvdGFsX2VudiA9IEhhc2h0YmwubGVuZ3RoIGdsb2JhbF9lbnYuYmluZGluZ3MgaW5cbiAgbGV0IHRvdGFsX3ZtID0gSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMgaW5cbiAgbGV0IGVudl9zID0gbWF0Y2ggZm91bmRfZW52IHdpdGggU29tZSB2IC0+IFwiZW52OlwiIF4gdHlwZV9vZiB2IHwgTm9uZSAtPiBcImVudjpNSVNTSU5HXCIgaW5cbiAgbGV0IHZtX3MgPSBtYXRjaCBmb3VuZF92bSB3aXRoIFNvbWUgdiAtPiBcInZtOlwiIF4gdHlwZV9vZiB2IHwgTm9uZSAtPiBcInZtOk1JU1NJTkdcIiBpblxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFByaW50Zi5zcHJpbnRmIFwiJXMgJXMgKGVudj0lZCB2bT0lZClcIiBlbnZfcyB2bV9zIHRvdGFsX2VudiB0b3RhbF92bSkpXG5cbmxldCBhcGlfY29tcGlsZV9tb2R1bGUgc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgY29tcGlsZV9mbiA9IGVudl9nZXQgZ2xvYmFsX2VudiBcImNvbXBpbGUtbW9kdWxlXCIgaW5cbiAgICBsZXQgY29kZSA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW2NvbXBpbGVfZm47IExpc3QgZXhwcnNdKSAoRW52IGdsb2JhbF9lbnYpIGluXG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIGNvZGUpXG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBQYXJzZV9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIlBhcnNlIGVycm9yOiBcIiBeIG1zZykpXG4gIHwgTm90X2ZvdW5kIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBcIkVycm9yOiBjb21waWxlLW1vZHVsZSBub3QgbG9hZGVkXCIpXG5cbmxldCBhcGlfcmVuZGVyX3RvX2h0bWwgZXhwcl9qcyA9XG4gIGxldCBleHByID0ganNfdG9fdmFsdWUgZXhwcl9qcyBpblxuICBsZXQgcHJldiA9ICFfc3hfcmVuZGVyX21vZGUgaW5cbiAgX3N4X3JlbmRlcl9tb2RlIDo9IHRydWU7XG4gICh0cnlcbiAgICBsZXQgaHRtbCA9IFN4X3JlbmRlci5zeF9yZW5kZXJfdG9faHRtbCBnbG9iYWxfZW52IGV4cHIgZ2xvYmFsX2VudiBpblxuICAgIF9zeF9yZW5kZXJfbW9kZSA6PSBwcmV2O1xuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBodG1sKVxuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgX3N4X3JlbmRlcl9tb2RlIDo9IHByZXY7XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpKVxuXG5sZXQgYXBpX3N0cmluZ2lmeSB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChpbnNwZWN0IChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfdHlwZV9vZiB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nICh0eXBlX29mIChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfaW5zcGVjdCB2X2pzID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChpbnNwZWN0IChqc190b192YWx1ZSB2X2pzKSkpXG5cbmxldCBhcGlfZW5naW5lICgpID1cbiAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwib2NhbWwtdm0td2FzbVwiKVxuXG5sZXQgYXBpX3JlZ2lzdGVyX25hdGl2ZSBuYW1lX2pzIGNhbGxiYWNrX2pzID1cbiAgbGV0IG5hbWUgPSBKcy50b19zdHJpbmcgbmFtZV9qcyBpblxuICBsZXQgbmF0aXZlX2ZuIGFyZ3MgPVxuICAgIGxldCBqc19hcmdzID0gYXJncyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAganNfdG9fdmFsdWUgKEpzLlVuc2FmZS5mdW5fY2FsbCBjYWxsYmFja19qcyBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSBqc19hcmdzKSB8XSlcbiAgaW5cbiAgbGV0IHYgPSBOYXRpdmVGbiAobmFtZSwgbmF0aXZlX2ZuKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgbmFtZSB2KTtcbiAgSGFzaHRibC5yZXBsYWNlIF92bV9nbG9iYWxzIG5hbWUgdjtcbiAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG5cbmxldCBhcGlfY2FsbF9mbiBmbl9qcyBhcmdzX2pzID1cbiAgdHJ5XG4gICAgbGV0IGZuID0ganNfdG9fdmFsdWUgZm5fanMgaW5cbiAgICBsZXQgYXJncyA9IEFycmF5LnRvX2xpc3QgKEFycmF5Lm1hcCBqc190b192YWx1ZSAoSnMudG9fYXJyYXkgKEpzLlVuc2FmZS5jb2VyY2UgYXJnc19qcykpKSBpblxuICAgIHJldHVybl92aWFfc2lkZV9jaGFubmVsICh2YWx1ZV90b19qcyAoY2FsbF9zeF9mbiBmbiBhcmdzKSlcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIGNhbGxGbjogXCIgXiBtc2cpKSB8XSk7XG4gICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG4gIHwgZXhuIC0+XG4gICAgaWdub3JlIChKcy5VbnNhZmUubWV0aF9jYWxsXG4gICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgXCJlcnJvclwiIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJbc3hdIGNhbGxGbjogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKSkgfF0pO1xuICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbFxuXG5sZXQgYXBpX2lzX2NhbGxhYmxlIGZuX2pzID1cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBmbl9qcyBKcy5udWxsIHx8IEpzLlVuc2FmZS5lcXVhbHMgZm5fanMgSnMudW5kZWZpbmVkIHRoZW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGZhbHNlKVxuICBlbHNlXG4gICAgbGV0IGggPSBKcy5VbnNhZmUuZ2V0IGZuX2pzIChKcy5zdHJpbmcgXCJfX3N4X2hhbmRsZVwiKSBpblxuICAgIGlmIEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQgdGhlbiBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGZhbHNlKVxuICAgIGVsc2UgSnMuVW5zYWZlLmluamVjdCAoSnMuYm9vbCAoaXNfY2FsbGFibGUgKGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpKSkpXG5cbmxldCBhcGlfZm5fYXJpdHkgZm5fanMgPVxuICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQgZm5fanMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gIGlmIEpzLlVuc2FmZS5lcXVhbHMgaCBKcy51bmRlZmluZWQgdGhlbiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKC0xLjApKVxuICBlbHNlXG4gICAgbGV0IHYgPSBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KSBpblxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgTGFtYmRhIGwgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0IChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoIGwubF9wYXJhbXMpKSlcbiAgICB8IF8gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0ICgtMS4wKSlcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBQbGF0Zm9ybSBiaW5kaW5ncyAocmVnaXN0ZXJlZCBpbiBnbG9iYWwgZW52KSAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0ICgpID1cbiAgbGV0IGJpbmQgbmFtZSBmbiA9IGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBuYW1lIChOYXRpdmVGbiAobmFtZSwgZm4pKSkgaW5cblxuICAoKiBjbGllbnQ/IHJldHVybnMgdHJ1ZSBpbiBicm93c2VyIOKAlCBzZXQgdGhlIHJlZiBzbyB0aGUgcHJpbWl0aXZlIHJldHVybnMgdHJ1ZSAqKVxuICBTeF9wcmltaXRpdmVzLl9pc19jbGllbnQgOj0gdHJ1ZTtcblxuICAoKiAtLS0gRXZhbHVhdGlvbiAtLS0gKilcbiAgYmluZCBcImNlay1ldmFsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IGxldCBlID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzIGluIChtYXRjaCBlIHdpdGggaCA6OiBfIC0+IFN4X3JlZi5ldmFsX2V4cHIgaCAoRW52IGdsb2JhbF9lbnYpIHwgW10gLT4gTmlsKVxuICAgIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpXG4gICAgfCBbZXhwcjsgZW52X3ZhbF0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGVudl92YWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstZXZhbDogZXhwZWN0ZWQgMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJldmFsLWV4cHItY2VrXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGVcbiAgICB8IFtleHByXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBnbG9iYWxfZW52KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2YWwtZXhwci1jZWs6IGV4cGVjdGVkIDEtMiBhcmdzXCIpKTtcblxuICBiaW5kIFwiY2VrLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgIGxldCBhcmdfbGlzdCA9IG1hdGNoIGEgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IHYgLT4gW3ZdIGluXG4gICAgICBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGYgYXJnX2xpc3QpXG4gICAgfCBbZjsgX10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2VrLWNhbGw6IG5vdCBjYWxsYWJsZTogXCIgXiB0eXBlX29mIGYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1jYWxsOiBleHBlY3RlZCAoZm4gYXJncylcIikpO1xuXG4gIGJpbmQgXCJzeC1wYXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+IExpc3QgKFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4LXBhcnNlOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuXG4gICgqIHBhcnNlOiBzYW1lIGFzIHNlcnZlciDigJQgdW53cmFwcyBzaW5nbGUgcmVzdWx0cywgcmV0dXJucyBsaXN0IGZvciBtdWx0aXBsZS5cbiAgICAgVXNlZCBieSBib290LnN4IChwYWdlIHNjcmlwdHMsIHN1c3BlbnNlKSBhbmQgZW5naW5lLnN4IChtYXJzaCB1cGRhdGUpLiAqKVxuICBiaW5kIFwicGFyc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc3JjXSB8IFtTeEV4cHIgc3JjXSAtPlxuICAgICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICAgIChtYXRjaCBleHBycyB3aXRoIFtlXSAtPiBlIHwgXyAtPiBMaXN0IGV4cHJzKVxuICAgIHwgW3ZdIC0+IHZcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJwYXJzZTogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcblxuICBiaW5kIFwic3gtc2VyaWFsaXplXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdl0gLT4gU3RyaW5nIChpbnNwZWN0IHYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtc2VyaWFsaXplOiBleHBlY3RlZCAxIGFyZ1wiKSk7XG5cbiAgKCogLS0tIEFzc2VydGlvbnMgJiBlcXVhbGl0eSAtLS0gKilcbiAgbGV0IHJlYyBkZWVwX2VxdWFsIGEgYiA9XG4gICAgbWF0Y2ggYSwgYiB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPiB0cnVlIHwgQm9vbCBhLCBCb29sIGIgLT4gYSA9IGJcbiAgICB8IE51bWJlciBhLCBOdW1iZXIgYiAtPiBhID0gYiB8IFN0cmluZyBhLCBTdHJpbmcgYiAtPiBhID0gYlxuICAgIHwgU3ltYm9sIGEsIFN5bWJvbCBiIC0+IGEgPSBiIHwgS2V5d29yZCBhLCBLZXl3b3JkIGIgLT4gYSA9IGJcbiAgICB8IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pLCAoTGlzdCBiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gYiB9KSAtPlxuICAgICAgTGlzdC5sZW5ndGggYSA9IExpc3QubGVuZ3RoIGIgJiYgTGlzdC5mb3JfYWxsMiBkZWVwX2VxdWFsIGEgYlxuICAgIHwgRGljdCBhLCBEaWN0IGIgLT5cbiAgICAgIGxldCBrYSA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIGEgW10gaW5cbiAgICAgIGxldCBrYiA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gayA6OiBhY2MpIGIgW10gaW5cbiAgICAgIExpc3QubGVuZ3RoIGthID0gTGlzdC5sZW5ndGgga2IgJiZcbiAgICAgIExpc3QuZm9yX2FsbCAoZnVuIGsgLT4gSGFzaHRibC5tZW0gYiBrICYmXG4gICAgICAgIGRlZXBfZXF1YWwgKEhhc2h0YmwuZmluZCBhIGspIChIYXNodGJsLmZpbmQgYiBrKSkga2FcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgYmluZCBcImVxdWFsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IEJvb2wgKGRlZXBfZXF1YWwgYSBiKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlcXVhbD86IDIgYXJnc1wiKSk7XG4gIGJpbmQgXCJhc3NlcnRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtjb25kXSAtPiBpZiBub3QgKHN4X3RydXRoeSBjb25kKSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIFwiQXNzZXJ0aW9uIGZhaWxlZFwiKTsgQm9vbCB0cnVlXG4gICAgfCBbY29uZDsgbXNnXSAtPiBpZiBub3QgKHN4X3RydXRoeSBjb25kKSB0aGVuIHJhaXNlIChFdmFsX2Vycm9yIChcIkFzc2VydGlvbjogXCIgXiB2YWx1ZV90b19zdHJpbmcgbXNnKSk7IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFzc2VydDogMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJ0cnktY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3RodW5rXSAtPlxuICAgICAgKHRyeSBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW3RodW5rXSkgKEVudiBnbG9iYWxfZW52KSk7XG4gICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgZCBcIm9rXCIgKEJvb2wgdHJ1ZSk7IERpY3QgZFxuICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJva1wiIChCb29sIGZhbHNlKTsgSGFzaHRibC5yZXBsYWNlIGQgXCJlcnJvclwiIChTdHJpbmcgbXNnKTsgRGljdCBkKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInRyeS1jYWxsOiAxIGFyZ1wiKSk7XG5cbiAgKCogLS0tIEJ5dGVjb2RlIGxvYWRpbmcgZnJvbSBzLWV4cHJlc3Npb24gZm9ybWF0IC0tLVxuICAgICAoc3hiYyB2ZXJzaW9uIGhhc2ggKGNvZGUgOmFyaXR5IE4gOnVwdmFsdWUtY291bnQgTiA6Ynl0ZWNvZGUgKC4uLikgOmNvbnN0YW50cyAoLi4uKSkpXG4gICAgIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIHRoZSBTWCB0cmVlIGludG8gdGhlIGRpY3QgZm9ybWF0IHRoYXQgbG9hZE1vZHVsZSBleHBlY3RzLiAqKVxuICBiaW5kIFwibG9hZC1zeGJjXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoXyA6OiBfIDo6IF8gOjogY29kZV9mb3JtIDo6IF8pXSB8IFtMaXN0IChfIDo6IF8gOjogY29kZV9mb3JtIDo6IF8pXSAtPlxuICAgICAgbGV0IHJlYyBjb252ZXJ0X2NvZGUgZm9ybSA9XG4gICAgICAgIG1hdGNoIGZvcm0gd2l0aFxuICAgICAgICB8IExpc3QgKFN5bWJvbCBcImNvZGVcIiA6OiByZXN0KSAtPlxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgICAgICAgIGxldCByZWMgcGFyc2Vfa3YgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiYXJpdHlcIiA6OiBOdW1iZXIgbiA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwiYXJpdHlcIiAoTnVtYmVyIG4pOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJ1cHZhbHVlLWNvdW50XCIgOjogTnVtYmVyIG4gOjogcmVzdCAtPiBIYXNodGJsLnJlcGxhY2UgZCBcInVwdmFsdWUtY291bnRcIiAoTnVtYmVyIG4pOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJieXRlY29kZVwiIDo6IExpc3QgbnVtcyA6OiByZXN0IC0+XG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiYnl0ZWNvZGVcIiAoTGlzdCBudW1zKTsgcGFyc2Vfa3YgcmVzdFxuICAgICAgICAgICAgfCBLZXl3b3JkIFwiY29uc3RhbnRzXCIgOjogTGlzdCBjb25zdHMgOjogcmVzdCAtPlxuICAgICAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZCBcImNvbnN0YW50c1wiIChMaXN0IChMaXN0Lm1hcCBjb252ZXJ0X2NvbnN0IGNvbnN0cykpOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IF8gOjogcmVzdCAtPiBwYXJzZV9rdiByZXN0ICAoKiBza2lwIHVua25vd24ga2V5d29yZHMgKilcbiAgICAgICAgICAgIHwgW10gLT4gKClcbiAgICAgICAgICBpblxuICAgICAgICAgIHBhcnNlX2t2IHJlc3Q7XG4gICAgICAgICAgRGljdCBkXG4gICAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJsb2FkLXN4YmM6IGV4cGVjdGVkIChjb2RlIC4uLiksIGdvdCBcIiBeIHR5cGVfb2YgZm9ybSkpXG4gICAgICBhbmQgY29udmVydF9jb25zdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwiY29kZVwiIDo6IF8pIGFzIGZvcm0gLT4gY29udmVydF9jb2RlIGZvcm1cbiAgICAgICAgfCBMaXN0IChTeW1ib2wgXCJsaXN0XCIgOjogaXRlbXMpIC0+IExpc3QgKExpc3QubWFwIGNvbnZlcnRfY29uc3QgaXRlbXMpXG4gICAgICAgIHwgdiAtPiB2ICAoKiBzdHJpbmdzLCBudW1iZXJzLCBib29sZWFucywgbmlsLCBzeW1ib2xzLCBrZXl3b3JkcyBwYXNzIHRocm91Z2ggKilcbiAgICAgIGluXG4gICAgICBsZXQgbW9kdWxlX3ZhbCA9IGNvbnZlcnRfY29kZSBjb2RlX2Zvcm0gaW5cbiAgICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIG1vZHVsZV92YWwgaW5cbiAgICAgIGxldCBfcmVzdWx0ID0gU3hfdm0uZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscyBpblxuICAgICAgc3luY192bV90b19lbnYgKCk7XG4gICAgICBOdW1iZXIgKGZsb2F0X29mX2ludCAoSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImxvYWQtc3hiYzogZXhwZWN0ZWQgKHN4YmMgdmVyc2lvbiBoYXNoIChjb2RlIC4uLikpXCIpKTtcblxuICAoKiAtLS0gTGlzdCBtdXRhdGlvbiAtLS0gKilcbiAgYmluZCBcImFwcGVuZCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IHZdIC0+IHIgOj0gIXIgQCBbdl07IExpc3RSZWYgclxuICAgIHwgW0xpc3QgaXRlbXM7IHZdIC0+IExpc3QgKGl0ZW1zIEAgW3ZdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiByZW1vdmUhIOKAlCBtdXRhdGUgTGlzdFJlZiBpbi1wbGFjZSwgcmVtb3ZpbmcgYnkgaWRlbnRpdHkgKD09KSAqKVxuICBiaW5kIFwicmVtb3ZlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgdGFyZ2V0XSAtPlxuICAgICAgciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpICFyOyBMaXN0UmVmIHJcbiAgICB8IFtMaXN0IGl0ZW1zOyB0YXJnZXRdIC0+XG4gICAgICBMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSB0YXJnZXQpIGl0ZW1zKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFwcGVuZCE6IGxpc3QgYW5kIHZhbHVlXCIpKTtcblxuICAoKiAtLS0gRW52aXJvbm1lbnQgb3BzIC0tLSAqKVxuICAoKiBVc2UgdW53cmFwX2VudiBmb3IgbmlsL2RpY3QgdG9sZXJhbmNlLCBtYXRjaGluZyB0aGUgc2VydmVyIGtlcm5lbCAqKVxuICBsZXQgdXcgPSBTeF9ydW50aW1lLnVud3JhcF9lbnYgaW5cbiAgYmluZCBcIm1ha2UtZW52XCIgKGZ1biBfIC0+IEVudiAobWFrZV9lbnYgKCkpKTtcbiAgYmluZCBcImdsb2JhbC1lbnZcIiAoZnVuIF8gLT4gRW52IGdsb2JhbF9lbnYpO1xuICBiaW5kIFwiZW52LWhhcz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcga10gfCBbZTsgS2V5d29yZCBrXSAtPiBCb29sIChlbnZfaGFzICh1dyBlKSBrKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtaGFzP1wiKSk7XG4gIGJpbmQgXCJlbnYtZ2V0XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGtdIHwgW2U7IEtleXdvcmQga10gLT4gZW52X2dldCAodXcgZSkgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZ2V0XCIpKTtcbiAgYmluZCBcImVudi1iaW5kIVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrOyB2XSB8IFtlOyBLZXl3b3JkIGs7IHZdIC0+IGVudl9iaW5kICh1dyBlKSBrIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LWJpbmQhXCIpKTtcbiAgYmluZCBcImVudi1zZXQhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGs7IHZdIHwgW2U7IEtleXdvcmQgazsgdl0gLT4gZW52X3NldCAodXcgZSkgayB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1zZXQhXCIpKTtcbiAgYmluZCBcImVudi1leHRlbmRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlXSAtPiBFbnYgKGVudl9leHRlbmQgKHV3IGUpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtZXh0ZW5kXCIpKTtcbiAgYmluZCBcImVudi1tZXJnZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IFN4X3J1bnRpbWUuZW52X21lcmdlIGEgYiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtbWVyZ2VcIikpO1xuXG4gICgqIC0tLSBUeXBlIGNvbnN0cnVjdG9ycyAtLS0gKilcbiAgYmluZCBcIm1ha2Utc3ltYm9sXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN5bWJvbCBzIHwgW3ZdIC0+IFN5bWJvbCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ltYm9sXCIpKTtcbiAgYmluZCBcIm1ha2Uta2V5d29yZFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBLZXl3b3JkIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1rZXl3b3JkXCIpKTtcbiAgYmluZCBcImtleXdvcmQtbmFtZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0tleXdvcmQga10gLT4gU3RyaW5nIGsgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwia2V5d29yZC1uYW1lXCIpKTtcbiAgYmluZCBcInN5bWJvbC1uYW1lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIHNdIC0+IFN0cmluZyBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbC1uYW1lXCIpKTtcblxuICAoKiAtLS0gQ29tcG9uZW50L0lzbGFuZCBhY2Nlc3NvcnMgKG11c3QgaGFuZGxlIGJvdGggdHlwZXMpIC0tLSAqKVxuICBiaW5kIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBTdHJpbmcgYy5jX25hbWUgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZSB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBFbnYgYy5jX2Nsb3N1cmUgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZSB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0NvbXBvbmVudCBjXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGMuY19wYXJhbXMpXG4gICAgfCBbSXNsYW5kIGldIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgICB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gYy5jX2JvZHkgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5IHwgXyAtPiBOaWwpO1xuICBsZXQgaGFzX2NoaWxkcmVuX2ltcGwgPSBOYXRpdmVGbiAoXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiLCBmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlbiB8IFtJc2xhbmQgaV0gLT4gQm9vbCBpLmlfaGFzX2NoaWxkcmVuIHwgXyAtPiBCb29sIGZhbHNlKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuXCIgaGFzX2NoaWxkcmVuX2ltcGwpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJjb21wb25lbnQtaGFzLWNoaWxkcmVuP1wiIGhhc19jaGlsZHJlbl9pbXBsKTtcbiAgYmluZCBcImNvbXBvbmVudC1hZmZpbml0eVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfYWZmaW5pdHkgfCBbSXNsYW5kIF9dIC0+IFN0cmluZyBcImNsaWVudFwiIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCIpO1xuICBiaW5kIFwiY29tcG9uZW50LXBhcmFtLXR5cGVzXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjb21wb25lbnQtc2V0LXBhcmFtLXR5cGVzIVwiIChmdW4gXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBDRUsgc3RlcHBpbmcgLS0tICopXG4gIGJpbmQgXCJtYWtlLWNlay1zdGF0ZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2M7IGU7IGtdIC0+IFN4X3JlZi5tYWtlX2Nla19zdGF0ZSBjIGUgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWNlay1zdGF0ZVwiKSk7XG4gIGJpbmQgXCJjZWstc3RlcFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfc3RlcCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1zdGVwXCIpKTtcbiAgYmluZCBcImNlay1waGFzZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfcGhhc2UgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstcGhhc2VcIikpO1xuICBiaW5kIFwiY2VrLXZhbHVlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla192YWx1ZSBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay12YWx1ZVwiKSk7XG4gIGJpbmQgXCJjZWstdGVybWluYWw/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla190ZXJtaW5hbF9wIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXRlcm1pbmFsP1wiKSk7XG4gIGJpbmQgXCJjZWsta29udFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3NdIC0+IFN4X3JlZi5jZWtfa29udCBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1rb250XCIpKTtcbiAgYmluZCBcImZyYW1lLXR5cGVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtmXSAtPiBTeF9yZWYuZnJhbWVfdHlwZSBmIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZyYW1lLXR5cGVcIikpO1xuXG4gICgqIC0tLSBTdHJpY3QgbW9kZSAtLS0gKilcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiKnN0cmljdCpcIiAoQm9vbCBmYWxzZSkpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCIqcHJpbS1wYXJhbS10eXBlcypcIiBOaWwpO1xuICBiaW5kIFwic2V0LXN0cmljdCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3N0cmljdF9yZWYgOj0gdjsgaWdub3JlIChlbnZfc2V0IGdsb2JhbF9lbnYgXCIqc3RyaWN0KlwiIHYpOyBOaWwgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJzZXQtcHJpbS1wYXJhbS10eXBlcyFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2XSAtPiBTeF9yZWYuX3ByaW1fcGFyYW1fdHlwZXNfcmVmIDo9IHY7IGlnbm9yZSAoZW52X3NldCBnbG9iYWxfZW52IFwiKnByaW0tcGFyYW0tdHlwZXMqXCIgdik7IE5pbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInZhbHVlLW1hdGNoZXMtdHlwZT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFt2OyB0XSAtPiBTeF9yZWYudmFsdWVfbWF0Y2hlc190eXBlX3AgdiB0IHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBBcHBseSAtLS0gKilcbiAgYmluZCBcImFwcGx5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBmIDo6IHJlc3QgLT5cbiAgICAgIGxldCBhbGxfYXJncyA9IG1hdGNoIExpc3QucmV2IHJlc3Qgd2l0aCBMaXN0IGxhc3QgOjogcHJlZml4IC0+IExpc3QucmV2IHByZWZpeCBAIGxhc3QgfCBfIC0+IHJlc3QgaW5cbiAgICAgIFN4X3J1bnRpbWUuc3hfY2FsbCBmIGFsbF9hcmdzXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHlcIikpO1xuXG4gICgqIC0tLSBTY29wZSBzdGFjayAtLS0gKilcbiAgKCogU2NvcGUgcHJpbWl0aXZlcyAoc2NvcGUtcHVzaCEsIHNjb3BlLXBvcCEsIGNvbnRleHQsIGNvbGxlY3QhLCBjb2xsZWN0ZWQsXG4gICAgIGVtaXQhLCBlbWl0dGVkLCBzY29wZS1lbWl0ISwgc2NvcGUtZW1pdHRlZCwgZXRjLikgYXJlIHJlZ2lzdGVyZWQgYnlcbiAgICAgU3hfc2NvcGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGluIHRoZSBwcmltaXRpdmVzIHRhYmxlLlxuICAgICBUaGUgQ0VLIGV2YWx1YXRvciBmYWxscyB0aHJvdWdoIHRvIHRoZSBwcmltaXRpdmVzIHRhYmxlIHdoZW4gYSBzeW1ib2xcbiAgICAgaXNuJ3QgaW4gdGhlIGVudiwgc28gdGhlc2Ugd29yayBhdXRvbWF0aWNhbGx5LlxuICAgICBPbmx5IHByb3ZpZGUtcHVzaCEvcHJvdmlkZS1wb3AhIG5lZWQgZXhwbGljaXQgZW52IGJpbmRpbmdzIGFzIGFsaWFzZXMuICopXG4gIGJpbmQgXCJwcm92aWRlLXB1c2ghXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbbjsgdl0gLT4gU3hfcnVudGltZS5wcm92aWRlX3B1c2ggbiB2IHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInByb3ZpZGUtcHVzaCFcIikpO1xuICBiaW5kIFwicHJvdmlkZS1wb3AhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbbl0gLT4gU3hfcnVudGltZS5wcm92aWRlX3BvcCBuIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInByb3ZpZGUtcG9wIVwiKSk7XG5cbiAgKCogUnVudGltZSBoZWxwZXJzIGZvciBieXRlY29kZWQgZGVmY29tcC9kZWZpc2xhbmQvZGVmbWFjcm8gZm9ybXMuXG4gICAgIFRoZSBjb21waWxlciBlbWl0cyBHTE9CQUxfR0VUIFwiZXZhbC1kZWZjb21wXCIgKyBDQUxMIOKAlCB0aGVzZSBtdXN0XG4gICAgIGV4aXN0IGFzIGNhbGxhYmxlIHZhbHVlcyBmb3IgYnl0ZWNvZGVkIC5zeCBmaWxlcyB0aGF0IGNvbnRhaW5cbiAgICAgY29tcG9uZW50IGRlZmluaXRpb25zIChlLmcuIGNzc3guc3gpLiAqKVxuICBiaW5kIFwiZXZhbC1kZWZjb21wXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMaXN0IChfIDo6IHJlc3QpXSAtPiBTeF9yZWYuc2ZfZGVmY29tcCAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiZXZhbC1kZWZpc2xhbmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZpc2xhbmQgKExpc3QgcmVzdCkgKEVudiBnbG9iYWxfZW52KSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImV2YWwtZGVmbWFjcm9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZtYWNybyAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBGcmFnbWVudCAvIHJhdyBIVE1MIC0tLSAqKVxuICBiaW5kIFwiPD5cIiAoZnVuIGFyZ3MgLT5cbiAgICBSYXdIVE1MIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoIFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHMgfCBOaWwgLT4gXCJcIlxuICAgICAgfCBMaXN0IF8gLT4gU3hfcmVuZGVyLnN4X3JlbmRlcl90b19odG1sIGdsb2JhbF9lbnYgYSBnbG9iYWxfZW52XG4gICAgICB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nIGEpIGFyZ3MpKSk7XG4gIGJpbmQgXCJyYXchXCIgKGZ1biBhcmdzIC0+XG4gICAgUmF3SFRNTCAoU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCAoZnVuIGEgLT5cbiAgICAgIG1hdGNoIGEgd2l0aCBTdHJpbmcgcyB8IFJhd0hUTUwgcyAtPiBzIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgYSkgYXJncykpKTtcblxuICBiaW5kIFwiZGVmaW5lLXBhZ2UtaGVscGVyXCIgKGZ1biBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFJlbmRlciAtLS0gKilcbiAgU3hfcmVuZGVyLnNldHVwX3JlbmRlcl9lbnYgZ2xvYmFsX2VudjtcbiAgYmluZCBcInNldC1yZW5kZXItYWN0aXZlIVwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwicmVuZGVyLWFjdGl2ZT9cIiAoZnVuIF8gLT4gQm9vbCB0cnVlKTtcbiAgYmluZCBcImlzLWh0bWwtdGFnP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBCb29sIChTeF9yZW5kZXIuaXNfaHRtbF90YWcgcykgfCBfIC0+IEJvb2wgZmFsc2UpO1xuXG4gICgqIC0tLSBSZW5kZXIgY29uc3RhbnRzIG5lZWRlZCBieSB3ZWIgYWRhcHRlcnMgLS0tICopXG4gIGxldCBodG1sX3RhZ3MgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci5odG1sX3RhZ3MpIGluXG4gIGxldCB2b2lkX2VsZW1lbnRzID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBTeF9yZW5kZXIudm9pZF9lbGVtZW50cykgaW5cbiAgbGV0IGJvb2xlYW5fYXR0cnMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci5ib29sZWFuX2F0dHJzKSBpblxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJIVE1MX1RBR1NcIiBodG1sX3RhZ3MpO1xuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCJWT0lEX0VMRU1FTlRTXCIgdm9pZF9lbGVtZW50cyk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIkJPT0xFQU5fQVRUUlNcIiBib29sZWFuX2F0dHJzKTtcblxuICAoKiAtLS0gSFRNTCB0YWcgc3BlY2lhbCBmb3JtcyAoZGl2LCBzcGFuLCBoMSwgLi4uKSAtLS0gKilcbiAgKCogUmVnaXN0ZXJlZCBhcyBjdXN0b20gc3BlY2lhbCBmb3JtcyBzbyBrZXl3b3JkcyBhcmUgcHJlc2VydmVkLlxuICAgICBIYW5kbGVyIHJlY2VpdmVzIChyYXctYXJncyBlbnYpLCBldmFsdWF0ZXMgbm9uLWtleXdvcmQgYXJnc1xuICAgICB3aGlsZSBrZWVwaW5nIGtleXdvcmQgbmFtZXMgaW50YWN0LiAqKVxuICBsZXQgZXZhbF90YWdfYXJncyByYXdfYXJncyBlbnYgPVxuICAgIGxldCBhcmdzID0gU3hfcnVudGltZS5zeF90b19saXN0IHJhd19hcmdzIGluXG4gICAgbGV0IHJlYyBwcm9jZXNzID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gW11cbiAgICAgIHwgKEtleXdvcmQgXyBhcyBrdykgOjogdmFsdWUgOjogcmVzdCAtPlxuICAgICAgICAoKiBrZXl3b3JkICsgaXRzIHZhbHVlOiBrZWVwIGtleXdvcmQsIGV2YWx1YXRlIHZhbHVlICopXG4gICAgICAgIGt3IDo6IFN4X3JlZi5ldmFsX2V4cHIgdmFsdWUgZW52IDo6IHByb2Nlc3MgcmVzdFxuICAgICAgfCAoS2V5d29yZCBfIGFzIGt3KSA6OiBbXSAtPlxuICAgICAgICAoKiB0cmFpbGluZyBrZXl3b3JkIHdpdGggbm8gdmFsdWUg4oCUIGJvb2xlYW4gYXR0ciAqKVxuICAgICAgICBba3ddXG4gICAgICB8IGV4cHIgOjogcmVzdCAtPlxuICAgICAgICAoKiBub24ta2V5d29yZDogZXZhbHVhdGUgKilcbiAgICAgICAgU3hfcmVmLmV2YWxfZXhwciBleHByIGVudiA6OiBwcm9jZXNzIHJlc3RcbiAgICBpblxuICAgIHByb2Nlc3MgYXJnc1xuICBpblxuICBMaXN0Lml0ZXIgKGZ1biB0YWcgLT5cbiAgICBpZ25vcmUgKFN4X3JlZi5yZWdpc3Rlcl9zcGVjaWFsX2Zvcm0gKFN0cmluZyB0YWcpXG4gICAgICAoTmF0aXZlRm4gKFwic2Y6XCIgXiB0YWcsIGZ1biBoYW5kbGVyX2FyZ3MgLT5cbiAgICAgICAgbWF0Y2ggaGFuZGxlcl9hcmdzIHdpdGhcbiAgICAgICAgfCBbcmF3X2FyZ3M7IGVudl0gLT4gTGlzdCAoU3ltYm9sIHRhZyA6OiBldmFsX3RhZ19hcmdzIHJhd19hcmdzIGVudilcbiAgICAgICAgfCBfIC0+IE5pbCkpKVxuICApIFN4X3JlbmRlci5odG1sX3RhZ3M7XG5cbiAgKCogLS0tIEVycm9yIGhhbmRsaW5nIC0tLSAqKVxuICBiaW5kIFwiY2VrLXRyeVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3RodW5rOyBoYW5kbGVyXSAtPlxuICAgICAgKHRyeSBTeF9yZWYuY2VrX2NhbGwgdGh1bmsgTmlsXG4gICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPiBTeF9yZWYuY2VrX2NhbGwgaGFuZGxlciAoTGlzdCBbU3RyaW5nIG1zZ10pKVxuICAgIHwgW3RodW5rXSAtPlxuICAgICAgKHRyeSBsZXQgciA9IFN4X3JlZi5jZWtfY2FsbCB0aHVuayBOaWwgaW5cbiAgICAgICAgTGlzdCBbU3ltYm9sIFwib2tcIjsgcl1cbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+IExpc3QgW1N5bWJvbCBcImVycm9yXCI7IFN0cmluZyBtc2ddKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBFdmFsdWF0b3IgYnJpZGdlIGZ1bmN0aW9ucyBuZWVkZWQgYnkgc3BlYyAuc3ggZmlsZXMgLS0tICopXG4gIGJpbmQgXCJldmFsLWV4cHJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2V4cHI7IGVdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidHJhbXBvbGluZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+ICFTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIHYgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJleHBhbmQtbWFjcm9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW21hYzsgcmF3OyBFbnYgZV0gLT4gU3hfcmVmLmV4cGFuZF9tYWNybyBtYWMgcmF3IChFbnYgZSkgfCBbbWFjOyByYXddIC0+IFN4X3JlZi5leHBhbmRfbWFjcm8gbWFjIHJhdyAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiY2FsbC1sYW1iZGFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhOyBfXSB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgICgqIFVzZSBjZWtfY2FsbCBpbnN0ZWFkIG9mIHN4X2NhbGwgdG8gYXZvaWQgZXZhbF9leHByIGNvcHlpbmdcbiAgICAgICAgIERpY3QgdmFsdWVzIChzaWduYWxzKS4gc3hfY2FsbCByZXR1cm5zIGEgVGh1bmsgcmVzb2x2ZWQgdmlhXG4gICAgICAgICBldmFsX2V4cHIgd2hpY2ggZGVlcC1jb3BpZXMgZGljdHMsIGJyZWFraW5nIHNpZ25hbCBtdXRhdGlvbi4gKilcbiAgICAgIFN4X3JlZi5jZWtfY2FsbCBmIGFcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjYWxsLWxhbWJkYTogZXhwZWN0ZWQgKGZuIGFyZ3MgZW52PylcIikpO1xuICBiaW5kIFwiY2VrLWNhbGxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBhXSB3aGVuIGlzX2NhbGxhYmxlIGYgLT5cbiAgICAgIGxldCBhcmdfbGlzdCA9IG1hdGNoIGEgd2l0aCBMaXN0IGwgLT4gbCB8IE5pbCAtPiBbXSB8IHYgLT4gW3ZdIGluXG4gICAgICBTeF9yZWYudHJhbXBvbGluZSAoU3hfcnVudGltZS5zeF9jYWxsIGYgYXJnX2xpc3QpXG4gICAgfCBbZjsgX10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiY2VrLWNhbGw6IG5vdCBjYWxsYWJsZTogXCIgXiB0eXBlX29mIGYpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1jYWxsOiBleHBlY3RlZCAoZm4gYXJncylcIikpO1xuICBiaW5kIFwiY2VrLWV2YWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIHwgW2V4cHI7IGVdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciBlIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicXEtZXhwYW5kLXJ1bnRpbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3RlbXBsYXRlXSAtPiBTeF9yZWYucXFfZXhwYW5kIHRlbXBsYXRlIChFbnYgZ2xvYmFsX2VudikgfCBbdGVtcGxhdGU7IEVudiBlXSAtPiBTeF9yZWYucXFfZXhwYW5kIHRlbXBsYXRlIChFbnYgZSkgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFR5cGUgcHJlZGljYXRlcyBuZWVkZWQgYnkgYWRhcHRlcnMgLS0tICopXG4gIGJpbmQgXCJ0aHVuaz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtUaHVuayBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwidGh1bmstZXhwclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHRodW5rX2V4cHIgdiB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInRodW5rLWVudlwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IHRodW5rX2VudiB2IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibGFtYmRhP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwibWFjcm8/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTWFjcm8gX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImlzbGFuZD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImNvbXBvbmVudD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJjYWxsYWJsZT9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtOYXRpdmVGbiBfXSB8IFtMYW1iZGEgX10gfCBbQ29tcG9uZW50IF9dIHwgW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwic3ByZWFkP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiY29udGludWF0aW9uP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NvbnRpbnVhdGlvbiBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwibGFtYmRhLXBhcmFtc1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGwubF9wYXJhbXMpIHwgXyAtPiBMaXN0IFtdKTtcbiAgYmluZCBcImxhbWJkYS1ib2R5XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IGwubF9ib2R5IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibGFtYmRhLWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gRW52IGwubF9jbG9zdXJlIHwgXyAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSk7XG5cbiAgKCogLS0tIENvcmUgb3BlcmF0aW9ucyBuZWVkZWQgYnkgYWRhcHRlcnMgLS0tICopXG4gIGJpbmQgXCJzcHJlYWQtYXR0cnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBwYWlyc10gLT4gbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLnJlcGxhY2UgZCBrIHYpIHBhaXJzOyBEaWN0IGQgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcbiAgYmluZCBcIm1ha2Utc3ByZWFkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IFNwcmVhZCAoSGFzaHRibC5mb2xkIChmdW4gayB2IGFjYyAtPiAoaywgdikgOjogYWNjKSBkIFtdKSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcIm1ha2UtcmF3LWh0bWxcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgc10gLT4gUmF3SFRNTCBzIHwgW3ZdIC0+IFJhd0hUTUwgKHZhbHVlX3RvX3N0cmluZyB2KSB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInJhdy1odG1sLWNvbnRlbnRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzIHwgW1N0cmluZyBzXSAtPiBTdHJpbmcgcyB8IF8gLT4gU3RyaW5nIFwiXCIpO1xuICBiaW5kIFwiZW1wdHktZGljdD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IEJvb2wgKEhhc2h0YmwubGVuZ3RoIGQgPSAwKSB8IF8gLT4gQm9vbCB0cnVlKTtcbiAgYmluZCBcImlkZW50aWNhbD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBCb29sIChhID09IGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlkZW50aWNhbD9cIikpO1xuICBiaW5kIFwiZm9yLWVhY2gtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2ZuX3ZhbDsgTGlzdCBpdGVtc10gfCBbZm5fdmFsOyBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9XSAtPlxuICAgICAgTGlzdC5pdGVyaSAoZnVuIGkgaXRlbSAtPlxuICAgICAgICBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgW2ZuX3ZhbDsgTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IGl0ZW1dKSAoRW52IGdsb2JhbF9lbnYpKVxuICAgICAgKSBpdGVtczsgTmlsXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFN0cmluZy9udW1iZXIgaGVscGVycyB1c2VkIGJ5IG9yY2hlc3RyYXRpb24vYnJvd3NlciAtLS0gKilcbiAgYmluZCBcIm1ha2Utc3gtZXhwclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBTeEV4cHIgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXN4LWV4cHJcIikpO1xuICBiaW5kIFwic3gtZXhwci1zb3VyY2VcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTeEV4cHIgc10gLT4gU3RyaW5nIHMgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4LWV4cHItc291cmNlXCIpKTtcbiAgYmluZCBcInBhcnNlLWludFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2ZfaW50IChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBkZWZhdWx0X3ZhbF0gLT4gKHRyeSBOdW1iZXIgKGZsb2F0X29mX2ludCAoaW50X29mX3N0cmluZyBzKSkgd2l0aCBfIC0+IGRlZmF1bHRfdmFsKVxuICAgIHwgW051bWJlciBuXSB8IFtOdW1iZXIgbjsgX10gLT4gTnVtYmVyIChGbG9hdC5yb3VuZCBuKVxuICAgIHwgW187IGRlZmF1bHRfdmFsXSAtPiBkZWZhdWx0X3ZhbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInBhcnNlLW51bWJlclwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2Zfc3RyaW5nIHMpIHdpdGggXyAtPiBOaWwpIHwgXyAtPiBOaWwpO1xuXG4gICgqIC0tLSBTZXJ2ZXItb25seSBzdHVicyAobm8tb3BzIGluIGJyb3dzZXIpIC0tLSAqKVxuICBiaW5kIFwicXVlcnlcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImFjdGlvblwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwicmVxdWVzdC1hcmdcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtfOyBkXSAtPiBkIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicmVxdWVzdC1tZXRob2RcIiAoZnVuIF8gLT4gU3RyaW5nIFwiR0VUXCIpO1xuICBiaW5kIFwiY3R4XCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJoZWxwZXJcIiAoZnVuIF8gLT4gTmlsKTtcbiAgKClcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBKSVQgY29tcGlsYXRpb24gaG9vayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiBPbiBmaXJzdCBjYWxsIHRvIGEgbmFtZWQgbGFtYmRhLCB0cnkgdG8gY29tcGlsZSBpdCB0byBieXRlY29kZSB2aWEgICopXG4oKiBjb21waWxlci5zeCAobG9hZGVkIGFzIGFuIC5zeCBwbGF0Zm9ybSBmaWxlKS4gQ29tcGlsZWQgY2xvc3VyZXMgcnVuICopXG4oKiBvbiB0aGUgYnl0ZWNvZGUgVk07IGZhaWx1cmVzIGZhbGwgYmFjayB0byB0aGUgQ0VLIGludGVycHJldGVyLiAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IF9qaXRfY29tcGlsaW5nID0gcmVmIGZhbHNlXG5sZXQgX2ppdF9lbmFibGVkID0gcmVmIGZhbHNlXG5cbmxldCAoKSA9XG4gIFN4X3JlZi5qaXRfY2FsbF9ob29rIDo9IFNvbWUgKGZ1biBmIGFyZ3MgLT5cbiAgICBtYXRjaCBmIHdpdGhcbiAgICB8IExhbWJkYSBsIHdoZW4gIV9qaXRfZW5hYmxlZCAtPlxuICAgICAgKG1hdGNoIGwubF9jb21waWxlZCB3aXRoXG4gICAgICAgfCBTb21lIGNsIHdoZW4gbm90IChTeF92bS5pc19qaXRfZmFpbGVkIGNsKSAtPlxuICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6ICVzIChiYz0lZCBjb25zdHM9JWQgdXB2PSVkKVxcbiUhXCJcbiAgICAgICAgICAgICAgZm5fbmFtZSBtc2dcbiAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2J5dGVjb2RlKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfY29uc3RhbnRzKVxuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICgqIE1hcmsgYXMgZmFpbGVkIHRvIHN0b3AgcmV0cnlpbmcgKilcbiAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIChTeF92bS5qaXRfZmFpbGVkX3NlbnRpbmVsKTtcbiAgICAgICAgICAgIE5vbmUpXG4gICAgICAgfCBTb21lIF8gLT4gTm9uZVxuICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgaWYgIV9qaXRfY29tcGlsaW5nIHRoZW4gTm9uZVxuICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSB0cnVlO1xuICAgICAgICAgICBsZXQgY29tcGlsZWQgPSBTeF92bS5qaXRfY29tcGlsZV9sYW1iZGEgbCBfdm1fZ2xvYmFscyBpblxuICAgICAgICAgICBfaml0X2NvbXBpbGluZyA6PSBmYWxzZTtcbiAgICAgICAgICAgKG1hdGNoIGNvbXBpbGVkIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNsIC0+XG4gICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICAgKHRyeSBTb21lIChTeF92bS5jYWxsX2Nsb3N1cmUgY2wgYXJncyBfdm1fZ2xvYmFscylcbiAgICAgICAgICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgICAgICAgIGxldCBmbl9uYW1lMiA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlcyAoYmM9JWQgY29uc3RzPSVkIHVwdj0lZClcXG4lIVwiXG4gICAgICAgICAgICAgICAgICBmbl9uYW1lMiBtc2dcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19ieXRlY29kZSlcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19jb25zdGFudHMpXG4gICAgICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX3VwdmFsdWVzKTtcbiAgICAgICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSAoU3hfdm0uaml0X2ZhaWxlZF9zZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgTm9uZSlcbiAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpXG4gICAgICAgICBlbmQpXG4gICAgfCBfIC0+IE5vbmUpXG5cbmxldCAoKSA9IGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcImVuYWJsZS1qaXQhXCIgKE5hdGl2ZUZuIChcImVuYWJsZS1qaXQhXCIsIGZ1biBfIC0+IF9qaXRfZW5hYmxlZCA6PSB0cnVlOyBOaWwpKSlcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBSZWdpc3RlciBnbG9iYWwgU3hLZXJuZWwgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0ICgpID1cbiAgbGV0IHN4ID0gSnMuVW5zYWZlLm9iaiBbfHxdIGluXG4gIGxldCB3cmFwIGZuID0gSnMuVW5zYWZlLmZ1bl9jYWxsXG4gICAgKEpzLlVuc2FmZS5wdXJlX2pzX2V4cHIgXCIoZnVuY3Rpb24oZm4pIHsgcmV0dXJuIGZ1bmN0aW9uKCkgeyBnbG9iYWxUaGlzLl9fc3hSID0gdW5kZWZpbmVkOyB2YXIgciA9IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IHJldHVybiBnbG9iYWxUaGlzLl9fc3hSICE9PSB1bmRlZmluZWQgPyBnbG9iYWxUaGlzLl9fc3hSIDogcjsgfTsgfSlcIilcbiAgICBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy53cmFwX2NhbGxiYWNrIGZuKSB8XSBpblxuXG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInBhcnNlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9wYXJzZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInN0cmluZ2lmeVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfc3RyaW5naWZ5KTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZXZhbFwiKSAod3JhcCBhcGlfZXZhbCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImV2YWxWTVwiKSAod3JhcCBhcGlfZXZhbF92bSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImV2YWxFeHByXCIpICh3cmFwIGFwaV9ldmFsX2V4cHIpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJyZW5kZXJUb0h0bWxcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3JlbmRlcl90b19odG1sKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwibG9hZFwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfbG9hZCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImxvYWRNb2R1bGVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2xvYWRfbW9kdWxlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiYmVnaW5Nb2R1bGVMb2FkXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT4gYXBpX2JlZ2luX21vZHVsZV9sb2FkICgpKSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImVuZE1vZHVsZUxvYWRcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPiBhcGlfZW5kX21vZHVsZV9sb2FkICgpKSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImNvbXBpbGVNb2R1bGVcIikgKHdyYXAgYXBpX2NvbXBpbGVfbW9kdWxlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwidHlwZU9mXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV90eXBlX29mKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiaW5zcGVjdFwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfaW5zcGVjdCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImVuZ2luZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfZW5naW5lKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwicmVnaXN0ZXJOYXRpdmVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3JlZ2lzdGVyX25hdGl2ZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImxvYWRTb3VyY2VcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2xvYWQpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJjYWxsRm5cIikgKHdyYXAgYXBpX2NhbGxfZm4pO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJpc0NhbGxhYmxlXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9pc19jYWxsYWJsZSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImZuQXJpdHlcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2ZuX2FyaXR5KTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZGVidWdFbnZcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2RlYnVnX2Vudik7XG5cbiAgKCogU2NvcGUgdHJhY2luZyBBUEkgKilcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic2NvcGVUcmFjZU9uXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9zY29wZS5zY29wZV90cmFjZV9lbmFibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlT2ZmXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBTeF9zY29wZS5zY29wZV90cmFjZV9kaXNhYmxlICgpOyBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGwpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic2NvcGVUcmFjZURyYWluXCIpIChKcy53cmFwX2NhbGxiYWNrIChmdW4gKCkgLT5cbiAgICBsZXQgbG9nID0gU3hfc2NvcGUuc2NvcGVfdHJhY2VfZHJhaW4gKCkgaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSAoQXJyYXkub2ZfbGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKSkgbG9nKSkpKSk7XG5cbiAgSnMuVW5zYWZlLnNldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJTeEtlcm5lbFwiKSBzeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2siLCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGw0IiwiYTIiLCJhMyIsImNhbWxfY2FsbDUiLCJhNCIsImdsb2JhbF9kYXRhIiwiU3hfdHlwZXMiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliIiwiSnNfb2Zfb2NhbWxfSnMiLCJTdGRsaWJfUHJpbnRleGMiLCJTdGRsaWJfSGFzaHRibCIsIlN0ZGxpYl9MaXN0IiwiU3RkbGliX0FycmF5IiwiU3RkbGliX09wdGlvbiIsIlN4X3Njb3BlIiwiU3hfdm0iLCJTeF9yZWYiLCJTeF9ydW50aW1lIiwiU3hfcHJpbWl0aXZlcyIsIlN4X3JlbmRlciIsIlN0ZGxpYl9TdHJpbmciLCJTeF9wYXJzZXIiLCJoYW5kbGVfdGFibGUiLCJuZXh0X2hhbmRsZSIsImFsbG9jX2hhbmRsZSIsInYiLCJpZCIsImdldF9oYW5kbGUiLCJtYXRjaCIsImFsbG9jX2hvc3RfaGFuZGxlIiwiZ2xvYmFsX2VudiIsImNhbGxfc3hfZm4iLCJmbiIsImFyZ3MiLCJyZXN1bHQiLCJ0YWdfZm4iLCJjc3RfY2FsbGJhY2siLCJjc3RfY2FsbGJhY2tfc19oYW5kbGVfZCIsImNzdF9oYW5kbGUiLCJjc3RfaG9zdF9oYW5kbGUiLCJjc3RfZGljdCIsImNzdF9rZXl3b3JkIiwiY3N0X2xpc3QiLCJjc3Rfc3ltYm9sIiwidmFsdWVfdG9fanMiLCJiIiwibiIsInMiLCJrIiwiaXRlbXMiLCJkIiwib2JqIiwiaGFuZGxlIiwiaW5uZXIiLCJhcmdzX2pzIiwiYXJnIiwiZXhuIiwibXNnIiwiZm5faW5mbyIsImFyciIsIm5leHRfaG9zdF9oYW5kbGUiLCJqc190b192YWx1ZSIsInR5IiwiaCIsImpzX2FyZ3MiLCJ0eXBlX2ZpZWxkIiwidDAiLCJ0MSIsImkiLCJ0YWciLCJpdGVtc19qcyIsInQzIiwidDQiLCJrZXlzIiwibGVuIiwicmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwiLCJ2bV9nbG9iYWxzIiwic3luY19lbnZfdG9fdm0iLCJwYXJhbSIsImVudiIsIm5hbWUiLCJkdW1teSIsImNzdF9QYXJzZV9lcnJvciIsImFwaV9wYXJzZSIsInNyY19qcyIsInNyYyIsInZhbHVlcyIsImNzdF9FcnJvciIsImFwaV9ldmFsIiwiZXhwcnMiLCJhY2MiLCJleHByIiwiY3N0X0Vycm9yX2NvbXBpbGVfbW9kdWxlX25vdF9sIiwiY3N0X2NvbXBpbGVfbW9kdWxlIiwiYXBpX2V2YWxfdm0iLCJjb21waWxlX2ZuIiwiY29kZV92YWwiLCJjb2RlIiwiYXBpX2V2YWxfZXhwciIsImV4cHJfanMiLCJlbnZfanMiLCJhcGlfbG9hZCIsImNvdW50Iiwic3luY192bV90b19lbnYiLCJleGlzdGluZyIsImFwaV9sb2FkX21vZHVsZSIsIm1vZHVsZV9qcyIsImFwaV9kZWJ1Z19lbnYiLCJuYW1lX2pzIiwiZm91bmRfZW52IiwiZm91bmRfdm0iLCJ0b3RhbF9lbnYiLCJ0b3RhbF92bSIsImVudl9zIiwidm1fcyIsImFwaV9jb21waWxlX21vZHVsZSIsInN4X3JlbmRlcl9tb2RlIiwiYXBpX3JlbmRlcl90b19odG1sIiwicHJldiIsImh0bWwiLCJhcGlfc3RyaW5naWZ5Iiwidl9qcyIsImFwaV90eXBlX29mIiwiYXBpX2luc3BlY3QiLCJhcGlfZW5naW5lIiwiYXBpX3JlZ2lzdGVyX25hdGl2ZSIsImNhbGxiYWNrX2pzIiwibmF0aXZlX2ZuIiwiYXBpX2NhbGxfZm4iLCJmbl9qcyIsImNzdF9zeF9jYWxsRm4iLCJhcGlfaXNfY2FsbGFibGUiLCJhcGlfZm5fYXJpdHkiLCJsIiwiYmluZCIsImNzdF9jZWtfZXZhbCIsImUiLCJlbnZfdmFsIiwiY3N0X2Nla19jYWxsIiwiY3N0X2Nla19jYWxsX2V4cGVjdGVkX2ZuX2FyZ3MiLCJjc3RfY2VrX2NhbGxfbm90X2NhbGxhYmxlIiwiYSIsImFyZ19saXN0IiwiZGVlcF9lcXVhbCIsImthIiwia2IiLCJjb25kIiwiY3N0X2Vycm9yIiwiY3N0X29rIiwidGh1bmsiLCJjb2RlX2Zvcm0iLCJjc3RfY29kZSIsImNvbnZlcnRfY29kZSIsImZvcm0iLCJyZXN0IiwiY3N0X2FyaXR5IiwiY3N0X2J5dGVjb2RlIiwiY3N0X2NvbnN0YW50cyIsImNzdF91cHZhbHVlX2NvdW50IiwiY29uc3RzIiwibnVtcyIsImNvbnZlcnRfY29uc3QiLCJtb2R1bGVfdmFsIiwiciIsInRhcmdldCIsIngiLCJ1dyIsImNzdF9lbnZfaGFzIiwiY3N0X2Vudl9nZXQiLCJjc3RfZW52X2JpbmQiLCJjc3RfZW52X3NldCIsImNzdF9lbnZfZXh0ZW5kIiwiY3N0X2Vudl9tZXJnZSIsImNzdF9tYWtlX3N5bWJvbCIsImNzdF9tYWtlX2tleXdvcmQiLCJjc3Rfa2V5d29yZF9uYW1lIiwiY3N0X3N5bWJvbF9uYW1lIiwiY3N0IiwiYyIsImNzdF9jb21wb25lbnRfaGFzX2NoaWxkcmVuIiwiaGFzX2NoaWxkcmVuX2ltcGwiLCJjc3RfbWFrZV9jZWtfc3RhdGUiLCJjc3RfY2VrX3N0ZXAiLCJjc3RfY2VrX3BoYXNlIiwiY3N0X2Nla192YWx1ZSIsImNzdF9jZWtfdGVybWluYWwiLCJjc3RfY2VrX2tvbnQiLCJjc3RfZnJhbWVfdHlwZSIsImNzdF9zdHJpY3QiLCJjc3RfcHJpbV9wYXJhbV90eXBlcyIsInQiLCJjc3RfYXBwbHkiLCJhbGxfYXJncyIsInByZWZpeCIsImxhc3QiLCJjc3RfcHJvdmlkZV9wdXNoIiwiY3N0X3Byb3ZpZGVfcG9wIiwiaHRtbF90YWdzIiwidm9pZF9lbGVtZW50cyIsImJvb2xlYW5fYXR0cnMiLCJldmFsX3RhZ19hcmdzIiwicmF3X2FyZ3MiLCJwcm9jZXNzIiwia3ciLCJ2YWx1ZSIsImhhbmRsZXJfYXJncyIsImhhbmRsZXIiLCJyYXciLCJtYWMiLCJ0ZW1wbGF0ZSIsInBhaXJzIiwiY3N0X2lkZW50aWNhbCIsImZuX3ZhbCIsIml0ZW0iLCJjc3RfbWFrZV9zeF9leHByIiwiY3N0X3N4X2V4cHJfc291cmNlIiwiZGVmYXVsdF92YWwiLCJjc3RfYmMiLCJjc3RfY29uc3RzIiwiY3N0X3VwdiIsImNzdF9qaXRfRkFJTCIsImNzdF9qaXRfRkFJTF9zX3NfYmNfZF9jb25zdHNfZCIsImppdF9jb21waWxpbmciLCJqaXRfZW5hYmxlZCIsImNsIiwiZm5fbmFtZSIsImNvbXBpbGVkIiwiZm5fbmFtZTIiLCJjc3RfZW5hYmxlX2ppdCIsIndyYXAiLCJzeCIsImluX2JhdGNoIiwibG9nIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLDBCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFD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QUEsR0FDQztBQUFBLEdBR0k7QUFBQTtBQUFBLGVBQUFxRCxPQUMxQywyQkFBOEIseUJBQTBCO0FBQUEsR0FDYjtBQUFBO0FBQUEsZUFBQUEsT0FDM0MsMkJBQStCLHlCQUEwQjtBQUFBLEdBQ1o7QUFBQTtBQUFBLGVBQUFBO0FBQUFBO0FBQUFBLFFBQUEwSixNQUNuQztBQUFBLFlBQ2dDO0FBQUEsT0FBZixPQUFWLG1CQUFVLCtCQUF5RTtBQUFBO0FBQUEsR0FFdEc7QUFBQSxHQUF3RDtBQUFBO0FBQUEsRURsNEIxRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQyNDAxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZF9leGl0LmNtby5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkX2V4aXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsU0FBQTtBQUFBLEdDaUJRO0FBQUEsR0FBWTtBQUFBO0FBQUEsRURqQnBCIiwiaWdub3JlTGlzdCI6WzBdfX1dfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3hfYnJvd3Nlci5iYy5qcyIsInNlY3Rpb25zIjpbeyJvZmZzZXQiOnsibGluZSI6MywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3hfYnJvd3Nlci5lb2Jqcy9qc29vL3N4X2Jyb3dzZXIuYmMucnVudGltZS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK3N5bmMuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JsYWtlMi5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2VmZmVjdC5qcyIsIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLytkb21haW4uanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rcnVudGltZV9ldmVudHMuanMiLCIvYnVpbHRpbi8renN0ZC5qcyIsIi9idWlsdGluLyt3ZWFrLmpzIiwiL2J1aWx0aW4vK2djLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytncmFwaGljcy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rcHJuZy5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK3N0ci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgcmV0dXJuIHMucmVwZWF0KG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5KG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsIGxlbiAtPSAxMDI0KVxuICAgIHMgKz0gZi5hcHBseShudWxsLCBhLnNsaWNlKGksIGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCwgbGVuIC09IDEwMjQpXG4gICAgcyArPSBmLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgZWxzZSByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICAgIGNhc2UgMCAvKiBCWVRFUyAqLzpcbiAgICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICAgIGNhc2UgNCAvKiBBUlJBWSAqLzpcbiAgICAgIHJldHVybiBzLmNbaV07XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIGlmIChpICsgMSA9PT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSksXG4gICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4KSB8IGIxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSxcbiAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpLFxuICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCkgfCAoYjMgPDwgMTYpIHwgKGIyIDw8IDgpIHwgYjE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpLFxuICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAxKSxcbiAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMiksXG4gICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0KSB8IChiMyA8PCAxNikgfCAoYjIgPDwgOCkgfCBiMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0KHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQoX3MsIF9pLCBfYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocywgaSwgaTE2KSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhmZiAmIChpMTYgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocywgaSwgaTMyKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhmZiAmIChpMzIgPj4gMjQpLFxuICAgIGIzID0gMHhmZiAmIChpMzIgPj4gMTYpLFxuICAgIGIyID0gMHhmZiAmIChpMzIgPj4gOCksXG4gICAgYjEgPSAweGZmICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLCBpLCBpNjQpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczoganNvb190ZXh0X2VuY29kZXJcbnZhciBqc29vX3RleHRfZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2RlclxudmFyIGpzb29fdGV4dF9kZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHtcbiAgICByZXR1cm4gbmV3IE1sQnl0ZXMoOSwgcywgcy5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhID0ganNvb190ZXh0X2VuY29kZXIuZW5jb2RlKHMpO1xuICAgIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczoganNvb190ZXh0X2RlY29kZXJcbmNsYXNzIE1sQnl0ZXMge1xuICBjb25zdHJ1Y3Rvcih0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgICB0aGlzLnQgPSB0YWc7XG4gICAgdGhpcy5jID0gY29udGVudHM7XG4gICAgdGhpcy5sID0gbGVuZ3RoO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgc3dpdGNoICh0aGlzLnQpIHtcbiAgICAgIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIGNhc2UgOCAvKkJZVEVTIHwgTk9UX0FTQ0lJKi86XG4gICAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgMCAvKkJZVEVTIHwgVU5LTk9XTiovOlxuICAgICAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgICBlbHNlIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgfVxuXG4gIHRvVXRmMTYoKSB7XG4gICAgaWYgKHRoaXMudCA9PT0gOSkgcmV0dXJuIHRoaXMuYztcbiAgICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXModGhpcyk7XG4gICAgcmV0dXJuIGpzb29fdGV4dF9kZWNvZGVyLmRlY29kZShhKTtcbiAgfVxuXG4gIHNsaWNlKCkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50ID09PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gICAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCwgY29udGVudCwgdGhpcy5sKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09PSAyIC8qIFBBUlRJQUwgKi8pIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgXCJcXDBcIik7XG4gIGVsc2Ugcy5jID0gY2FtbF9zdWJfdWludDhfYXJyYXlfdG9fanNieXRlcyhzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LTk9XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYyxcbiAgICBsID0gYi5sZW5ndGgsXG4gICAgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocykge1xuICBpZiAocy50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbiA/IDIgOiA5LCBcIlwiLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcoX2xlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuID8gMiA6IDksIFwiXCIsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsIDAsIGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGEpIHtcbiAgcmV0dXJuIGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoYSwgMCwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShhLnNsaWNlKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5KGEpIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LCBhLCBhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYSkge1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCwgYSwgYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICBzMS50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgczIudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBzMS5jIDwgczIuYyA/IC0xIDogczEuYyA+IHMyLmMgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZiAoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gczEuYyA9PT0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAxIC0gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gMSAtIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPD0gczIuYyA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHMxLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICBzMi50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIHMxLmMgPCBzMi5jID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsIHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0KGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSBsID09PSBzLmwgPyAwIC8qIEJZVEVTIHwgVU5LTk9XTiAqLyA6IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChcbiAgICBpMiA9PT0gMCAmJlxuICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpXG4gICkge1xuICAgIHMyLmMgPVxuICAgICAgczEudCA9PT0gNCAvKiBBUlJBWSAqL1xuICAgICAgICA/IGNhbWxfc3ViX3VpbnQ4X2FycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbilcbiAgICAgICAgOiBpMSA9PT0gMCAmJiBzMS5jLmxlbmd0aCA9PT0gbGVuXG4gICAgICAgICAgPyBzMS5jXG4gICAgICAgICAgOiBzMS5jLnNsaWNlKGkxLCBpMSArIGxlbik7XG4gICAgczIudCA9IHMyLmMubGVuZ3RoID09PSBzMi5sID8gMCAvKiBCWVRFUyB8IFVOS05PV04gKi8gOiAyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz1cbiAgICAgIHMxLnQgPT09IDQgLyogQVJSQVkgKi9cbiAgICAgICAgPyBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pXG4gICAgICAgIDogaTEgPT09IDAgJiYgczEuYy5sZW5ndGggPT09IGxlblxuICAgICAgICAgID8gczEuY1xuICAgICAgICAgIDogczEuYy5zbGljZShpMSwgaTEgKyBsZW4pO1xuICAgIHMyLnQgPSBzMi5jLmxlbmd0aCA9PT0gczIubCA/IDAgLyogQllURVMgfCBVTktOT1dOICovIDogMjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9PSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsXG4gICAgICBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMltpMiArIGldID0gYzFbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzJbaTIgKyBpXSA9IGMxW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4obGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzJbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLCBiLCBjLCBkLCBlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSwgYiwgYywgZCwgZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykge1xuICByZXR1cm4gcy5sO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsIGIpIHtcbiAgcmV0dXJuIGEgKyBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSwgczIpIHtcbiAgczEudCAmIDYgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIHMyLnQgJiA2ICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoMCwgczEuYyArIHMyLmMsIHMxLmwgKyBzMi5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gczEgPCBzMiA/IC0xIDogczEgPiBzMiA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYgKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gczEgPD0gczIgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBzMSA8IHMyID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7XG4gIHJldHVybiB4O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG52YXIganNvb190ZXh0X2RlY29kZXJfYnVmZiA9IG5ldyBBcnJheUJ1ZmZlcigxMDI0KTtcblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9kZWNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX3RleHRfZGVjb2Rlcl9idWZmXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBzO1xuICB2YXIgYSA9XG4gICAgcy5sZW5ndGggPD0ganNvb190ZXh0X2RlY29kZXJfYnVmZi5sZW5ndGhcbiAgICAgID8gbmV3IFVpbnQ4QXJyYXkoanNvb190ZXh0X2RlY29kZXJfYnVmZiwgMCwgcy5sZW5ndGgpXG4gICAgICA6IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgYVtpXSA9IHMuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4ganNvb190ZXh0X2RlY29kZXIuZGVjb2RlKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGpzb29fdGV4dF9lbmNvZGVyXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgYSA9IGpzb29fdGV4dF9lbmNvZGVyLmVuY29kZShzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcygwLCBzLCBzLmxlbmd0aCk7XG59XG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcy50ICYgNiAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIHMudG9VdGYxNigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiBzIGluc3RhbmNlb2YgTWxCeXRlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JldHVybnMgYSAoZnVsbCkgc3RyaW5nIG9mIGJ5dGVzIG9yIGFuIGFycmF5XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgICBjYXNlIDIgLyogUEFSVElBTCAqLzpcbiAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gICAgICByZXR1cm4gcy5jO1xuICAgIGRlZmF1bHQ6IC8qIEJZVEVTIG9yIEFSUkFZICovXG4gICAgICByZXR1cm4gcy5jO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbnRyb2xDaGFyYWN0ZXJzSW5SZWdleDogZXhwZWN0ZWRcbiAgcmV0dXJuIHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc2J5dGVzXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmddIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vRGVwcmVjYXRlZDogVXNlIFtjYW1sX3N0cmluZ19vZl9qc3N0cmluZ10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXSBpbnN0ZWFkXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7XG4gIHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNdIGluc3RlYWRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkge1xuICByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0RlcHJlY2F0ZWQ6IFVzZSBbY2FtbF9zdHJpbmdfb2ZfanNieXRlc10gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogMHgyMCxcbiAgQ09ERV9JTlQ4OiAweDAwLFxuICBDT0RFX0lOVDE2OiAweDAxLFxuICBDT0RFX0lOVDMyOiAweDAyLFxuICBDT0RFX0lOVDY0OiAweDAzLFxuICBDT0RFX1NIQVJFRDg6IDB4MDQsXG4gIENPREVfU0hBUkVEMTY6IDB4MDUsXG4gIENPREVfU0hBUkVEMzI6IDB4MDYsXG4gIENPREVfQkxPQ0szMjogMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAweDEzLFxuICBDT0RFX1NUUklORzg6IDB4MDksXG4gIENPREVfU1RSSU5HMzI6IDB4MGEsXG4gIENPREVfRE9VQkxFX0JJRzogMHgwYixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAweDBjLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAweDBkLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAweDBlLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogMHgwZixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6IDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAweDExLFxuICBDT0RFX0NVU1RPTTogMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogMHgxOSxcbn07XG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBVSW50OEFycmF5UmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTtcbiAgfVxuXG4gIHJlYWQ4cygpIHtcbiAgICByZXR1cm4gKHRoaXMuc1t0aGlzLmkrK10gPDwgMjQpID4+IDI0O1xuICB9XG5cbiAgcmVhZDE2dSgpIHtcbiAgICB2YXIgcyA9IHRoaXMucyxcbiAgICAgIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV07XG4gIH1cblxuICByZWFkMTZzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSArIDFdIDw8IDE2KSB8IChzW2kgKyAyXSA8PCA4KSB8IHNbaSArIDNdKSA+Pj4gMDtcbiAgfVxuXG4gIHJlYWQzMnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpICsgMV0gPDwgMTYpIHwgKHNbaSArIDJdIDw8IDgpIHwgc1tpICsgM107XG4gIH1cblxuICByZWFkc3RyKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogSnNTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmNsYXNzIEpzU3RyaW5nUmVhZGVyIHtcbiAgY29uc3RydWN0b3IocywgaSkge1xuICAgIHRoaXMucyA9IHM7XG4gICAgdGhpcy5pID0gaTtcbiAgfVxuXG4gIHJlYWQ4dSgpIHtcbiAgICByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspO1xuICB9XG5cbiAgcmVhZDhzKCkge1xuICAgIHJldHVybiAodGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0KSA+PiAyNDtcbiAgfVxuXG4gIHJlYWQxNnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQxNnMoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfVxuXG4gIHJlYWQzMnUoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsXG4gICAgICBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoXG4gICAgICAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAxKSA8PCAxNikgfFxuICAgICAgICAocy5jaGFyQ29kZUF0KGkgKyAyKSA8PCA4KSB8XG4gICAgICAgIHMuY2hhckNvZGVBdChpICsgMykpID4+PlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICByZWFkMzJzKCkge1xuICAgIHZhciBzID0gdGhpcy5zLFxuICAgICAgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKFxuICAgICAgKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDgpIHxcbiAgICAgIHMuY2hhckNvZGVBdChpICsgMylcbiAgICApO1xuICB9XG5cbiAgcmVhZHN0cihsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zbGljZShpLCBpICsgbGVuKSk7XG4gIH1cblxuICByZWFkdWludDhhcnJheShsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IEpzU3RyaW5nUmVhZGVyLCBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLCBvZnMpIHtcbiAgdmFyIGMgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gIHZhciBvZnMgPSB0eXBlb2Ygb2ZzID09PSBcIm51bWJlclwiID8gb2ZzIDogb2ZzWzBdO1xuICB2YXIgcmVhZGVyID1cbiAgICBjIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgICAgPyBuZXcgVUludDhBcnJheVJlYWRlcihjLCBvZnMpXG4gICAgICA6IG5ldyBKc1N0cmluZ1JlYWRlcihjLCBvZnMpO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKSB7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4O1xuICBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpIHtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1KCkpIHtcbiAgICBjYXNlIDE6XG4gICAgICBzaXplWzBdID0gNDtcbiAgICAgIHJldHVybiByZWFkZXIucmVhZDMycygpO1xuICAgIGNhc2UgMjpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPSB7XG4gIF9qOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgIHNlcmlhbGl6ZTogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgIGZpeGVkX2xlbmd0aDogOCxcbiAgICBjb21wYXJlOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgaGFzaDogY2FtbF9pbnQ2NF9oYXNoLFxuICB9LFxuICBfaToge1xuICAgIGRlc2VyaWFsaXplOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9uOiB7XG4gICAgZGVzZXJpYWxpemU6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICBmaXhlZF9sZW5ndGg6IDQsXG4gIH0sXG4gIF9iaWdhcnJheToge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyYXlcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG4gIF9iaWdhcnIwMjoge1xuICAgIGRlc2VyaWFsaXplOiBmdW5jdGlvbiAocmVhZGVyLCBzeikge1xuICAgICAgcmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgXCJfYmlnYXJyMDJcIik7XG4gICAgfSxcbiAgICBzZXJpYWxpemU6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgIGNvbXBhcmU6IGNhbWxfYmFfY29tcGFyZSxcbiAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gIH0sXG59O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX3NldF9vb19pZFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdmKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgc3dpdGNoIChtYWdpYykge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmQgLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNmO1xuICAgICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgICAgaWYgKG92ZXJmbG93WzBdKSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgaWYgKGhlYWRlcl9sZW4gIT09IHJlYWRlci5pIC0gb2xkX3Bvcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBpbnZhbGlkIGhlYWRlclwiKTtcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIG9iamVjdHMgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSBudW1fb2JqZWN0cyA+IDAgPyBbXSA6IG51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweGY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2UgcmV0dXJuIGNvZGUgJiAweDNmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFmO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzKCk7XG4gICAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzKCk7XG4gICAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIGlmIChjb21wcmVzc2VkID09PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICAgICAgICBpZiAoY29tcHJlc3NlZCA9PT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWQgPT09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4ZmY7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBpZiAodGFnID09PSAyNDgpIG9iamVjdHMucHVzaCh2KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyKGxlbik7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIobGVuKTtcbiAgICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIGNhc2UgMHgwYzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MGU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBkOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzKHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgY2FzZSAweDBmOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBsZW47IGkrKykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXModCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgICAgdmFyIGMsXG4gICAgICAgICAgICAgIHMgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSgpKSAhPT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgICAgaWYgKCFvcHMpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgICAgICBpZiAoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZF9zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkX3NpemUgIT09IHNpemVbMF0pXG4gICAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb21wcmVzc2VkKSB7XG4gICAgaWYgKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjKHJlYWRlcik7XG4gIH1cbiAgd2hpbGUgKG9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgIHZhciB4ID0gb2JqZWN0cy5wb3AoKTtcbiAgICBpZiAoeFsyXSA+PSAwKSBjYW1sX3NldF9vb19pZCh4KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNjtcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZShzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N2Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT09IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT09IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Zik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoIChyLnJlYWQzMnUoKSkge1xuICAgIGNhc2UgMHg4NDk1YTZiZSAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovOlxuICAgICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAweDg0OTVhNmJkIC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqLzpcbiAgICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M2Y7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgICBpZiAob3ZlcmZsb3dbMF0pIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDB4ODQ5NWE2YmYgLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi86XG4gICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICBcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG5jbGFzcyBNbE9iamVjdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5vYmpzID0gW107XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfVxuXG4gIHN0b3JlKHYpIHtcbiAgICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gICAgdGhpcy5vYmpzLnB1c2godik7XG4gIH1cblxuICByZWNhbGwodikge1xuICAgIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICAgIHJldHVybiBpID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IChmdW5jdGlvbiAoKSB7XG4gIGNsYXNzIFdyaXRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNodW5rID0gW107XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDIwO1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSAwO1xuICAgICAgdGhpcy5vYmpfY291bnRlciA9IDA7XG4gICAgICB0aGlzLnNpemVfMzIgPSAwO1xuICAgICAgdGhpcy5zaXplXzY0ID0gMDtcbiAgICB9XG5cbiAgICB3cml0ZShzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4OyBpID49IDA7IGkgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgd3JpdGVfYXQocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhmZjtcbiAgICB9XG5cbiAgICB3cml0ZV9jb2RlKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODsgaSA+PSAwOyBpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweGZmO1xuICAgIH1cblxuICAgIHdyaXRlX3NoYXJlZChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAxIDw8IDgpXG4gICAgICAgIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgMSA8PCAxNilcbiAgICAgICAgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwb3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaHVua19pZHg7XG4gICAgfVxuXG4gICAgZmluYWxpemUoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlKDMyLCAweDg0OTVhNmJlKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSxcbiAgICAgIGNsb3N1cmVzID0gZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTE7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgICk7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlcigpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkge1xuICAgICAgICB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWModikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwgMF07XG4gICAgICAgIGlmICghb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPT0gc3pfMzJfNjRbMF0pXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFxuICAgICAgICAgICAgICBcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdlswXSA9PT0gKHZbMF0gfCAwKSkge1xuICAgICAgICBpZiAodlswXSA9PT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZShcbiAgICAgICAgICAgIDgsXG4gICAgICAgICAgICAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKSA8PCA0KSxcbiAgICAgICAgICApO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoXG4gICAgICAgICAgICAzMixcbiAgICAgICAgICAgIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sXG4gICAgICAgICAgICAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXSxcbiAgICAgICAgICApO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2godiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYgKCFjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcbiAgICAgICAgICAgIFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApIHdyaXRlci53cml0ZSg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDkgLypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MGEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMCkgd3JpdGVyLndyaXRlKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwOSAvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZSB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwYSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodiwgaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KSB8IDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KSB8IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT09ICh2IHwgMCkpIHtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYgKHR5cGVfb2ZfdiAhPT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIiArIHR5cGVfb2ZfdiArIFwiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4MGMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgdFs3IC0gaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzO1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAxIDw8IDcpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8IDEgPDwgMTUpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2Ugd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWModltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3cml0ZXIuY2h1bmspO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXModiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoY2FtbF9vdXRwdXRfdmFsKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlcihzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheSh0KSwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciB4ID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKHgpIHtcbiAgICB4LmZpbGUuY2xvc2UoZmFsc2UpO1xuICAgIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbENoYW5pZFxuZnVuY3Rpb24gTWxDaGFuaWQoaWQpIHtcbiAgdGhpcy5pZCA9IGlkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxDaGFuaWRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSwgaWR4KSB7XG4gIHZhciBjaGFuaWQ7XG4gIGlmIChpZHggPT09IHVuZGVmaW5lZCkge1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gICAgY2hhbmlkID0gbmV3IE1sQ2hhbmlkKGlkeCk7XG4gIH0gZWxzZSBpZiAoY2FtbF9zeXNfZmRzW2lkeF0pIHtcbiAgICBjaGFuaWQgPSBjYW1sX3N5c19mZHNbaWR4XS5jaGFuaWQ7XG4gIH0gZWxzZSBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGYud3JpdGVvbmx5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGYuY3JlYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGYudHJ1bmNhdGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgICAgZi5leGNsID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDY6XG4gICAgICAgIGYuYmluYXJ5ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYudGV4dCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vbmJsb2NrID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZsYWdzID0gZmxhZ3NbMl07XG4gIH1cbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgZiwgcGVybXMpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlzX25vZGUgPSBmc19ub2RlX3N1cHBvcnRlZCgpO1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmIChpc19ub2RlKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH0gZWxzZSByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpO1xuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgwLCB7IHJkb25seTogMSwgYWx0bmFtZTogXCIvZGV2L3N0ZGluXCIsIGlzQ2hhcmFjdGVyRGV2aWNlOiB0cnVlIH0pLFxuICAgIDAsXG4gICk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoXG4gICAgZmlsZSgxLCB7IGJ1ZmZlcmVkOiBpc19ub2RlID8gMSA6IDIsIHdyb25seTogMSwgaXNDaGFyYWN0ZXJEZXZpY2U6IHRydWUgfSksXG4gICAgMSxcbiAgKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChcbiAgICBmaWxlKDIsIHsgYnVmZmVyZWQ6IGlzX25vZGUgPyAxIDogMiwgd3Jvbmx5OiAxLCBpc0NoYXJhY3RlckRldmljZTogdHJ1ZSB9KSxcbiAgICAyLFxuICApO1xufSkoKTtcblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogTWxDaGFuaWRcbmNsYXNzIGNhbWxfbWxfY2hhbm5lbHNfc3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1hcCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgICB0aGlzLm9wZW5lZCA9IG5ldyBnbG9iYWxUaGlzLlNldCgpO1xuICB9XG5cbiAgY2xvc2UoY2hhbmlkKSB7XG4gICAgdGhpcy5vcGVuZWQuZGVsZXRlKGNoYW5pZCk7XG4gIH1cblxuICBnZXQoY2hhbmlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmdldChjaGFuaWQpO1xuICB9XG5cbiAgc2V0KGNoYW5pZCwgdmFsKSB7XG4gICAgaWYgKHZhbC5vcGVuZWQpIHRoaXMub3BlbmVkLmFkZChjaGFuaWQpO1xuICAgIHJldHVybiB0aGlzLm1hcC5zZXQoY2hhbmlkLCB2YWwpO1xuICB9XG5cbiAgYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZC52YWx1ZXMoKTtcbiAgfVxufVxuXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBjYW1sX21sX2NoYW5uZWxzX3N0YXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHMuZ2V0KGlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QoY2FwdHVyZWQsIGludG8pIHtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzLnNldChjYXB0dXJlZCwgbmV3Xyk7XG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpIHtcbiAgY2FtbF9tbF9jaGFubmVscy5zZXQoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCgpIHtcbiAgdmFyIGwgPSAwO1xuICB2YXIga2V5cyA9IGNhbWxfbWxfY2hhbm5lbHMuYWxsKCk7XG4gIGZvciAodmFyIGsgb2Yga2V5cykge1xuICAgIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChrKTtcbiAgICBpZiAoY2hhbi5vcGVuZWQgJiYgY2hhbi5vdXQpIGwgPSBbMCwgaywgbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9pb19idWZmZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiICsgZmQgKyBcIiBkb2Vzbid0IGV4aXN0XCIpO1xuICB2YXIgZmlsZSA9IGZkX2Rlc2MuZmlsZTtcbiAgdmFyIGNoYW5pZCA9IGZkX2Rlc2MuY2hhbmlkO1xuICB2YXIgYnVmZmVyZWQgPSBmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTogZmlsZSxcbiAgICBvZmZzZXQ6IGZpbGUucG9zKCksXG4gICAgZmQ6IGZkLFxuICAgIG9wZW5lZDogdHJ1ZSxcbiAgICBvdXQ6IHRydWUsXG4gICAgYnVmZmVyX2N1cnI6IDAsXG4gICAgYnVmZmVyOiBuZXcgVWludDhBcnJheShjYW1sX2lvX2J1ZmZlcl9zaXplKSxcbiAgICBidWZmZXJlZDogYnVmZmVyZWQsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCkge1xuICB2YXIgZmRfZGVzYyA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmIChmZF9kZXNjID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIiArIGZkICsgXCIgZG9lc24ndCBleGlzdFwiKTtcbiAgdmFyIGZpbGUgPSBmZF9kZXNjLmZpbGU7XG4gIHZhciBjaGFuaWQgPSBmZF9kZXNjLmNoYW5pZDtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6IGZpbGUsXG4gICAgb2Zmc2V0OiBmaWxlLnBvcygpLFxuICAgIGZkOiBmZCxcbiAgICBvcGVuZWQ6IHRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjogMCxcbiAgICBidWZmZXJfbWF4OiAwLFxuICAgIGJ1ZmZlcjogbmV3IFVpbnQ4QXJyYXkoY2FtbF9pb19idWZmZXJfc2l6ZSksXG4gICAgcmVmaWxsOiByZWZpbGwsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHMuc2V0KGNoYW5pZCwgY2hhbm5lbCk7XG4gIHJldHVybiBjaGFuaWQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgX2ZsYWdzKSB7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLCBtb2RlKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlO1xuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnk7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9tbF9jaGFubmVscy5jbG9zZShjaGFuaWQpO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGgoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsIGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICBmKHMpO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCwgZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yZWZpbGwoY2hhbikge1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkge1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKSB7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsIGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbi5mZCA9PT0gLTEpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQmFkIGZpbGUgZGVzY3JpcHRvclwiKTtcbiAgICB9XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoXG4gICAgICBjaGFuLmJ1ZmZlcixcbiAgICAgIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheShjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYgKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciwgY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH0gZWxzZSBpZiAoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZiAobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsIGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZSAociA8IG4pIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCArIHJdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZiAociA9PT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUoY2FtbF9ieXRlc19vZl91aW50OF9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLCAwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKTtcbiAgaWYgKHIgPCBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgMCk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludChjaGFuaWQpIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgcmVzID0gKChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYgKFxuICAgIHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heCAmJlxuICAgIHBvcyA8PSBjaGFuLm9mZnNldCAmJlxuICAgIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbiAgKSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCwgcG9zKSB7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3Vycik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZiAocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksIDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtY2hhbi5idWZmZXJfbWF4IHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgaWYgKHByZXZfbWF4ID09PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC1jaGFuLmJ1ZmZlcl9tYXggfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKCFjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYgKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09PSAwKSByZXR1cm4gMDtcbiAgaWYgKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoXG4gICAgICBjYW1sX3N1Yl91aW50OF9hcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IGNoYW4uYnVmZmVyX2N1cnI7ICkge1xuICAgICAgcG9zICs9IGNoYW4uZmlsZS53cml0ZShjaGFuLmJ1ZmZlciwgcG9zLCBjaGFuLmJ1ZmZlcl9jdXJyIC0gcG9zLCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmICghY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZiAoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiO1xuICB9XG4gIHN3aXRjaCAoY2hhbi5idWZmZXJlZCkge1xuICAgIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMCk7XG4gICAgICBpZiAoaWQgPCAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aCkgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICAgIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLCBidWZmZXIsIG9mZnNldCwgbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgYnVmZmVyLCBvZmZzZXQsIGxlbikge1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoXG4gICAgY2hhbmlkLFxuICAgIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksXG4gICAgb2Zmc2V0LFxuICAgIGxlbixcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIoY2hhbmlkLCBjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLCBzLCAwLCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUoY2hhbmlkLCB2LCBmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpIHtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLnNlZWsocG9zLCAwKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKSB7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLCBwb3MpIHtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50KGNoYW5pZCwgaSkge1xuICB2YXIgYXJyID0gWyhpID4+IDI0KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZiwgaSAmIDB4ZmZdO1xuICBjYW1sX21sX291dHB1dF90YShjaGFuaWQsIG5ldyBVaW50OEFycmF5KGFyciksIDAsIDQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLCB2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmICghdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvcihtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9BbGlhczogY2FtbF91bml4X2V4aXRcbi8vQWxpYXM6IHVuaXhfZXhpdFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdChjb2RlKSB7XG4gIGlmIChnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZXhpdCkgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKSB7XG4gIHN3aXRjaCAoZXhuWzJdKSB7XG4gICAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICAgIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICAgIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgICAgcmV0dXJuIDE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bikge1xuICB2YXIgciA9IFwiXCI7XG4gIGlmIChleG5bMF0gPT09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZiAoXG4gICAgICBleG4ubGVuZ3RoID09PSAzICYmXG4gICAgICBleG5bMl1bMF0gPT09IDAgJiZcbiAgICAgIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKVxuICAgICkge1xuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDI7XG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiBzdGFydCkgciArPSBcIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXTtcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgciArPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgTWxCeXRlcykge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByICs9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfSBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCI7XG4gIH0gZWxzZSBpZiAoZXhuWzBdID09PSAyNDgpIHtcbiAgICByICs9IGV4blsxXTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVycikgJiYgKGVyclswXSA9PT0gMCB8fCBlcnJbMF0gPT09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmIChoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsIGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZiAoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYgKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczoganNvb19zdGF0aWNfZW52XG52YXIganNvb19zdGF0aWNfZW52ID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbi8vUmVxdWlyZXM6IGpzb29fc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLCB2KSB7XG4gIGpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczoganNvb19zdGF0aWNfZW52XG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICBpZiAoanNvb19zdGF0aWNfZW52W25dKSByZXR1cm4ganNvb19zdGF0aWNfZW52W25dO1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52W25dICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZiAoZ2xvYmFsVGhpcy5qc29vX2VudiAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5qc29vX2VudltuXSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fZW52W25dO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudihuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnZfb3B0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52X29wdChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocildO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSkge1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52KG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdO1xuXG4gIGlmIChwcm9jZXNzPy5hcmd2Py5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2KF91bml0KSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKSB7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKSB7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gICAgaWYgKGNoaWxkX3Byb2Nlc3M/LmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQsIHsgc3RkaW86IFwiaW5oZXJpdFwiIH0pO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gIH0gZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKF9jbWQpIHtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSgpIHtcbiAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oX2IpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgfVxuICB9XG4gIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3cgXiAoMHhmZmZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICByZXR1cm4gWzAsIHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUoKSB7XG4gIHJldHVybiAzMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplKCkge1xuICByZXR1cm4gMzI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSgpIHtcbiAgcmV0dXJuICgweDdmZmZmZmZmIC8gNCkgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXgoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIlVuaXhcIiA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIoKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIldpbjMyXCIgPyAxIDogMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4oKSB7XG4gIHJldHVybiBvc190eXBlID09PSBcIkN5Z3dpblwiID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbnZhciBvc190eXBlID0ganNvb19pc193aW4zMiA/IFwiV2luMzJcIiA6IFwiVW5peFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW9fYnVmZmVyX3NpemVcbnZhciBjYW1sX2lvX2J1ZmZlcl9zaXplID0gNjU1MzY7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lvX2J1ZmZlcl9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2lvX2J1ZmZlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfaW9fYnVmZmVyX3NpemUoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfaW9fYnVmZmVyX3NpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RlbXBfZGlyX25hbWVcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfdGVtcF9kaXJfbmFtZShfdW5pdCkge1xuICBpZiAob3NfdHlwZSA9PT0gXCJXaW4zMlwiKSB7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHJlcXVpcmUoXCJub2RlOm9zXCIpLnRtcGRpcigpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGVtcF9kaXJfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vVmVyc2lvbjogPj0gNS40XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c190ZW1wX2Rpcl9uYW1lKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9zeXNfY29udmVydF9zaWduYWxfbnVtYmVyKHNpZ25vKSB7XG4gIHJldHVybiBzaWdubztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmV2X2NvbnZlcnRfc2lnbmFsX251bWJlclxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfc3lzX3Jldl9jb252ZXJ0X3NpZ25hbF9udW1iZXIoc2lnbm8pIHtcbiAgcmV0dXJuIHNpZ25vO1xufVxuXG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vSWY6ICF3YXNtXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYgKHByb2Nlc3M/Lm9uKSB7XG4gICAgcHJvY2Vzcy5vbihcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5lcnJvcikge1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobFtpXSA9PT0gXCJiXCIpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZyA9ICtsW2ldLnNsaWNlKDIpO1xuICAgICAgfSBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2Vudl9mbGFnXG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZztcblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cygpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9ydW50aW1lX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA/IDEgOiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UoX3VuaXQpIHtcbiAgcmV0dXJuIFswXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlKGIpIHtcbiAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZyA9IGI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlKCkge1xuICByZXR1cm4gWzBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KF9zbG90KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QoX2J0LCBfaWR4KSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoX2V4biwgX2J0KSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KF9yYnQpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSByZXR1cm4gZiguLi5hcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYoLi4uYXJncy5zbGljZSgwLCBuKSk7XG4gICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3Muc2xpY2UobikpO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIHJldHVybiBmKC4uLm5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKyspIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgICByZXR1cm4gZiguLi5uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSBmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09PSAwKSB7XG4gICAgcmV0dXJuIGYoLi4uYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG4gICAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKykgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgICAgcmV0dXJuIGYoLi4ubmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXJncy5sZW5ndGggPSBhcmdzTGVuO1xuICAgICAgICB2YXIgZyA9IGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncy5jb25jYXQoZXh0cmFfYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9JZjogZWZmZWN0c1xuLy9JZjogIWRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl9jcHMgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfY3BzX2Nsb3N1cmVcbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuLy9XZWFrZGVmXG52YXIgY2FtbF9jYWxsX2dlbl90dXBsZSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3MpIHtcbiAgICB2YXIgbiA9IGYubCA+PSAwID8gZi5sIDogKGYubCA9IGYubGVuZ3RoKTtcbiAgICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICAgIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICAgIHZhciBnID0gZiguLi5hcmdzLnNsaWNlKDAsIG4pKTtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChnLCBhcmdzLnNsaWNlKG4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRklYTUU6IFJlc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvZiBoYW5kbGluZyBzcGVjaWFsbHkgZCA9IDEgb3IgMlxuICAgICAgdmFyIGFyZ3NfID0gYXJncy5zbGljZSgpO1xuICAgICAgYXJnc18ubGVuZ3RoID0gYXJnc0xlbjtcbiAgICAgIHZhciByZXQgPSBjYW1sX2Nwc19jbG9zdXJlKFxuICAgICAgICBmdW5jdGlvbiAoLi4uZXh0cmFfYXJncykge1xuICAgICAgICAgIGlmIChleHRyYV9hcmdzLmxlbmd0aCA9PT0gMCkgZXh0cmFfYXJncyA9IFt1bmRlZmluZWRdO1xuICAgICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2RpcmVjdChmLCBhcmdzLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0LmwgPSBkO1xuICAgICAgcmV0LmNwcy5sID0gZCArIDE7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjYW1sX2NhbGxfZ2VuX2NwcyhmLCBhcmdzKSB7XG4gICAgaWYgKCFmLmNwcykge1xuICAgICAgdmFyIGsgPSBhcmdzLnBvcCgpO1xuICAgICAgcmV0dXJuIGsoY2FtbF9jYWxsX2dlbl9kaXJlY3QoZiwgYXJncykpO1xuICAgIH1cbiAgICB2YXIgbiA9IGYuY3BzLmwgPj0gMCA/IGYuY3BzLmwgOiAoZi5jcHMubCA9IGYuY3BzLmxlbmd0aCk7XG4gICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICAgIGlmIChkID09PSAwKSB7XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICAgIHZhciBrID0gYXJnc1thcmdzTGVuIC0gMV07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuX2NwcyhnLCBhcmdzKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZi5jcHMuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NMZW4tLTtcbiAgICAgIHZhciBhcmdzXyA9IGFyZ3Muc2xpY2UoKTtcbiAgICAgIGFyZ3NfLmxlbmd0aCA9IGFyZ3NMZW47XG4gICAgICB2YXIgY29udCA9IGNhbWxfY3BzX2Nsb3N1cmUoXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fZGlyZWN0KGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uICguLi5leHRyYV9hcmdzKSB7XG4gICAgICAgICAgaWYgKGV4dHJhX2FyZ3MubGVuZ3RoID09PSAwKSBleHRyYV9hcmdzID0gW3VuZGVmaW5lZF07XG4gICAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW5fY3BzKGYsIGFyZ3NfLmNvbmNhdChleHRyYV9hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdmFyIGsgPSBhcmdzW2FyZ3NMZW5dO1xuICAgICAgY29udC5sID0gZDtcbiAgICAgIGNvbnQuY3BzLmwgPSBkICsgMTtcbiAgICAgIHJldHVybiBrKGNvbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2NhbWxfY2FsbF9nZW5fZGlyZWN0LCBjYW1sX2NhbGxfZ2VuX2Nwc107XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuX3R1cGxlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vV2Vha2RlZlxudmFyIGNhbWxfY2FsbF9nZW4gPSBjYW1sX2NhbGxfZ2VuX3R1cGxlWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuX2Nwc1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlbl90dXBsZVxuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1dlYWtkZWZcbnZhciBjYW1sX2NhbGxfZ2VuX2NwcyA9IGNhbWxfY2FsbF9nZW5fdHVwbGVbMV07XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLCB2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgdmFyIG1heCA9IC0xO1xuICBpZiAoc3ltYikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkeCA9IHN5bWJbaV1bMl07XG4gICAgICBtYXggPSBNYXRoLm1heChtYXgsIGlkeCk7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IGlkeDtcbiAgICB9XG4gIH1cbiAgci5uZXh0X2lkeCA9IG1heCArIDE7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3RvcGxldmVsX3JlbG9jXG52YXIganNvb190b3BsZXZlbF9yZWxvYyA9IHVuZGVmaW5lZDtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczoganNvb190b3BsZXZlbF9yZWxvY1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZiAoanNvb190b3BsZXZlbF9yZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soanNvb190b3BsZXZlbF9yZWxvYywgW25hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpO1xuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdO1xuICAgICAgaWYgKG5pZCA+PSAwKSBuID0gbmlkO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZSB1bml0IGlzIHVua25vd24sIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGR5bmxpbmtpbmcgYSBwcmVjb21waWxlZCBqcyxcbiAgICAgICAgLy8gbGV0J3MgYWxsb2NhdGUgYSBmcmVzaCBpZHguXG4gICAgICAgIHZhciBuID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgubmV4dF9pZHgrKztcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV0gPSBuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmIChuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YShfdW5pdCkge1xuICByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykge1xuICByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByKGYpIHtcbiAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobywgZiwgdikge1xuICBvW2ZdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLCBmKSB7XG4gIHJldHVybiBvW2ZdO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobywgZikge1xuICBkZWxldGUgb1tmXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sIGMpIHtcbiAgcmV0dXJuIG8gaW5zdGFuY2VvZiBjID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlIChyZXM/Lmpvb190cmFtcCkge1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsIGFyZ3MsIGRpcmVjdCkge1xuICByZXR1cm4geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBhcmdzLCBqb29fZGlyZWN0OiBkaXJlY3QgfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX3dyYXBfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vQWxpYXM6IGNhbWxfY3BzX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZiwgYXJncykge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgam9vX3RyYW1wOiBmLFxuICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSksXG4gICAgfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0geyBqb29fdHJhbXA6IGhhbmRsZXIsIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV0gfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChyZXM/Lmpvb19hcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyhfdW5pdCkge1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKENPTkZJRyhcImVmZmVjdHNcIikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZiAoXG4gICAgICBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3IgJiZcbiAgICAgIGUubWVzc2FnZSAmJlxuICAgICAgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSlcbiAgICApXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmIChcbiAgICAgIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvciAmJlxuICAgICAgZS5tZXNzYWdlICYmXG4gICAgICBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKVxuICAgIClcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLCBlXTtcbiAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICBlbHNlXG4gICAgICBleG4gPSBbMCwgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcikgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2UgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9lbnZfZmxhZ1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy8gQmFja3RyYWNlcyBhcmUgdmVyeSBleHBlbnNpdmUsIHdlIG9ubHkgZW5hYmxlIHRoZW0gd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAvLyBhdCBjb21waWxlLXRpbWUgKC0tZW5hYmxlIHdpdGgtanMtZXJyb3IpIG9yIGF0IHN0YXJ0dXAgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MS5cbiAgLy8gTGlicmFyaWVzIHN1Y2ggYXMgQmFzZSB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlIGJhY2t0cmFjZXMgKHByb2dyYW1tYXRpY2FsbHkpIGJ1dFxuICAvLyBpdCdzIHdheSB0byBzbG93LiBIZXJlLCB3ZSBmb3JjZSB0aGUgZW5kLXVzZXIgdG8gb3B0LWluIHRvIGJhY2t0cmFjZXMuXG4gIGlmIChjYW1sX3JlY29yZF9iYWNrdHJhY2VfZW52X2ZsYWcgJiYgY2FtbF9yZWNvcmRfYmFja3RyYWNlX3J1bnRpbWVfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4bjtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZiAoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT09IDI0OClcbiAgICBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmIChleG4uanNfZXJyb3IpIHtcbiAgICByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3Rocm93X2pzX2V4Y2VwdGlvbihleG4pIHtcbiAgdGhyb3cgZXhuO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7XG4gIHJldHVybiAhIXg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkge1xuICByZXR1cm4geCB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgYlswXSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGJbaSArIDFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yICh2YXIgaSA9IGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLCBlLCBsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpIHtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICg7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmICgheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAnY2FtbF9qc192YXI6IFwiJyArXG4gICAgICAgIHggK1xuICAgICAgICAnXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLicsXG4gICAgKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6XG4gIHJldHVybiBldmFsPy4oeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykge1xuICByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGYoKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZihhWzFdKTtcbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdKTtcbiAgICBjYXNlIDY6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgICBjYXNlIDg6XG4gICAgICByZXR1cm4gZihhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG5ldyBjKCk7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0pO1xuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdKTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSk7XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pO1xuICAgIGNhc2UgNjpcbiAgICAgIHJldHVybiBuZXcgYyhhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdKTtcbiAgICBjYXNlIDc6XG4gICAgICByZXR1cm4gbmV3IGMoYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSk7XG4gICAgY2FzZSA4OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7XG4gICAgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbiAgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEYoKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBuZXcgYygpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdKTtcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSk7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0pO1xuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICBjYXNlIDU6XG4gICAgICByZXR1cm4gbmV3IGMoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSk7XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIG5ldyBjKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0pO1xuICAgIGNhc2UgNzpcbiAgICAgIHJldHVybiBuZXcgYyhhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkge1xuICAgIHJldHVybiBjLmFwcGx5KHRoaXMsIGEpO1xuICB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRigpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBjYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKSA6IHJlcztcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW3RoaXMsIGFyZ3NdKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGFyZ3MubGVuZ3RoID0gYXJpdHk7XG4gICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBhcmdzLmxlbmd0aCA9IGxlbjtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gZi5sID49IDAgPyBmLmwgOiAoZi5sID0gZi5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuIChmLmwgPj0gMCA/IGYubCA6IChmLmwgPSBmLmxlbmd0aCkpIC0gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMoeCwgeSkge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRG91YmxlRXF1YWxzOlxuICByZXR1cm4gKyh4ID09IHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzKHgsIHkpIHtcbiAgcmV0dXJuICsoeCA9PT0geSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcocykge1xuICAvLyBVc2VzIGFuIGluZGlyZWN0IGV2YWwgdGhyb3VnaCB0aGUgb3B0aW9uYWwgY2hhaW5pbmcgb3BlcmF0b3IuXG4gIC8vIChzZWUgaHR0cHM6Ly9tZG4uZGV2L2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2V2YWwpXG4gIC8vIFRoaXMgaXMgZmFzdGVyIGFuZCBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlcy5cbiAgLy8gQWxzbyBwcmVwZW5kcyBgXCJ1c2Ugc3RyaWN0XCJgIGRpcmVjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vdCBpbmhlcml0ZWRcbiAgLy8gZnJvbSB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uIHdpdGggYW4gaW5kaXJlY3QgZXZhbC5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsnICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gV2UgYWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHRoZSBhbWJpZ3VpdHkgYmV0d2VlbiBleHByZXNzaW9uc1xuICAvLyBhbmQgc3RhdGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHdlIGFjY2VwdCBpbnZhbGlkIGlucHV0cyBsaWtlXG4gIC8vIFwiYSkoYlwiLCBidXQgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZS5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOlxuICByZXR1cm4gZXZhbD8uKCdcInVzZSBzdHJpY3RcIjsoJyArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpICsgXCIpXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50KHRhZykge1xuICB0aHJvdyB0YWc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnKHRhZywgYXJnKSB7XG4gIHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyh0YWcsIGFyZ3MpIHtcbiAgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aChtc2cpIHtcbiAgaWYgKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlID0gWzI0OCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksIC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5KCkge1xuICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RpbWVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZXMoKSB7XG4gIGlmIChnbG9iYWxUaGlzLnByb2Nlc3M/LmNwdVVzYWdlKSB7XG4gICAgdmFyIHQgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3B1VXNhZ2UoKTtcbiAgICByZXR1cm4gQkxPQ0soMCwgdC51c2VyIC8gMWU2LCB0LnN5c3RlbSAvIDFlNiwgMCwgMCk7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZT8ubm93KSB7XG4gICAgcmV0dXJuIEJMT0NLKDAsIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93KCkgLyAxMDAwLCAwLCAwLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RpbWVzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0VVRDU2Vjb25kcygpLFxuICAgIGQuZ2V0VVRDTWludXRlcygpLFxuICAgIGQuZ2V0VVRDSG91cnMoKSxcbiAgICBkLmdldFVUQ0RhdGUoKSxcbiAgICBkLmdldFVUQ01vbnRoKCksXG4gICAgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldFVUQ0RheSgpLFxuICAgIGRveSxcbiAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgamFuLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAganVsLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICk7XG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGQuZ2V0U2Vjb25kcygpLFxuICAgIGQuZ2V0TWludXRlcygpLFxuICAgIGQuZ2V0SG91cnMoKSxcbiAgICBkLmdldERhdGUoKSxcbiAgICBkLmdldE1vbnRoKCksXG4gICAgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICBkLmdldERheSgpLFxuICAgIGRveSxcbiAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHxcbiAgICAgIDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8sXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKSB7XG4gIHZhciBkID0gbmV3IERhdGUodG1bNl0gKyAxOTAwLCB0bVs1XSwgdG1bNF0sIHRtWzNdLCB0bVsyXSwgdG1bMV0pLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLCB0LCB0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQpO1xuICBpZiAoIWZpbGUuaXNhdHR5KSByZXR1cm4gMDtcbiAgcmV0dXJuIGZpbGUuaXNhdHR5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KF9maWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvclxudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLFxuICBcIkVBQ0NFU1wiLFxuICBcIkVBR0FJTlwiLFxuICBcIkVCQURGXCIsXG4gIFwiRUJVU1lcIixcbiAgXCJFQ0hJTERcIixcbiAgXCJFREVBRExLXCIsXG4gIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLFxuICBcIkVGQVVMVFwiLFxuICBcIkVGQklHXCIsXG4gIFwiRUlOVFJcIixcbiAgXCJFSU5WQUxcIixcbiAgXCJFSU9cIixcbiAgXCJFSVNESVJcIixcbiAgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIixcbiAgXCJFTkFNRVRPT0xPTkdcIixcbiAgXCJFTkZJTEVcIixcbiAgXCJFTk9ERVZcIixcbiAgXCJFTk9FTlRcIixcbiAgXCJFTk9FWEVDXCIsXG4gIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsXG4gIFwiRU5PU1BDXCIsXG4gIFwiRU5PU1lTXCIsXG4gIFwiRU5PVERJUlwiLFxuICBcIkVOT1RFTVBUWVwiLFxuICBcIkVOT1RUWVwiLFxuICBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIixcbiAgXCJFUElQRVwiLFxuICBcIkVSQU5HRVwiLFxuICBcIkVST0ZTXCIsXG4gIFwiRVNQSVBFXCIsXG4gIFwiRVNSQ0hcIixcbiAgXCJFWERFVlwiLFxuICBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIixcbiAgXCJFQUxSRUFEWVwiLFxuICBcIkVOT1RTT0NLXCIsXG4gIFwiRURFU1RBRERSUkVRXCIsXG4gIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsXG4gIFwiRU5PUFJPVE9PUFRcIixcbiAgXCJFUFJPVE9OT1NVUFBPUlRcIixcbiAgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsXG4gIFwiRVBGTk9TVVBQT1JUXCIsXG4gIFwiRUFGTk9TVVBQT1JUXCIsXG4gIFwiRUFERFJJTlVTRVwiLFxuICBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLFxuICBcIkVORVRVTlJFQUNIXCIsXG4gIFwiRU5FVFJFU0VUXCIsXG4gIFwiRUNPTk5BQk9SVEVEXCIsXG4gIFwiRUNPTk5SRVNFVFwiLFxuICBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsXG4gIFwiRU5PVENPTk5cIixcbiAgXCJFU0hVVERPV05cIixcbiAgXCJFVE9PTUFOWVJFRlNcIixcbiAgXCJFVElNRURPVVRcIixcbiAgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIixcbiAgXCJFSE9TVFVOUkVBQ0hcIixcbiAgXCJFTE9PUFwiLFxuICBcIkVPVkVSRkxPV1wiLFxuXTtcblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5O1xuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIC8vIGVycm5vIGlzIGV4cGVjdGVkIHRvIGJlIHBvc2l0aXZlXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIC1lcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIiksXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmVycm9yXG4vL1JlcXVpcmVzOiB1bml4X2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N0cmVycm9yKGVycm5vKSB7XG4gIGNvbnN0IHV0aWwgPSByZXF1aXJlKFwibm9kZTp1dGlsXCIpO1xuICBpZiAoZXJybm8gPj0gMCkge1xuICAgIGNvbnN0IGNvZGUgPSB1bml4X2Vycm9yW2Vycm5vXTtcbiAgICByZXR1cm4gdXRpbFxuICAgICAgLmdldFN5c3RlbUVycm9yTWFwKClcbiAgICAgIC5lbnRyaWVzKClcbiAgICAgIC5maW5kKCh4KSA9PiB4WzFdWzBdID09PSBjb2RlKVsxXVsxXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXRpbC5nZXRTeXN0ZW1FcnJvck1lc3NhZ2UoZXJybm8pO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyZXJyb3Jcbi8vUmVxdWlyZXM6IHVuaXhfZXJyb3Jcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3RyZXJyb3IoZXJybm8pIHtcbiAgY29uc3QgY29kZSA9IHVuaXhfZXJyb3JbZXJybm9dO1xuICByZXR1cm4gY29kZSB8fCBcIlVua25vd24gZXJyb3IgXCIgKyBlcnJubztcbn1cblxuLy9Qcm92aWRlczogdW5peF9lcnJvcl9tZXNzYWdlXG4vL0FsaWFzOiBjYW1sX3VuaXhfZXJyb3JfbWVzc2FnZVxuLy9SZXF1aXJlczogY2FtbF9zdHJlcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIHVuaXhfZXJyb3JfbWVzc2FnZShlcnIpIHtcbiAgY29uc3QgZXJybm8gPSB0eXBlb2YgZXJyID09PSBcIm51bWJlclwiID8gZXJyIDogLWVyclsxXTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNhbWxfc3RyZXJyb3IoZXJybm8pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jaGRpclxuLy9BbGlhczogdW5peF9jaGRpclxuZnVuY3Rpb24gY2FtbF91bml4X2NoZGlyKGRpcikge1xuICByZXR1cm4gY2FtbF9zeXNfY2hkaXIoZGlyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gZmFsc2UsXG4gICAgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXRfNjQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChcbiAgICByb290LnJlc3QsXG4gICAgLyogbGFyZ2UgKi8gdHJ1ZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyBmYWxzZSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0XzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KFxuICAgIHJvb3QucmVzdCxcbiAgICAvKiBsYXJnZSAqLyB0cnVlLFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NobW9kXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9jaG1vZFxuZnVuY3Rpb24gY2FtbF91bml4X2NobW9kKG5hbWUsIHBlcm1zKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2NobW9kOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmNobW9kKHJvb3QucmVzdCwgcGVybXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vQWxpYXM6IHVuaXhfcmVuYW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVuYW1lKG8sIG4pIHtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmIChvX3Jvb3QuZGV2aWNlICE9PSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSwgXCJFWERFVlwiLCBcInJlbmFtZVwiKTtcbiAgaWYgKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSkgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm90IGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X2xpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9saW5rKGZvbGxvdywgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2UubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIC8vIFdlIGNhbid0IGNvbnRyb2wgd2hldGhlciBhICdzcmMnIHN5bWxpbmsgaXMgZm9sbG93ZWQgb3Igbm90LlxuICAvLyBTbyB3ZSBmYWlsIHdoZW4gJ2ZvbGxvdycgaXMgc2V0LCBhcyBkb2N1bWVudGVkIGluIHRoZSBVbml4IG1vZHVsZS5cbiAgaWYgKHR5cGVvZiBmb2xsb3cgIT09IFwibnVtYmVyXCIpXG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoLyogcmFpc2UgVW5peF9lcnJvciAqLyAxLCBcIkVOT1NZU1wiLCBcImxpbmtcIik7XG4gIGlmIChzcmNfcm9vdC5kZXZpY2UgIT09IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRVhERVZcIiwgXCJsaW5rXCIpO1xuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLmxpbmsoXG4gICAgc3JjX3Jvb3QucmVzdCxcbiAgICBkc3Rfcm9vdC5yZXN0LFxuICAgIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmICghZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gZHN0X3Jvb3QuZGV2aWNlLnN5bWxpbmsoXG4gICAgdG9fZGlyLFxuICAgIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHNyYyksXG4gICAgZHN0X3Jvb3QucmVzdCxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdXRpbWVzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91dGltZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF91dGltZXMobmFtZSwgYXRpbWUsIG10aW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudXRpbWVzKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91dGltZXM6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByb290LmRldmljZS51dGltZXMocm9vdC5yZXN0LCBhdGltZSwgbXRpbWUsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGUobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUocm9vdC5yZXN0LCBsZW4sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2ludDY0X3RvX2Zsb2F0XG4vL0FsaWFzOiB1bml4X3RydW5jYXRlXzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfdHJ1bmNhdGVfNjQobmFtZSwgbGVuKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudHJ1bmNhdGUpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3RydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UudHJ1bmNhdGUoXG4gICAgcm9vdC5yZXN0LFxuICAgIGNhbWxfaW50NjRfdG9fZmxvYXQobGVuKSxcbiAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUsXG4gICk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfYWNjZXNzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9hY2Nlc3NcbmZ1bmN0aW9uIGNhbWxfdW5peF9hY2Nlc3MobmFtZSwgZmxhZ3MpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnIgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgZi53ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGYueCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBmLmYgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmFjY2Vzcykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfYWNjZXNzOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcm9vdC5kZXZpY2UuYWNjZXNzKHJvb3QucmVzdCwgZiwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9zeXNfZmRzLCBNbENoYW5pZFxuLy9BbGlhczogdW5peF9vcGVuXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbihuYW1lLCBmbGFncywgcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUgKGZsYWdzKSB7XG4gICAgc3dpdGNoIChmbGFnc1sxXSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmLnJkb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBmLndyb25seSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBmLnJkd3IgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZi5ub25ibG9jayA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0OlxuICAgICAgICBmLmFwcGVuZCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgICBmLmNyZWF0ZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA2OlxuICAgICAgICBmLnRydW5jYXRlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIGYuZXhjbCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OlxuICAgICAgICBmLm5vY3R0eSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA5OlxuICAgICAgICBmLmRzeW5jID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBmLnN5bmMgPSAxO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgZmxhZ3MgPSBmbGFnc1syXTtcbiAgfVxuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LCBmLCBwZXJtcywgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgdmFyIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIHZhciBjaGFuaWQgPSBuZXcgTWxDaGFuaWQoaWR4KTtcbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSB7IGZpbGU6IGZpbGUsIGNoYW5pZDogY2hhbmlkIH07XG4gIHJldHVybiBpZHggfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2ZkcywgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgY21kKSB7XG4gIHZhciBmZF9kZXNjID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYgKGZkX2Rlc2MgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgY21kKTtcbiAgcmV0dXJuIGZkX2Rlc2MuZmlsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzdGF0XG4vL0FsaWFzOiB1bml4X2ZzdGF0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3RhdChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3RhdFwiKTtcbiAgaWYgKCFmaWxlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyBmYWxzZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mc3RhdF82NFxuLy9BbGlhczogdW5peF9mc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3VuaXhfZnN0YXRfNjQoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZnN0YXRcIik7XG4gIGlmICghZmlsZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mc3RhdDY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3RhdCgvKiBsYXJnZSAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZjaG1vZFxuLy9BbGlhczogdW5peF9mY2htb2Rcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2ZjaG1vZChmZCwgcGVybXMpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiZmNobW9kXCIpO1xuICBpZiAoIWZpbGUuY2htb2QpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZjaG1vZDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBmaWxlLmNobW9kKHBlcm1zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZzeW5jXG4vL0FsaWFzOiB1bml4X2ZzeW5jXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfdW5peF9mc3luYyhmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmc3luY1wiKTtcbiAgaWYgKCFmaWxlLnN5bmMpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2ZzeW5jOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIGZpbGUuc3luYygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfd3JpdGVcbi8vQWxpYXM6IHVuaXhfd3JpdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF91bml4X3dyaXRlKGZkLCBidWYsIHBvcywgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgdmFyIHdyaXR0ZW4gPSAwO1xuICB3aGlsZSAobGVuID4gMCkge1xuICAgIHZhciBuID0gZmlsZS53cml0ZShhLCBwb3MsIGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgICB3cml0dGVuICs9IG47XG4gICAgcG9zICs9IG47XG4gICAgbGVuIC09IG47XG4gIH1cbiAgcmV0dXJuIHdyaXR0ZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zaW5nbGVfd3JpdGVcbi8vQWxpYXM6IHVuaXhfc2luZ2xlX3dyaXRlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfdW5peF9zaW5nbGVfd3JpdGUoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwid3JpdGVcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICByZXR1cm4gZmlsZS53cml0ZShcbiAgICBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZiksXG4gICAgcG9zLFxuICAgIGxlbixcbiAgICAvKiByYWlzZSB1bml4X2Vycm9yICovIDEsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF93cml0ZV9iaWdhcnJheVxuLy9BbGlhczogY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX3VuaXhfbG9va3VwX2ZpbGVcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3VuaXhfd3JpdGVfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcIndyaXRlXCIpO1xuICB2YXIgd3JpdHRlbiA9IDA7XG4gIHdoaWxlIChsZW4gPiAwKSB7XG4gICAgdmFyIG4gPSBmaWxlLndyaXRlKGEsIHBvcywgbGVuLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xuICAgIHdyaXR0ZW4gKz0gbjtcbiAgICBwb3MgKz0gbjtcbiAgICBsZW4gLT0gbjtcbiAgfVxuICByZXR1cm4gd3JpdHRlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRcbi8vQWxpYXM6IHVuaXhfcmVhZFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZChmZCwgYnVmLCBwb3MsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJyZWFkXCIpO1xuICByZXR1cm4gZmlsZS5yZWFkKFxuICAgIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKSxcbiAgICBwb3MsXG4gICAgbGVuLFxuICAgIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSxcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRfYmlnYXJyYXlcbi8vQWxpYXM6IHVuaXhfcmVhZF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF91bml4X2xvb2t1cF9maWxlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRfYmlnYXJyYXkoZmQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgdmFyIGEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1Zik7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcInJlYWRcIik7XG4gIHJldHVybiBmaWxlLnJlYWQoYSwgcG9zLCBsZW4sIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc2Vla1xuLy9BbGlhczogdW5peF9sc2Vla1xuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlXG5mdW5jdGlvbiBjYW1sX3VuaXhfbHNlZWsoZmQsIGxlbiwgd2hlbmNlKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImxzZWVrXCIpO1xuICByZXR1cm4gZmlsZS5zZWVrKGxlbiwgd2hlbmNlLCAvKiByYWlzZSB1bml4X2Vycm9yICovIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHNlZWtfNjRcbi8vQWxpYXM6IHVuaXhfbHNlZWtfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9pbnQ2NF90b19mbG9hdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzZWVrXzY0KGZkLCBsZW4sIHdoZW5jZSkge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJsc2Vla1wiKTtcbiAgcmV0dXJuIGZpbGUuc2VlayhjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIHdoZW5jZSwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Z0cnVuY2F0ZVxuLy9BbGlhczogdW5peF9mdHJ1bmNhdGVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF91bml4X2Z0cnVuY2F0ZShmZCwgbGVuKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImZ0cnVuY2F0ZVwiKTtcbiAgaWYgKCFmaWxlLnRydW5jYXRlKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9mdHJ1bmNhdGU6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICBmaWxlLnRydW5jYXRlKGxlbiwgLyogcmFpc2UgdW5peF9lcnJvciAqLyAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9mdHJ1bmNhdGVfNjRcbi8vQWxpYXM6IHVuaXhfZnRydW5jYXRlXzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9va3VwX2ZpbGUsIGNhbWxfZmFpbHdpdGgsIGNhbWxfaW50NjRfdG9fZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9mdHJ1bmNhdGVfNjQoZmQsIGxlbikge1xuICB2YXIgZmlsZSA9IGNhbWxfdW5peF9sb29rdXBfZmlsZShmZCwgXCJmdHJ1bmNhdGVcIik7XG4gIGlmICghZmlsZS50cnVuY2F0ZSkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfZnRydW5jYXRlXzY0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgZmlsZS50cnVuY2F0ZShjYW1sX2ludDY0X3RvX2Zsb2F0KGxlbiksIC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2Vcbi8vQWxpYXM6IHVuaXhfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZVxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF91bml4X2xvb2t1cF9maWxlKGZkLCBcImNsb3NlXCIpO1xuICBmaWxlLmNsb3NlKC8qIHJhaXNlIHVuaXhfZXJyb3IgKi8gMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9BbGlhczogdW5peF9pbmNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5faW5jaGFubmVsX29mX2ZpbGVkZXNjclxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvb2t1cF9maWxlLCBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuZnVuY3Rpb24gY2FtbF91bml4X2luY2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgZmlsZS5jaGVja19zdHJlYW1fc2VtYW50aWNzKFwiaW5fY2hhbm5lbF9vZl9kZXNjclwiKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB1bml4X291dGNoYW5uZWxfb2ZfZmlsZWRlc2NyXG4vL0FsaWFzOiB3aW5fb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3Jcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb29rdXBfZmlsZSwgY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG5mdW5jdGlvbiBjYW1sX3VuaXhfb3V0Y2hhbm5lbF9vZl9maWxlZGVzY3IoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3VuaXhfbG9va3VwX2ZpbGUoZmQsIFwib3V0X2NoYW5uZWxfb2ZfZGVzY3JcIik7XG4gIGZpbGUuY2hlY2tfc3RyZWFtX3NlbWFudGljcyhcIm91dF9jaGFubmVsX29mX2Rlc2NyXCIpO1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0dWlkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldGV1aWRcbi8vQWxpYXM6IHVuaXhfZ2V0ZXVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGV1aWQoX3VuaXQpIHtcbiAgaWYgKGdsb2JhbFRoaXMucHJvY2Vzcz8uZ2V0ZXVpZCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0ZXVpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0Z2lkXG4vL0FsaWFzOiB1bml4X2dldGdpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldGdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRnaWQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldGdpZCgpO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0ZWdpZFxuLy9BbGlhczogdW5peF9nZXRlZ2lkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0ZWdpZChfdW5pdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5wcm9jZXNzPy5nZXRlZ2lkKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXRlZ2lkKCk7XG4gIH1cbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd25hbVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHduYW1cbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuLy9BbGlhczogY2FtbF91bml4X2dldGdybmFtXG4vL0FsaWFzOiB1bml4X2dldGdybmFtXG4vL0FsaWFzOiBjYW1sX3VuaXhfZ2V0Z3JnaWRcbi8vQWxpYXM6IHVuaXhfZ2V0Z3JnaWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd25hbShfdW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsoX3VuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCkgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlcjogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJyZWFkZGlyXCIpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcigvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIFwiRUJBREZcIiwgXCJjbG9zZWRpclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihyYWlzZV91bml4LCBjb2RlLCBjbWQsIG1zZywgcGF0aCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpXG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIGNtZCwgcGF0aCkpO1xuICBlbHNlIHtcbiAgICB2YXIgbXNnID0gY29kZSArIFwiOiBcIiArIG1zZyArIFwiLCBcIiArIGNtZDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSBtc2cgKz0gXCIgJ1wiICsgcGF0aCArIFwiJ1wiO1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG1zZyk7XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIiA/IG5hbWUgKyBcIi9cIiA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG5lbHNlIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKSB7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9XG4gIGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHxcbiAgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKSB7fVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczoganNvb19pc193aW4zMlxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSBcIi9cIikgcmV0dXJuIFtcIlwiLCBwYXRoLnNsaWNlKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9XG4gICAgICAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgdmFyIGlzVW5jID0gZGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gXCI6XCI7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChyZXN1bHRbMl0gfHwgaXNVbmMpIHtcbiAgICAgIHZhciByb290ID0gcmVzdWx0WzFdIHx8IFwiXCI7XG4gICAgICB2YXIgc2VwID0gcmVzdWx0WzJdIHx8IFwiXCI7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc2xpY2Uocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4ganNvb19pc193aW4zMiA/IHdpbjMyIDogcG9zaXg7XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoKG5hbWUpIHtcbiAgbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiAoIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkpIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdCgvWy9cXFxcXS8pO1xuICB2YXIgbmNvbXAgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChjb21wW2ldKSB7XG4gICAgICBjYXNlIFwiLi5cIjpcbiAgICAgICAgbmNvbXAucG9wKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmNvbXAucHVzaChjb21wW2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdO1xuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgICBwYXRoOiBjYW1sX3Jvb3QsXG4gICAgZGV2aWNlOiBuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCksXG4gIH0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtcbiAgcGF0aDogXCIvc3RhdGljL1wiLFxuICBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKSxcbn0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpIHtcbiAgdmFyIHByZXYgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF07XG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZiAoXG4gICAgICBuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09PSAwICYmXG4gICAgICAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKVxuICAgIClcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gIH1cbiAgaWYgKCFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdD8ubWF0Y2goL15bYS16QS1aXTpcXC8kLykpIHtcbiAgICAgIHZhciBtID0geyBwYXRoOiByb290LCBkZXZpY2U6IG5ldyBNbE5vZGVEZXZpY2Uocm9vdCkgfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtcbiAgICAgICAgcGF0aDogbS5wYXRoLFxuICAgICAgICBkZXZpY2U6IG0uZGV2aWNlLFxuICAgICAgICByZXN0OiBuYW1lLnNsaWNlKG0ucGF0aC5sZW5ndGgsIG5hbWUubGVuZ3RoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsIGYpIHtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goeyBwYXRoOiBuYW1lLCBkZXZpY2U6IG5ldyBNbEZha2VEZXZpY2UobmFtZSwgZikgfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSkge1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmIChqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT09IG5hbWUpIGlkeCA9IGk7XG4gIGlmIChpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LCAxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vQWxpYXM6IGNhbWxfdW5peF9nZXRjd2Rcbi8vQWxpYXM6IHVuaXhfZ2V0Y3dkXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZiAocm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCkpIHtcbiAgICBpZiAocm9vdC5yZXN0KVxuICAgICAgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVOT1RESVJcIixcbiAgICAgIFwiY2hkaXJcIixcbiAgICAgIFwibm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhkaXIpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZGlyKSwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lLCByYWlzZV91bml4KSB7XG4gIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgIHJhaXNlX3VuaXgsXG4gICAgXCJFTk9FTlRcIixcbiAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICBuYW1lLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSBsW2kgKyAxXSA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYSA/IDEgOiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobywgbikge1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYgKG9fcm9vdC5kZXZpY2UgIT09IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZiAoIW9fcm9vdC5kZXZpY2UucmVuYW1lKSBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKF92ZmQsIF9raW5kLCBfbGF5b3V0LCBfc2hhcmVkLCBfZGltcywgX3Bvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndiwgX2FyZ24pIHtcbiAgLy8gYXJnbiA9PT0gNlxuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLCBhcmd2WzFdLCBhcmd2WzJdLCBhcmd2WzNdLCBhcmd2WzRdLCBhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsIGNvbnRlbnQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSkgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZiAoIWdsb2JhbFRoaXMuanNvb19mc190bXApIGdsb2JhbFRoaXMuanNvb19mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wLnB1c2goeyBuYW1lOiBuYW1lLCBjb250ZW50OiBjb250ZW50IH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCgpIHtcbiAgdmFyIHRtcCA9IGdsb2JhbFRoaXMuanNvb19mc190bXA7XG4gIGlmICh0bXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKykge1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSwgdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmpzb29fZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LCBjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50KG5hbWUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiA/IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG5hbWUpIDogbmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCwgeyByZG9ubHk6IDEgfSk7XG4gICAgdmFyIGxlbiA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKGJ1ZiwgMCwgbGVuLCBmYWxzZSk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGJ1Zik7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRGV2aWNlIHtcbiAgY29uc3RydWN0b3Iocm9vdCwgZikge1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5sb29rdXBGdW4gPSBmO1xuICB9XG5cbiAgbm0obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJvb3QgKyBuYW1lO1xuICB9XG5cbiAgY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSkge1xuICAgIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIGxvb2t1cChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcodGhpcy5yb290KSxcbiAgICAgICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobmFtZSksXG4gICAgICApO1xuICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleGlzdHMobmFtZSwgZG9fbm90X2xvb2t1cCkge1xuICAgIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gICAgaWYgKG5hbWUgPT09IFwiXCIpIHJldHVybiAxO1xuICAgIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICAgIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gICAgaWYgKCFkb19ub3RfbG9va3VwKSB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdID8gMSA6IDA7XG4gIH1cblxuICBpc0ZpbGUobmFtZSkge1xuICAgIGlmICh0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkpIHtcbiAgICAgIGlmICghdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkZGlyKG5ld25hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuZXduYW1lKSArIFwiIDogZGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9sZF9zbGFzaCA9IHRoaXMuc2xhc2gob2xkbmFtZSk7XG4gICAgdmFyIG5ld19zbGFzaCA9IHRoaXMuc2xhc2gobmV3bmFtZSk7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuZXdfc2xhc2gpO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLnJlYWRkaXIob2xkbmFtZSkpIHtcbiAgICAgIHRoaXMucmVuYW1lKG9sZF9zbGFzaCArIGYsIG5ld19zbGFzaCArIGYpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W29sZF9zbGFzaF07XG4gIH1cblxuICByZW5hbWUob2xkbmFtZSwgbmV3bmFtZSkge1xuICAgIGlmICghdGhpcy5leGlzdHMob2xkbmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG9sZG5hbWUpICsgXCIgOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIGlmICh0aGlzLmlzX2RpcihvbGRuYW1lKSkge1xuICAgICAgdGhpcy5yZW5hbWVfZGlyKG9sZG5hbWUsIG5ld25hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leGlzdHMobmV3bmFtZSkgJiYgdGhpcy5pc19kaXIobmV3bmFtZSkpIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgICAgdGhpcy5ubShuZXduYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFtuZXduYW1lXSA9IHRoaXMuY29udGVudFtvbGRuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbb2xkbmFtZV07XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgX21vZGUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICAgIHBhcmVudCA9IHBhcmVudD8uWzFdIHx8IFwiXCI7XG4gICAgaWYgKCF0aGlzLmV4aXN0cyhwYXJlbnQpKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRU5PRU5UXCIsXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICApO1xuICAgIGlmICghdGhpcy5pc19kaXIocGFyZW50KSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJta2RpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHZhciBuYW1lX3NsYXNoID0gbmFtZSA9PT0gXCJcIiA/IFwiXCIgOiB0aGlzLnNsYXNoKG5hbWUpO1xuICAgIGlmICghdGhpcy5leGlzdHMobmFtZSkpXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIixcbiAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICk7XG4gICAgaWYgKCF0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICByYWlzZV91bml4LFxuICAgICAgICBcIkVOT1RESVJcIixcbiAgICAgICAgXCJybWRpclwiLFxuICAgICAgICBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgKTtcbiAgICBmb3IgKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgICAgaWYgKG4uc3RhcnRzV2l0aChuYW1lX3NsYXNoKSAmJiBuICE9PSBuYW1lX3NsYXNoKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRU5PVEVNUFRZXCIsXG4gICAgICAgICAgXCJybWRpclwiLFxuICAgICAgICAgIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiLFxuICAgICAgICAgIHRoaXMubm0obmFtZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG4gIH1cblxuICByZWFkZGlyKG5hbWUpIHtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgPT09IFwiXCIgPyBcIlwiIDogdGhpcy5zbGFzaChuYW1lKTtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgICB2YXIgc2VlbiA9IHt9O1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmIChuLnN0YXJ0c1dpdGgobmFtZV9zbGFzaCkgJiYgbiAhPT0gbmFtZV9zbGFzaCkge1xuICAgICAgICB2YXIgbGFzdCA9IG4uaW5kZXhPZihcIi9cIiwgbmFtZV9zbGFzaC5sZW5ndGgpO1xuICAgICAgICBpZiAobGFzdCA8IDApIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBtID0gbi5zbGljZShuYW1lX3NsYXNoLmxlbmd0aCwgbGFzdCk7XG4gICAgICAgIGlmIChtICYmICFzZWVuW21dKSB7XG4gICAgICAgICAgc2VlblttXSA9IHRydWU7XG4gICAgICAgICAgYS5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgb3BlbmRpcihuYW1lLCByYWlzZV91bml4KSB7XG4gICAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gICAgdmFyIGMgPSBmYWxzZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRTeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjKVxuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICAgIFwiRUJBREZcIixcbiAgICAgICAgICAgIFwicmVhZGRpclwiLFxuICAgICAgICAgICAgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGkgPT09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICAgICAgaSsrO1xuICAgICAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9O1xuICAgICAgfSxcbiAgICAgIGNsb3NlU3luYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYylcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgICBcIkVCQURGXCIsXG4gICAgICAgICAgICBcInJlYWRkaXJcIixcbiAgICAgICAgICAgIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiLFxuICAgICAgICAgICk7XG4gICAgICAgIGMgPSB0cnVlO1xuICAgICAgICBhID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpc19kaXIobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSA/IDEgOiAwO1xuICB9XG5cbiAgdW5saW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKG5hbWUsIHRydWUpKSB7XG4gICAgICAvLyBbdHJ1ZV0gbWVhbnMgbm8gXCJsb29rdXBcIiBpZiBub3QgZm91bmQuXG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFTk9FTlRcIixcbiAgICAgICAgXCJ1bmxpbmtcIixcbiAgICAgICAgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYWNjZXNzKG5hbWUsIF9mbGFncywgcmFpc2VfdW5peCkge1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVBQ0NFU1NcIixcbiAgICAgICAgICBcImFjY2Vzc1wiLFxuICAgICAgICAgIFwicGVybWlzc2lvbiBkZW5pZWQsXCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBfcGVybXMsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgZmlsZTtcbiAgICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFSVNESVJcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCIsXG4gICAgICAgICAgdGhpcy5ubShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpXG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgICAgXCJFRVhJU1RcIixcbiAgICAgICAgICBcIm9wZW5cIixcbiAgICAgICAgICBcImZpbGUgYWxyZWFkeSBleGlzdHNcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGlmIChmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKDApO1xuICAgIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSh0aGlzLm5tKG5hbWUpLCByYWlzZV91bml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbiAgfVxuXG4gIHRydW5jYXRlKG5hbWUsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHZhciBmaWxlO1xuICAgIHRoaXMubG9va3VwKG5hbWUpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSlcbiAgICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgICBcIkVJU0RJUlwiLFxuICAgICAgICAgIFwib3BlblwiLFxuICAgICAgICAgIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIixcbiAgICAgICAgICB0aGlzLm5tKG5hbWUpLFxuICAgICAgICApO1xuICAgICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICAgIGZpbGUudHJ1bmNhdGUobGVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUodGhpcy5ubShuYW1lKSwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXIobmFtZSwgY29udGVudCkge1xuICAgIHZhciBmaWxlO1xuICAgIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pXG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGlmIChjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKSBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gICAgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gICAgZWxzZSBpZiAoY29udGVudC50b1N0cmluZykge1xuICAgICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoXG4gICAgICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSksXG4gICAgICApO1xuICAgICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICAgIH0gZWxzZVxuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXG4gICAgICAgIHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiLFxuICAgICAgKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG5jbGFzcyBNbEZha2VGaWxlIGV4dGVuZHMgTWxGaWxlIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gY29udGVudDtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbikge1xuICAgIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gICAgdmFyIG9sZF9sZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvbGQpO1xuICAgIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbiB8IDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgTWF0aC5taW4obGVuLCBvbGRfbGVuKSk7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG4gIH1cblxuICB3cml0ZShvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICAgIH1cbiAgICBjYW1sX2JsaXRfYnl0ZXMoXG4gICAgICBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5KGJ1ZiksXG4gICAgICBwb3MsXG4gICAgICB0aGlzLmRhdGEsXG4gICAgICBvZmZzZXQsXG4gICAgICBsZW4sXG4gICAgKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG5cbiAgcmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gICAgaWYgKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4gfCAwKTtcbiAgICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3JcbmNsYXNzIE1sRmFrZUZkX291dCBleHRlbmRzIE1sRmFrZUZpbGUge1xuICBjb25zdHJ1Y3RvcihmZCwgZmxhZ3MpIHtcbiAgICBzdXBlcihjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoX3MpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgaWYgKGZkID09PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGVsc2UgaWYgKGZkID09PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbnNvbGUubG9nID09PSBcImZ1bmN0aW9uXCIpIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdHJ1bmNhdGUoX2xlbiwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgcmFpc2VfdW5peCxcbiAgICAgIFwiRUlOVkFMXCIsXG4gICAgICBcImZ0cnVuY2F0ZVwiLFxuICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgKTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgd3JpdHRlbiA9IGxlbjtcbiAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGVuID4gMCAmJlxuICAgICAgICBwb3MgPj0gMCAmJlxuICAgICAgICBwb3MgKyBsZW4gPD0gYnVmLmxlbmd0aCAmJlxuICAgICAgICBidWZbcG9zICsgbGVuIC0gMV0gPT09IDEwXG4gICAgICApXG4gICAgICAgIGxlbi0tO1xuICAgICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICAgIHJldHVybiB3cml0dGVuO1xuICAgIH1cbiAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgIHJhaXNlX3VuaXgsXG4gICAgICBcIkVCQURGXCIsXG4gICAgICBcIndyaXRlXCIsXG4gICAgICBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIixcbiAgICApO1xuICB9XG5cbiAgcmVhZChfYnVmLCBfcG9zLCBfbGVuLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFQkFERlwiLCBcInJlYWRcIiwgXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCIpO1xuICB9XG5cbiAgc2VlayhfbGVuLCBfd2hlbmNlLCByYWlzZV91bml4KSB7XG4gICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IocmFpc2VfdW5peCwgXCJFU1BJUEVcIiwgXCJsc2Vla1wiLCBcImlsbGVnYWwgc2Vla1wiKTtcbiAgfVxuICBwb3MoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKF9jbWQpIHt9XG59XG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvclxuY2xhc3MgTWxGYWtlRmQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBmbGFncykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2Vla2VkID0gZmFsc2U7XG4gIH1cblxuICBlcnJfY2xvc2VkKGNtZCwgcmFpc2VfdW5peCkge1xuICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRUJBREZcIiwgY21kLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIik7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgaWYgKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGgoKTtcbiAgICB0aGlzLmVycl9jbG9zZWQoXCJsZW5ndGhcIik7XG4gIH1cblxuICB0cnVuY2F0ZShsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICBpZiAoISh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKVxuICAgICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgICByYWlzZV91bml4LFxuICAgICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgICAgXCJ0cnVuY2F0ZVwiLFxuICAgICAgICAgIFwiaW52YWxpZCBhcmd1bWVudFwiLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZS50cnVuY2F0ZShsZW4pO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJ0cnVuY2F0ZVwiLCByYWlzZV91bml4KTtcbiAgfVxuXG4gIHdyaXRlKGJ1ZiwgcG9zLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5maWxlICYmICh0aGlzLmZsYWdzLndyb25seSB8fCB0aGlzLmZsYWdzLnJkd3IpKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBsZW4gPSB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgICAgIHRoaXMub2Zmc2V0ICs9IGxlbjtcbiAgICAgIHJldHVybiBsZW47XG4gICAgfVxuICAgIHRoaXMuZXJyX2Nsb3NlZChcIndyaXRlXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgcmVhZChidWYsIHBvcywgbGVuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKHRoaXMuZmlsZSAmJiAhdGhpcy5mbGFncy53cm9ubHkpIHtcbiAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgIGxlbiA9IHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gICAgICB0aGlzLm9mZnNldCArPSBsZW47XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICB0aGlzLmVycl9jbG9zZWQoXCJyZWFkXCIsIHJhaXNlX3VuaXgpO1xuICB9XG5cbiAgc2VlayhvZmZzZXQsIHdoZW5jZSwgcmFpc2VfdW5peCkge1xuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKVxuICAgICAgY2FtbF9yYWlzZV9zeXN0ZW1fZXJyb3IoXG4gICAgICAgIHJhaXNlX3VuaXgsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIFwibHNlZWtcIixcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICghdGhpcy5maWxlKSB0aGlzLmVycl9jbG9zZWQoXCJjbG9zZVwiKTtcbiAgICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBjaGVja19zdHJlYW1fc2VtYW50aWNzKGNtZCkge1xuICAgIGlmICghdGhpcy5maWxlKSByZXR1cm4gdGhpcy5lcnJfY2xvc2VkKGNtZCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuY2xhc3MgTWxJbnQ2NCB7XG4gIGNvbnN0cnVjdG9yKGxvLCBtaSwgaGkpIHtcbiAgICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX2pcIjtcbiAgfVxuXG4gIHN0YXRpYyBVTlNJR05FRF9NQVggPSBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmYsIDB4ZmZmZik7XG4gIHN0YXRpYyBTSUdORURfTUFYID0gbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmLCAweDdmZmYpO1xuICBzdGF0aWMgU0lHTkVEX01JTiA9IG5ldyBNbEludDY0KDB4MDAwMDAwLCAweDAwMDAwMCwgMHg4MDAwKTtcblxuICBzbGljZSgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbywgdGhpcy5taSwgdGhpcy5oaSk7XG4gIH1cblxuICB1Y29tcGFyZSh4KSB7XG4gICAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb21wYXJlKHgpIHtcbiAgICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICAgIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICAgIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gICAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgbmVnKCkge1xuICAgIHZhciBsbyA9IC10aGlzLmxvO1xuICAgIHZhciBtaSA9IC10aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgICB2YXIgaGkgPSAtdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xuICB9XG5cbiAgYWRkKHgpIHtcbiAgICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gICAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbiAgfVxuXG4gIHN1Yih4KSB7XG4gICAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gICAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICAgIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBtdWwoeCkge1xuICAgIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICAgIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gICAgdmFyIGhpID1cbiAgICAgICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArXG4gICAgICB0aGlzLmhpICogeC5sbyArXG4gICAgICB0aGlzLm1pICogeC5taSArXG4gICAgICB0aGlzLmxvICogeC5oaTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG4gIH1cblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvIHwgdGhpcy5taSB8IHRoaXMuaGkpID09PSAwO1xuICB9XG5cbiAgaXNOZWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGkgPDwgMTYgPCAwO1xuICB9XG5cbiAgYW5kKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG4gIH1cblxuICBvcih4KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gfCB4LmxvLCB0aGlzLm1pIHwgeC5taSwgdGhpcy5oaSB8IHguaGkpO1xuICB9XG5cbiAgeG9yKHgpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyBeIHgubG8sIHRoaXMubWkgXiB4Lm1pLCB0aGlzLmhpIF4geC5oaSk7XG4gIH1cblxuICBzaGlmdF9sZWZ0KHMpIHtcbiAgICBzID0gcyAmIDYzO1xuICAgIGlmIChzID09PSAwKSByZXR1cm4gdGhpcztcbiAgICBpZiAocyA8IDI0KSB7XG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgIHRoaXMubG8gPDwgcyxcbiAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHMgPCA0OClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpLFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSk7XG4gIH1cblxuICBzaGlmdF9yaWdodF91bnNpZ25lZChzKSB7XG4gICAgcyA9IHMgJiA2MztcbiAgICBpZiAocyA9PT0gMCkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHMgPCAyNClcbiAgICAgIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgICB0aGlzLmhpID4+IHMsXG4gICAgICApO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgdGhpcy5oaSA+PiAocyAtIDI0KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xuICB9XG5cbiAgc2hpZnRfcmlnaHQocykge1xuICAgIHMgPSBzICYgNjM7XG4gICAgaWYgKHMgPT09IDApIHJldHVybiB0aGlzO1xuICAgIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICAgIGlmIChzIDwgMjQpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYsXG4gICAgICApO1xuICAgIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICAgIGlmIChzIDwgNDgpXG4gICAgICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSkgPj4gMTYsXG4gICAgICAgIHNpZ24gJiAweGZmZmYsXG4gICAgICApO1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xuICB9XG5cbiAgbHNsMSgpIHtcbiAgICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbiAgfVxuXG4gIGxzcjEoKSB7XG4gICAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gICAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG4gIH1cblxuICB1ZGl2bW9kKHgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgbW9kdWx1cyA9IHRoaXMuc2xpY2UoKTtcbiAgICB2YXIgZGl2aXNvciA9IHguc2xpY2UoKTtcbiAgICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLCAwLCAwKTtcbiAgICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGl2aXNvci5sc2wxKCk7XG4gICAgfVxuICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgb2Zmc2V0LS07XG4gICAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICAgIHF1b3RpZW50LmxvKys7XG4gICAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICAgIH1cbiAgICAgIGRpdmlzb3IubHNyMSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBxdW90aWVudDogcXVvdGllbnQsIG1vZHVsdXM6IG1vZHVsdXMgfTtcbiAgfVxuXG4gIGRpdih5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gICAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICAgIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICAgIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIG1vZCh5KSB7XG4gICAgdmFyIHggPSB0aGlzO1xuICAgIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlKCk7XG4gICAgdmFyIHNpZ24gPSB4LmhpO1xuICAgIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gICAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICB0b0ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbiAgfVxuXG4gIHRvRmxvYXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkgKyB0aGlzLmxvXG4gICAgKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuaGkgPj4gOCxcbiAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgIHRoaXMubG8gJiAweGZmLFxuICAgIF07XG4gIH1cblxuICBsbzMyKCkge1xuICAgIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xuICB9XG5cbiAgaGkzMigpIHtcbiAgICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgsIHkpIHtcbiAgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LCB5LCBfdG90YWwpIHtcbiAgcmV0dXJuIHguY29tcGFyZSh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnKHgpIHtcbiAgcmV0dXJuIHgubmVnKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCh4LCB5KSB7XG4gIHJldHVybiB4LmFkZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViKHgsIHkpIHtcbiAgcmV0dXJuIHguc3ViKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgsIHkpIHtcbiAgcmV0dXJuIHgubXVsKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7XG4gIHJldHVybiAreC5pc1plcm8oKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7XG4gIHJldHVybiAreC5pc05lZygpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQoeCwgeSkge1xuICByZXR1cm4geC5hbmQoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IoeCwgeSkge1xuICByZXR1cm4geC5vcih5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yKHgsIHkpIHtcbiAgcmV0dXJuIHgueG9yKHkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X2xlZnQocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQoeCwgcykge1xuICByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCh4LCBzKSB7XG4gIHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdlxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYoeCwgeSkge1xuICByZXR1cm4geC5kaXYoeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kXG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCh4LCB5KSB7XG4gIHJldHVybiB4Lm1vZCh5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuLy9BbGlhczogY2FtbF9pbnQ2NF9vZl9pbnRcbi8vQWxpYXM6IGNhbWxfaW50NjRfb2ZfbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50NjRfdG9faW50XG4vL0FsaWFzOiBjYW1sX2ludDY0X3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMih4KSB7XG4gIHJldHVybiB4LnRvSW50KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQoeCkge1xuICByZXR1cm4geC50b0Zsb2F0KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0KHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSBcIiBcIjtcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQobiwgXCIwXCIpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZShzKTtcbiAgdmFyIGkgPSByWzBdLFxuICAgIHNpZ24gPSByWzFdLFxuICAgIGJhc2UgPSByWzJdLFxuICAgIHNpZ25lZG5lc3MgPSByWzNdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9IE1sSW50NjQuVU5TSUdORURfTUFYLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJJbnQ2NC5vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcIkludDY0Lm9mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoXG4gICAgc2lnbmVkbmVzcyAmJlxuICAgIGNhbWxfaW50NjRfdWx0KHNpZ24gPCAwID8gTWxJbnQ2NC5TSUdORURfTUlOIDogTWxJbnQ2NC5TSUdORURfTUFYLCByZXMpXG4gIClcbiAgICBjYW1sX2ZhaWx3aXRoKFwiSW50NjQub2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZixcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KSB7XG4gIHJldHVybiB2LmhpMzIoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICAoYVs3XSA8PCAwKSB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgIChhWzRdIDw8IDApIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgKGFbMV0gPDwgMCkgfCAoYVswXSA8PCA4KSxcbiAgKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkge1xuICByZXR1cm4geC50b0FycmF5KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpIHtcbiAgcmV0dXJuIHYubG8zMigpIF4gdi5oaTMyKCk7XG59XG4iLCIvL1Byb3ZpZGVzOiBNbE11dGV4XG5jbGFzcyBNbE11dGV4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X25ld1xuLy9SZXF1aXJlczogTWxNdXRleFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIG5ldyBNbE11dGV4KCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbXV0ZXhfbG9ja1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9tbF9tdXRleF9sb2NrKHQpIHtcbiAgaWYgKHQubG9ja2VkKSBjYW1sX2ZhaWx3aXRoKFwiTXV0ZXgubG9jazogbXV0ZXggYWxyZWFkeSBsb2NrZWQuIENhbm5vdCB3YWl0LlwiKTtcbiAgZWxzZSB0LmxvY2tlZCA9IHRydWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX211dGV4X3RyeV9sb2NrXG5mdW5jdGlvbiBjYW1sX21sX211dGV4X3RyeV9sb2NrKHQpIHtcbiAgaWYgKCF0LmxvY2tlZCkge1xuICAgIHQubG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tdXRleF91bmxvY2tcbmZ1bmN0aW9uIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHQpIHtcbiAgdC5sb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHMuX25hdCA9IHtcbiAgICBkZXNlcmlhbGl6ZTogZGVzZXJpYWxpemVfbmF0LFxuICAgIHNlcmlhbGl6ZTogc2VyaWFsaXplX25hdCxcbiAgICBoYXNoOiBjYW1sX2hhc2hfbmF0LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuY2xhc3MgTWxOYXQge1xuICBjb25zdHJ1Y3Rvcih4KSB7XG4gICAgdGhpcy5kYXRhID0gbmV3IEludDMyQXJyYXkoeCk7XG4gICAgLy8gRm9yIG51bSA8IDEuNVxuICAgIC8vIGxlbmd0aF9uYXQgaXNuJ3QgZXh0ZXJuYWwsIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGUgT2JqLnNpemVcbiAgICAvLyB3b3JrIG91dCByaWdodC5cbiAgICAvLyBXZSBhZGQgKzIgdG8gdGhlIGFycmF5IGxlbmd0aDpcbiAgICAvLyAtICsxIGZvciB0aGUgdGFnXG4gICAgLy8gLSArMSBmb3IgdGhlIGN1c3RvbV9vcHMgc2xvdFxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDI7XG4gICAgdGhpcy5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGxlbmd0aF9uYXRcbmZ1bmN0aW9uIGxlbmd0aF9uYXQoeCkge1xuICByZXR1cm4geC5kYXRhLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpIHtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGFyci5kYXRhW2ldID0gLTE7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy9Qcm92aWRlczogc2V0X3RvX3plcm9fbmF0XG5mdW5jdGlvbiBzZXRfdG9femVyb19uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzICsgaV0gPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBibGl0X25hdFxuZnVuY3Rpb24gYmxpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMiwgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0gbmF0Mi5kYXRhW29mczIgKyBpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQuZGF0YVtvZnMgKyBpXSAhPT0gMCkgcmV0dXJuIGkgKyAxO1xuICB9XG4gIHJldHVybiAxOyAvLyAwIGNvdW50cyBhcyAxIGRpZ2l0XG59XG5cbi8vUHJvdmlkZXM6IG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdFxuZnVuY3Rpb24gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdCwgb2ZzKSB7XG4gIHZhciBhID0gbmF0LmRhdGFbb2ZzXTtcbiAgdmFyIGIgPSAwO1xuICBpZiAoYSAmIDB4ZmZmZjAwMDApIHtcbiAgICBiICs9IDE2O1xuICAgIGEgPj4+PSAxNjtcbiAgfVxuICBpZiAoYSAmIDB4ZmYwMCkge1xuICAgIGIgKz0gODtcbiAgICBhID4+Pj0gODtcbiAgfVxuICBpZiAoYSAmIDB4ZjApIHtcbiAgICBiICs9IDQ7XG4gICAgYSA+Pj49IDQ7XG4gIH1cbiAgaWYgKGEgJiAxMikge1xuICAgIGIgKz0gMjtcbiAgICBhID4+Pj0gMjtcbiAgfVxuICBpZiAoYSAmIDIpIHtcbiAgICBiICs9IDE7XG4gICAgYSA+Pj49IDE7XG4gIH1cbiAgaWYgKGEgJiAxKSB7XG4gICAgYiArPSAxO1xuICB9XG4gIHJldHVybiAzMiAtIGI7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X2ludFxuZnVuY3Rpb24gaXNfZGlnaXRfaW50KG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdID49IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA9PT0gMCkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9ub3JtYWxpemVkXG5mdW5jdGlvbiBpc19kaWdpdF9ub3JtYWxpemVkKF9uYXQsIF9vZnMpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmIChuYXQuZGF0YVtvZnNdICYgMSkgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBpbmNyX25hdFxuZnVuY3Rpb24gaW5jcl9uYXQobmF0LCBvZnMsIGxlbiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHggfCAwO1xuICAgIGlmICh4ID09PSB4ID4+PiAwKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2FycnkgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogYWRkX25hdFxuLy9SZXF1aXJlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGNhcnJ5ID0gY2FycnlfaW47XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMSArIGldID0geDtcbiAgICBpZiAoeCA9PT0geCA+Pj4gMCkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGNhcnJ5KTtcbn1cblxuLy9Qcm92aWRlczogY29tcGxlbWVudF9uYXRcbmZ1bmN0aW9uIGNvbXBsZW1lbnRfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcyArIGldID0gKC0xID4+PiAwKSAtIChuYXQuZGF0YVtvZnMgKyBpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gY2FycnlfaW4gPT09IDEgPyAwIDogMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcyArIGldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMgKyBpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9ycm93ID09PSAxID8gMCA6IDE7XG59XG5cbi8vIG9jYW1sIGZsaXBzIGNhcnJ5X2luXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IHN1Yl9uYXRcbi8vUmVxdWlyZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBzdWJfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSBjYXJyeV9pbiA9PT0gMSA/IDAgOiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvcnJvdyA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWNyX25hdChuYXQxLCBvZnMxICsgbGVuMiwgbGVuMSAtIGxlbjIsIGJvcnJvdyA9PT0gMSA/IDAgOiAxKTtcbn1cblxuLy8gbmF0MSArPSBuYXQyICogbmF0M1tvZnMzXVxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBtdWx0X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogYWRkX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBhID0gbmF0My5kYXRhW29mczNdID4+PiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9XG4gICAgICAobmF0MS5kYXRhW29mczEgKyBpXSA+Pj4gMCkgK1xuICAgICAgKG5hdDIuZGF0YVtvZnMyICsgaV0gPj4+IDApICogKGEgJiAweDAwMDBmZmZmKSArXG4gICAgICBjYXJyeTtcbiAgICB2YXIgeDIgPSAobmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4MiAvIDY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSB4MztcbiAgICBjYXJyeSArPSBNYXRoLmZsb29yKHgzIC8gNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZiAobGVuMiA8IGxlbjEgJiYgY2FycnkpIHtcbiAgICByZXR1cm4gYWRkX25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgbGVuMixcbiAgICAgIGxlbjEgLSBsZW4yLFxuICAgICAgbmF0X29mX2FycmF5KFtjYXJyeV0pLFxuICAgICAgMCxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChcbiAgICAgIG5hdDEsXG4gICAgICBvZnMxICsgaSxcbiAgICAgIGxlbjEgLSBpLFxuICAgICAgbmF0MixcbiAgICAgIG9mczIsXG4gICAgICBsZW4yLFxuICAgICAgbmF0MyxcbiAgICAgIG9mczMgKyBpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBuYXQxID0gMiAqIG5hdDEgKyBuYXQyICogbmF0MlxuLy8gbGVuMSA+PSAyICogbGVuMlxuLy9Qcm92aWRlczogc3F1YXJlX25hdFxuLy9SZXF1aXJlczogbXVsdF9uYXQsIGFkZF9uYXRcbmZ1bmN0aW9uIHNxdWFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgY2FycnkgPSAwO1xuICBjYXJyeSArPSBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDEsIG9mczEsIGxlbjEsIDApO1xuICBjYXJyeSArPSBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQyLCBvZnMyLCBsZW4yKTtcbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZiAobmJpdHMgPT09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IChhIDw8IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPj4+ICgzMiAtIG5iaXRzKTtcbiAgfVxuICBuYXQyLmRhdGFbb2ZzMl0gPSB3cmFwO1xuICByZXR1cm4gMDtcbn1cblxuLy8gQXNzdW1pbmcgYyA+IGEsIHJldHVybnMgW3F1b3RpZW50LCByZW1haW5kZXJdIG9mIChhPDwzMiArIGIpL2Ncbi8vUHJvdmlkZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9oZWxwZXIoYSwgYiwgYykge1xuICB2YXIgeCA9IGEgKiA2NTUzNiArIChiID4+PiAxNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4IC8gYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwZmZmZik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3IodyAvIGMpLCB3ICUgY107XG59XG5cbi8vIG5hdDFbb2ZzMStsZW5dIDwgbmF0MltvZnMyXVxuLy9Qcm92aWRlczogZGl2X2RpZ2l0X25hdFxuLy9SZXF1aXJlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2RpZ2l0X25hdChuYXRxLCBvZnNxLCBuYXRyLCBvZnNyLCBuYXQxLCBvZnMxLCBsZW4sIG5hdDIsIG9mczIpIHtcbiAgdmFyIHJlbSA9IG5hdDEuZGF0YVtvZnMxICsgbGVuIC0gMV0gPj4+IDA7XG4gIC8vIG5hdHFbb2ZzcStsZW4tMV0gaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIChkdWUgdG8gdGhlIE1TRCByZXF1aXJlbWVudCksXG4gIC8vIGFuZCBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uXG4gIGZvciAodmFyIGkgPSBsZW4gLSAyOyBpID49IDA7IGktLSkge1xuICAgIHZhciB4ID0gZGl2X2hlbHBlcihyZW0sIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsIG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCk7XG4gICAgbmF0cS5kYXRhW29mc3EgKyBpXSA9IHhbMF07XG4gICAgcmVtID0geFsxXTtcbiAgfVxuICBuYXRyLmRhdGFbb2Zzcl0gPSByZW07XG4gIHJldHVybiAwO1xufVxuXG4vLyBuYXQxW25hdDI6XSA6PSBuYXQxIC8gbmF0MlxuLy8gbmF0MVs6bmF0Ml0gOj0gbmF0MSAlIG5hdDJcbi8vIGxlbjEgPiBsZW4yLCBuYXQyW29mczIrbGVuMi0xXSA+IG5hdDFbb2ZzMStsZW4xLTFdXG4vL1Byb3ZpZGVzOiBkaXZfbmF0XG4vL1JlcXVpcmVzOiBkaXZfZGlnaXRfbmF0LCBkaXZfaGVscGVyLCBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQsIHNoaWZ0X2xlZnRfbmF0LCBzaGlmdF9yaWdodF9uYXQsIGNyZWF0ZV9uYXQsIHNldF90b196ZXJvX25hdCwgbXVsdF9kaWdpdF9uYXQsIHN1Yl9uYXQsIGNvbXBhcmVfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIGRpdl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICBpZiAobGVuMiA9PT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSArIDEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMiArIGxlbjIgLSAxKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIgKyBsZW4yIC0gMV0gPj4+IDApICsgMTtcbiAgdmFyIGEgPSBjcmVhdGVfbmF0KGxlbjIgKyAxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID1cbiAgICAgIGQgPT09IDQyOTQ5NjcyOTZcbiAgICAgICAgPyBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwXG4gICAgICAgIDogZGl2X2hlbHBlcihcbiAgICAgICAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAsXG4gICAgICAgICAgICBuYXQxLmRhdGFbb2ZzMSArIGkgLSAxXSA+Pj4gMCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgKVswXTtcbiAgICBzZXRfdG9femVyb19uYXQoYSwgMCwgbGVuMiArIDEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIgKyAxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiArIDEsIGEsIDAsIGxlbjIgKyAxLCAxKTtcblxuICAgIHdoaWxlIChcbiAgICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gIT09IDAgfHxcbiAgICAgIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEgKyBpIC0gbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMFxuICAgICkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMSArIGkgLSBsZW4yLCBsZW4yICsgMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEgKyBpXSA9IHF1bztcbiAgfVxuXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHNoaWZ0IHJlbWFpbmRlclxuICBzaGlmdF9yaWdodF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyByZXN0b3JlXG4gIHJldHVybiAwO1xufVxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmIChuYml0cyA9PT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGEgPSBuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxICsgaV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYgKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmIChuYXQxLmRhdGFbb2ZzMV0gPCBuYXQyLmRhdGFbb2ZzMl0pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfbmF0XG4vL1JlcXVpcmVzOiBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMikge1xuICB2YXIgYSA9IG51bV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIGxlbjEpO1xuICB2YXIgYiA9IG51bV9kaWdpdHNfbmF0KG5hdDIsIG9mczIsIGxlbjIpO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChuYXQxLmRhdGFbb2ZzMSArIGldID4+PiAwID4gbmF0Mi5kYXRhW29mczIgKyBpXSA+Pj4gMCkgcmV0dXJuIDE7XG4gICAgaWYgKG5hdDEuZGF0YVtvZnMxICsgaV0gPj4+IDAgPCBuYXQyLmRhdGFbb2ZzMiArIGldID4+PiAwKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxhbmRfZGlnaXRfbmF0XG5mdW5jdGlvbiBsYW5kX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSAmPSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBsb3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBsb3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIHw9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGx4b3JfZGlnaXRfbmF0XG5mdW5jdGlvbiBseG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSBePSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeikge1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3opIHtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX3dpbjMyXG52YXIganNvb19pc193aW4zMiA9XG4gIGdsb2JhbFRoaXMuRGVubz8uYnVpbGQ/Lm9zID09PSBcIndpbmRvd3NcIiB8fFxuICBnbG9iYWxUaGlzLnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCI7XG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZDtcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHNcbi8vUmVxdWlyZXM6IGpzb29faXNfd2luMzJcbmNsYXNzIE1sTm9kZURldmljZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICB0aGlzLmZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgfVxuXG4gIG5tKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yb290ICsgbmFtZTtcbiAgfVxuXG4gIGV4aXN0cyhuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIGlzRmlsZShuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpID8gMSA6IDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gICAgfVxuICB9XG5cbiAgbWtkaXIobmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLCB7IG1vZGU6IG1vZGUgfSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgcm1kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGlzX2RpcihuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCkgPyAxIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB1bmxpbmsobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgdXRpbWVzKG5hbWUsIGF0aW1lLCBtdGltZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXRpbWUgPT09IDAgJiYgbXRpbWUgPT09IDApIHtcbiAgICAgICAgYXRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7XG4gICAgICAgIG10aW1lID0gYXRpbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZzLnV0aW1lc1N5bmModGhpcy5ubShuYW1lKSwgYXRpbWUsIG10aW1lKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICB0cnVuY2F0ZShuYW1lLCBsZW4sIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy50cnVuY2F0ZVN5bmModGhpcy5ubShuYW1lKSwgbGVuIHwgMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgICB2YXIgY29uc3RzID0gdGhpcy5mcy5jb25zdGFudHM7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIga2V5IGluIGYpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5SX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuV19PSztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXMgfD0ganNvb19pc193aW4zMiA/IGNvbnN0cy5SX09LIDogY29uc3RzLlhfT0s7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5GX09LO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5hY2Nlc3NTeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbihuYW1lLCBmLCBwZXJtcywgcmFpc2VfdW5peCkge1xuICAgIHZhciBjb25zdHMgPSB0aGlzLmZzLmNvbnN0YW50cztcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBrZXkgaW4gZikge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInJkb25seVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRE9OTFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ3cm9ubHlcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmR3clwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19SRFdSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXBwZW5kXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNyZWF0ZVwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19DUkVBVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX1RSVU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZXhjbFwiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19FWENMO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICByZXMgfD0gY29uc3RzLk9fVEVYVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm5vbmJsb2NrXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibm9jdHR5XCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX05PQ1RUWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRzeW5jXCI6XG4gICAgICAgICAgcmVzIHw9IGNvbnN0cy5PX0RTWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3luY1wiOlxuICAgICAgICAgIHJlcyB8PSBjb25zdHMuT19TWU5DO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMsIHBlcm1zKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBzbGFzaChuYW1lKSB7XG4gICAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpID8gbmFtZSA6IG5hbWUgKyBcIi9cIjtcbiAgfVxuXG4gIHJlbmFtZShvLCBuLCByYWlzZV91bml4KSB7XG4gICAgaWYgKGpzb29faXNfd2luMzIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLm5tKG4pO1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5ubShvKTtcbiAgICAgICAgdmFyIHRhcmdldF9zdGF0cywgc291cmNlX3N0YXRzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldF9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGFyZ2V0LCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgKHNvdXJjZV9zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmMoc291cmNlLCB7XG4gICAgICAgICAgICB0aHJvd0lmTm9FbnRyeTogZmFsc2UsXG4gICAgICAgICAgfSkpICYmXG4gICAgICAgICAgc291cmNlX3N0YXRzLmlzRGlyZWN0b3J5KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRhcmdldF9zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2xhc2godGFyZ2V0KS5zdGFydHNXaXRoKHRoaXMuc2xhc2goc291cmNlKSkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcy5ybWRpclN5bmModGFyZ2V0KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRU5PVERJUjogbm90IGEgZGlyZWN0b3J5LCByZW5hbWUgJyR7c291cmNlfScgLT4gJyR7dGFyZ2V0fSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oZXJyLCB7XG4gICAgICAgICAgICAgIGVycm5vOiAtMjAsXG4gICAgICAgICAgICAgIGNvZGU6IFwiRU5PVERJUlwiLFxuICAgICAgICAgICAgICBzeXNjYWxsOiBcInJlbmFtZVwiLFxuICAgICAgICAgICAgICBwYXRoOiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgbHN0YXQobmFtZSwgbGFyZ2UsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgICByZXR1cm4gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNobW9kKG5hbWUsIHBlcm1zLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2htb2RTeW5jKHRoaXMubm0obmFtZSksIHBlcm1zKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBsaW5rKHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG5cbiAgc3ltbGluayh0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHRoaXMubm0ocGF0aCksXG4gICAgICAgIHRvX2RpciA9PT0gMCA/IG51bGwgOiB0b19kaXJbMV0gPyBcImRpclwiIDogXCJmaWxlXCIsXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRsaW5rKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCBcInV0ZjhcIik7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5kaXIobmFtZSwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IG9jYW1sX3N0YXRzX2Zyb21fbm9kZV9zdGF0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdFxuZnVuY3Rpb24gb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzKGpzX3N0YXRzLCBsYXJnZSkge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vIHwgMCxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAgbGFyZ2UgPyBjYW1sX2ludDY0X29mX2Zsb2F0KGpzX3N0YXRzLnNpemUpIDoganNfc3RhdHMuc2l6ZSB8IDAsXG4gICAganNfc3RhdHMuYXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMubXRpbWVNcyAvIDEwMDAsXG4gICAganNfc3RhdHMuY3RpbWVNcyAvIDEwMDAsXG4gICk7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuY2xhc3MgTWxOb2RlRGV2aWNlIHt9XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yLCBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvciwgb2NhbWxfc3RhdHNfZnJvbV9ub2RlX3N0YXRzXG5jbGFzcyBNbE5vZGVGZCBleHRlbmRzIE1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKGZkLCBmbGFncykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mcyA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuICAgIHRoaXMuZmQgPSBmZDtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKGZkKTtcbiAgICAgIGZsYWdzLm5vU2VlayA9XG4gICAgICAgIHN0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHwgc3RhdHMuaXNGSUZPKCkgfHwgc3RhdHMuaXNTb2NrZXQoKTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5mbGFncy5hcHBlbmQgPyBzdGF0cy5zaXplIDogMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSBmc3RhdCB3aWxsIGZhaWwgb24gc3RhbmRhcmQgc3RyZWFtcyB1bmRlciBXaW5kb3dzIHdpdGggbm9kZVxuICAgICAgLy8gMTggKGFuZCBsb3dlcikuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8zODExLlxuICAgICAgZmxhZ3Mubm9TZWVrID0gdHJ1ZTtcbiAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZWVrZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHRydW5jYXRlKGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCwgbGVuIHwgMCk7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPiBsZW4pIHRoaXMub2Zmc2V0ID0gbGVuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgICB9XG4gIH1cblxuICBpc2F0dHkoKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoXCJub2RlOnR0eVwiKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eSh0aGlzLmZkKSA/IDEgOiAwO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZShidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgcmFpc2VfdW5peCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5mbGFncy5ub1NlZWsgfHwgIXRoaXMuc2Vla2VkKSB7XG4gICAgICAgIHZhciB3cml0dGVuID0gdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHdyaXR0ZW4gPSB0aGlzLmZzLndyaXRlU3luYyhcbiAgICAgICAgICB0aGlzLmZkLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBidWZfb2Zmc2V0LFxuICAgICAgICAgIGxlbixcbiAgICAgICAgICB0aGlzLm9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2Zmc2V0ICs9IHdyaXR0ZW47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdHRlbjtcbiAgfVxuXG4gIHJlYWQoYSwgYnVmX29mZnNldCwgbGVuLCByYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZsYWdzLm5vU2VlayB8fCAhdGhpcy5zZWVrZWQpIHtcbiAgICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCB0aGlzLm9mZnNldCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9mZnNldCArPSByZWFkO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlZWsob2Zmc2V0LCB3aGVuY2UsIHJhaXNlX3VuaXgpIHtcbiAgICBpZiAodGhpcy5mbGFncy5ub1NlZWspIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKHJhaXNlX3VuaXgsIFwiRVNQSVBFXCIsIFwibHNlZWtcIiwgXCJpbGxlZ2FsIHNlZWtcIik7XG4gICAgfVxuICAgIHN3aXRjaCAod2hlbmNlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c3RlbV9lcnJvcihcbiAgICAgICAgcmFpc2VfdW5peCxcbiAgICAgICAgXCJFSU5WQUxcIixcbiAgICAgICAgXCJsc2Vla1wiLFxuICAgICAgICBcImludmFsaWQgYXJndW1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuc2Vla2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0O1xuICB9XG5cbiAgc3RhdChsYXJnZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKTtcbiAgICAgIHJldHVybiBvY2FtbF9zdGF0c19mcm9tX25vZGVfc3RhdHMoanNfc3RhdHMsIGxhcmdlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjaG1vZChwZXJtcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZzLmZjaG1vZFN5bmModGhpcy5mZCwgcGVybXMpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gMSk7XG4gICAgfVxuICB9XG5cbiAgc3luYygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mcy5mc3luY1N5bmModGhpcy5mZCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgLyogcmFpc2UgVW5peF9lcnJvciAqLyAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZShyYWlzZV91bml4KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYW1sX3JhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrX3N0cmVhbV9zZW1hbnRpY3MoY21kKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsIGNtZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGpzX3N0YXRzLmlzRmlsZSgpIHx8XG4gICAgICAgIGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNGSUZPKCkgfHxcbiAgICAgICAganNfc3RhdHMuaXNTb2NrZXQoKVxuICAgICAgKVxuICAgIClcbiAgICAgIGNhbWxfcmFpc2Vfc3lzdGVtX2Vycm9yKFxuICAgICAgICAvKiByYWlzZSBVbml4X2Vycm9yICovIDEsXG4gICAgICAgIFwiRUlOVkFMXCIsXG4gICAgICAgIGNtZCxcbiAgICAgICAgXCJpbnZhbGlkIGFyZ3VtZW50XCIsXG4gICAgICApO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5jbGFzcyBNbE5vZGVGZCB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpIHtcbiAgaWYgKGZsYWdzLmFsdG5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MuYWx0bmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoX2ZkLCBfZmxhZ3MpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9kZWpzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncywgbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4LCBjbWQpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoXG4gICAgICBlcnIuY29kZSxcbiAgICAgIGNtZCB8fCBlcnIuc3lzY2FsbCxcbiAgICAgIGVyci5wYXRoLFxuICAgICAgZXJyLmVycm5vLFxuICAgICk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxudmFyIGNhbWxfdW5wYWNrRmxvYXQxNiA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgRVhQX01BU0sxNiA9IDMxOyAvLyAyICoqIDUgLSAxXG4gIHZhciBTSUdOSUZJQ0FORF9NQVNLMTYgPSAxMDIzOyAvLyAyICoqIDEwIC0gMVxuICB2YXIgTUlOX1NVQk5PUk1BTDE2ID0gcG93KDIsIC0yNCk7IC8vIDIgKiogLTEwICogMiAqKiAtMTRcbiAgdmFyIFNJR05JRklDQU5EX0RFTk9NMTYgPSAwLjAwMDk3NjU2MjU7IC8vIDIgKiogLTEwXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChieXRlcykge1xuICAgIHZhciBzaWduID0gYnl0ZXMgPj4+IDE1O1xuICAgIHZhciBleHBvbmVudCA9IChieXRlcyA+Pj4gMTApICYgRVhQX01BU0sxNjtcbiAgICB2YXIgc2lnbmlmaWNhbmQgPSBieXRlcyAmIFNJR05JRklDQU5EX01BU0sxNjtcbiAgICBpZiAoZXhwb25lbnQgPT09IEVYUF9NQVNLMTYpXG4gICAgICByZXR1cm4gc2lnbmlmaWNhbmQgPT09IDBcbiAgICAgICAgPyBzaWduID09PSAwXG4gICAgICAgICAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFlcbiAgICAgICAgICA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICAgICA6IE51bWJlci5OYU47XG4gICAgaWYgKGV4cG9uZW50ID09PSAwKVxuICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICogKHNpZ24gPT09IDAgPyBNSU5fU1VCTk9STUFMMTYgOiAtTUlOX1NVQk5PUk1BTDE2KTtcbiAgICB2YXIgciA9XG4gICAgICBwb3coMiwgZXhwb25lbnQgLSAxNSkgKlxuICAgICAgKHNpZ24gPT09IDBcbiAgICAgICAgPyAxICsgc2lnbmlmaWNhbmQgKiBTSUdOSUZJQ0FORF9ERU5PTTE2XG4gICAgICAgIDogLTEgLSBzaWduaWZpY2FuZCAqIFNJR05JRklDQU5EX0RFTk9NMTYpO1xuICAgIHJldHVybiByO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9wYWNrRmxvYXQxNlxudmFyIGNhbWxfcGFja0Zsb2F0MTYgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBJTlZFUlNFX09GX0VQU0lMT04gPSAxIC8gTnVtYmVyLkVQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUaWVzVG9FdmVuKG51bSkge1xuICAgIHJldHVybiBudW0gKyBJTlZFUlNFX09GX0VQU0lMT04gLSBJTlZFUlNFX09GX0VQU0lMT047XG4gIH1cblxuICBjb25zdCBGTE9BVDE2X01JTl9WQUxVRSA9IDYuMTAzNTE1NjI1ZS01O1xuICBjb25zdCBGTE9BVDE2X01BWF9WQUxVRSA9IDY1NTA0O1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT04gPSAwLjAwMDk3NjU2MjU7XG5cbiAgY29uc3QgRkxPQVQxNl9FUFNJTE9OX01VTFRJUExJRURfQllfRkxPQVQxNl9NSU5fVkFMVUUgPVxuICAgIEZMT0FUMTZfRVBTSUxPTiAqIEZMT0FUMTZfTUlOX1ZBTFVFO1xuICBjb25zdCBGTE9BVDE2X0VQU0lMT05fREVWSURFRF9CWV9FUFNJTE9OID1cbiAgICBGTE9BVDE2X0VQU0lMT04gKiBJTlZFUlNFX09GX0VQU0lMT047XG5cbiAgZnVuY3Rpb24gcm91bmRUb0Zsb2F0MTYobnVtKSB7XG4gICAgY29uc3QgbnVtYmVyID0gK251bTtcblxuICAgIC8vIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLTBcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW1iZXIpIHx8IG51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBmaW5pdGUgZXhjZXB0IDAsIC0wXG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA+IDAgPyAxIDogLTE7XG4gICAgY29uc3QgYWJzb2x1dGUgPSBNYXRoLmFicyhudW1iZXIpO1xuXG4gICAgLy8gc21hbGwgbnVtYmVyXG4gICAgaWYgKGFic29sdXRlIDwgRkxPQVQxNl9NSU5fVkFMVUUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNpZ24gKlxuICAgICAgICByb3VuZFRpZXNUb0V2ZW4oXG4gICAgICAgICAgYWJzb2x1dGUgLyBGTE9BVDE2X0VQU0lMT05fTVVMVElQTElFRF9CWV9GTE9BVDE2X01JTl9WQUxVRSxcbiAgICAgICAgKSAqXG4gICAgICAgIEZMT0FUMTZfRVBTSUxPTl9NVUxUSVBMSUVEX0JZX0ZMT0FUMTZfTUlOX1ZBTFVFXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXAgPSAoMSArIEZMT0FUMTZfRVBTSUxPTl9ERVZJREVEX0JZX0VQU0lMT04pICogYWJzb2x1dGU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGVtcCAtICh0ZW1wIC0gYWJzb2x1dGUpO1xuXG4gICAgLy8gbGFyZ2UgbnVtYmVyXG4gICAgaWYgKHJlc3VsdCA+IEZMT0FUMTZfTUFYX1ZBTFVFIHx8IE51bWJlci5pc05hTihyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gc2lnbiAqIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGJhc2UgYWxnb3JpdGhtOiBodHRwOi8vZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcblxuICBjb25zdCBiYXNlVGFibGUgPSBuZXcgVWludDE2QXJyYXkoNTEyKTtcbiAgY29uc3Qgc2hpZnRUYWJsZSA9IG5ldyBVaW50OEFycmF5KDUxMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGNvbnN0IGUgPSBpIC0gMTI3O1xuXG4gICAgLy8gdmVyeSBzbWFsbCBudW1iZXIgKDAsIC0wKVxuICAgIGlmIChlIDwgLTI0KSB7XG4gICAgICBiYXNlVGFibGVbaV0gPSAweDAwMDA7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAyNDtcbiAgICAgIHNoaWZ0VGFibGVbaSB8IDB4MTAwXSA9IDI0O1xuXG4gICAgICAvLyBzbWFsbCBudW1iZXIgKGRlbm9ybSlcbiAgICB9IGVsc2UgaWYgKGUgPCAtMTQpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4MDQwMCA+PiAoLWUgLSAxNCk7XG4gICAgICBiYXNlVGFibGVbaSB8IDB4MTAwXSA9ICgweDA0MDAgPj4gKC1lIC0gMTQpKSB8IDB4ODAwMDtcbiAgICAgIHNoaWZ0VGFibGVbaV0gPSAtZSAtIDE7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAtZSAtIDE7XG5cbiAgICAgIC8vIG5vcm1hbCBudW1iZXJcbiAgICB9IGVsc2UgaWYgKGUgPD0gMTUpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IChlICsgMTUpIDw8IDEwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAoKGUgKyAxNSkgPDwgMTApIHwgMHg4MDAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDEzO1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMTM7XG5cbiAgICAgIC8vIGxhcmdlIG51bWJlciAoSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2UgaWYgKGUgPCAxMjgpIHtcbiAgICAgIGJhc2VUYWJsZVtpXSA9IDB4N2MwMDtcbiAgICAgIGJhc2VUYWJsZVtpIHwgMHgxMDBdID0gMHhmYzAwO1xuICAgICAgc2hpZnRUYWJsZVtpXSA9IDI0O1xuICAgICAgc2hpZnRUYWJsZVtpIHwgMHgxMDBdID0gMjQ7XG5cbiAgICAgIC8vIHN0YXkgKE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVRhYmxlW2ldID0gMHg3YzAwO1xuICAgICAgYmFzZVRhYmxlW2kgfCAweDEwMF0gPSAweGZjMDA7XG4gICAgICBzaGlmdFRhYmxlW2ldID0gMTM7XG4gICAgICBzaGlmdFRhYmxlW2kgfCAweDEwMF0gPSAxMztcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7XG4gIGNvbnN0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgY29uc3QgdWludDMyVmlldyA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuXG4gIHJldHVybiBmdW5jdGlvbiAobnVtKSB7XG4gICAgZmxvYXRWaWV3WzBdID0gcm91bmRUb0Zsb2F0MTYobnVtKTtcbiAgICBjb25zdCBmID0gdWludDMyVmlld1swXTtcbiAgICBjb25zdCBlID0gKGYgPj4gMjMpICYgMHgxZmY7XG4gICAgcmV0dXJuIGJhc2VUYWJsZVtlXSArICgoZiAmIDB4MDA3ZmZmZmYpID4+IHNoaWZ0VGFibGVbZV0pO1xuICB9O1xufSkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSB7XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgNzpcbiAgICBjYXNlIDEwOlxuICAgIGNhc2UgMTE6XG4gICAgICByZXR1cm4gMjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKSB7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIDA6XG4gICAgICB2aWV3ID0gRmxvYXQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgdmlldyA9IEZsb2F0NjRBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHZpZXcgPSBJbnQ4QXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICB2aWV3ID0gVWludDhBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIHZpZXcgPSBJbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgdmlldyA9IFVpbnQxNkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICB2aWV3ID0gSW50MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgODpcbiAgICAgIHZpZXcgPSBJbnQzMkFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA5OlxuICAgICAgdmlldyA9IEludDMyQXJyYXk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEwOlxuICAgICAgdmlldyA9IEZsb2F0MzJBcnJheTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6XG4gICAgICB2aWV3ID0gRmxvYXQ2NEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMjpcbiAgICAgIHZpZXcgPSBVaW50OEFycmF5O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMzpcbiAgICAgIHZpZXcgPSBVaW50MTZBcnJheTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIjtcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG4vL1JlcXVpcmVzOiBjYW1sX3BhY2tGbG9hdDE2LCBjYW1sX3VucGFja0Zsb2F0MTZcbmNsYXNzIE1sX0JpZ2FycmF5IHtcbiAgY29uc3RydWN0b3Ioa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgICB0aGlzLmtpbmQgPSBraW5kO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuZGltcyA9IGRpbXM7XG4gICAgdGhpcy5kYXRhID0gYnVmZmVyO1xuICAgIHRoaXMuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuICB9XG5cbiAgb2Zmc2V0KGFyZykge1xuICAgIHZhciBvZnMgPSAwO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYXJnLmxlbmd0aClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgb2ZzID0gb2ZzICogdGhpcy5kaW1zW2ldICsgYXJnW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSkge1xuICAgICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBvZnMgPSBvZnMgKiB0aGlzLmRpbXNbaV0gKyAoYXJnW2ldIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZnM7XG4gIH1cblxuICBnZXQob2ZzKSB7XG4gICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgICAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLCBoKTtcbiAgICAgIGNhc2UgMTA6XG4gICAgICBjYXNlIDExOlxuICAgICAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgICAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICAgICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgcmV0dXJuIGNhbWxfdW5wYWNrRmxvYXQxNih0aGlzLmRhdGFbb2ZzXSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW29mc107XG4gICAgfVxuICB9XG5cbiAgc2V0KG9mcywgdikge1xuICAgIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIC8vIEludDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgICAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGFbb2ZzXSA9IGNhbWxfcGFja0Zsb2F0MTYodik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSA3OlxuICAgICAgICAvLyBJbnQ2NFxuICAgICAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gYSA6IGI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgICAgIHZhciBpbSA9IHZbMV07XG4gICAgICAgIHZhciByZSA9IHZbMl07XG4gICAgICAgIGlmIChpbSA9PT0gcmUpIHtcbiAgICAgICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IGkgJSAyID09PSAwID8gaW0gOiByZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEzOlxuICAgICAgICB0aGlzLmRhdGEuZmlsbChjYW1sX3BhY2tGbG9hdDE2KHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZShiLCB0b3RhbCkge1xuICAgIGlmICh0aGlzLmxheW91dCAhPT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9PSBiLmtpbmQpIHtcbiAgICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICAgIHZhciBrMiA9IGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICAgIHJldHVybiBrMiAtIGsxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPT0gYi5kaW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICh0aGlzLmRpbXNbaV0gIT09IGIuZGltc1tpXSkgcmV0dXJuIHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSA/IC0xIDogMTtcbiAgICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAxMDpcbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIC8vIEZsb2F0c1xuICAgICAgICB2YXIgeCwgeTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICAgICAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoeCAhPT0geSkge1xuICAgICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE51bWJlci5OYU47XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih5KSkgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgLy8gSW50NjRcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA8IGIuZGF0YVtpICsgMV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2kgKyAxXSA+IGIuZGF0YVtpICsgMV0pIHJldHVybiAxO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPj4+IDAgPCBiLmRhdGFbaV0gPj4+IDApIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4+PiAwID4gYi5kYXRhW2ldID4+PiAwKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGFhID0gY2FtbF91bnBhY2tGbG9hdDE2KHRoaXMuZGF0YVtpXSk7XG4gICAgICAgICAgdmFyIGJiID0gY2FtbF91bnBhY2tGbG9hdDE2KGIuZGF0YVtpXSk7XG4gICAgICAgICAgaWYgKGFhIDwgYmIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYWEgPiBiYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDg6XG4gICAgICBjYXNlIDk6XG4gICAgICBjYXNlIDEyOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmNsYXNzIE1sX0JpZ2FycmF5X2NfMV8xIGV4dGVuZHMgTWxfQmlnYXJyYXkge1xuICBvZmZzZXQoYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCA9PT0gMSkgYXJnID0gYXJnWzBdO1xuICAgICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gICAgfVxuICAgIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICByZXR1cm4gYXJnO1xuICB9XG5cbiAgZ2V0KG9mcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbiAgfVxuXG4gIHNldChvZnMsIHYpIHtcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmaWxsKHYpIHtcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLCBiLCB0b3RhbCkge1xuICByZXR1cm4gYS5jb21wYXJlKGIsIHRvdGFsKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSkge1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmIChjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmIChcbiAgICBsYXlvdXQgPT09IDAgJiYgLy8gY19sYXlvdXRcbiAgICBkaW1zLmxlbmd0aCA9PT0gMSAmJiAvLyBBcnJheTFcbiAgICBzaXplX3Blcl9lbGVtZW50ID09PSAxICYmXG4gICAga2luZCAhPT0gMTMgLy8gZmxvYXQxNlxuICApXG4gICAgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmIChiYS5sYXlvdXQgPT09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiBiMSB8IChiMiA8PCA4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMgKyAwKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzICsgMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMgKyAzKTtcbiAgcmV0dXJuIChiMSA8PCAwKSB8IChiMiA8PCA4KSB8IChiMyA8PCAxNikgfCAoYjQgPDwgMjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyArIDApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMgKyAyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyArIDMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzICsgNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMgKyA1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcyArIDYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzICsgNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCwgYjcsIGI2LCBiNSwgYjQsIGIzLCBiMiwgYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmIChvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMgKyAwLCB2ICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZiAob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzICsgMCwgdiAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzICsgMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMgKyAzLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYgKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcyArIGksIHZbNyAtIGldKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCwgaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLCBpMSwgaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9PSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gMTsgaSsrKSBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBiYS5kaW1zW2NoYW5nZWRfZGltXSkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKSBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShcbiAgICBvZnMgKiBzaXplX3Blcl9lbGVtZW50LFxuICAgIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQsXG4gICk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpO1xuICBpZiAoYmEuY2FtbF9jdXN0b20gPT09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYmEuZGltc1tpXSA8IDB4ZmZmZikgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgY2FzZSA1OiAvLyBVaW50MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6IC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OiAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspIHtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOiAvLyBGbG9hdDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAwOiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUoOCwgYltqXSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlKDgsIGJbal0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5wYWNrRmxvYXQxNlxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKSB7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmO1xuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW107XG4gIGlmIChuYW1lID09PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmIChzaXplX2RpbSA9PT0gMHhmZmZmKSB7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmIChzaXplX2RpbV9oaSAhPT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OiAvLyBJbnQxNkFycmF5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OiAvLyBJbnQzMkFycmF5IChpbnQpXG4gICAgY2FzZSA5OiAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICBpZiAoc2l4dHkpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXG4gICAgICAgICAgXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiLFxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICAgIGJhLnNldChpLCBpbnQ2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIEZsb2F0NjRBcnJheVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTM6IC8vIEZsb2F0MTZBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDA6IC8vIEZsb2F0MzJBcnJheVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBmKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICAgIGJhLnNldChpLCBbMjU0LCByZSwgaW1dKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgICBiYS5zZXQoaSwgWzI1NCwgcmUsIGltXSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9EZXByZWNhdGVkOiBVc2UgW2NhbWxfYmFfY3JlYXRlX3Vuc2FmZV0gaW5zdGVhZFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIF9qc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKSB7XG4gIGlmIChkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09PSAyKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF91bnBhY2tGbG9hdDE2LCBjYW1sX2hhc2hfbWl4X2Zsb2F0MTYsIGNhbWxfaGFzaF9taXhfZmxvYXQzMlxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKSB7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoIChiYS5raW5kKSB7XG4gICAgY2FzZSAyOiAvL0ludDhBcnJheVxuICAgIGNhc2UgMzogLy9VaW50OEFycmF5XG4gICAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgICAgdmFyIHcgPSAwLFxuICAgICAgICBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9lbHRzOyBpICs9IDQpIHtcbiAgICAgICAgdyA9XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDBdICYgMHhmZikgfFxuICAgICAgICAgICgoYmEuZGF0YVtpICsgMV0gJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgKChiYS5kYXRhW2kgKyAyXSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgKGJhLmRhdGFbaSArIDNdIDw8IDI0KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgICAgfVxuICAgICAgdyA9IDA7XG4gICAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICAgIHcgPSBiYS5kYXRhW2kgKyAyXSA8PCAxNjtcbiAgICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDFdIDw8IDg7XG4gICAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3IHw9IGJhLmRhdGFbaSArIDBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDogLy8gSW50MTZBcnJheVxuICAgIGNhc2UgNTogLy8gVWludDE2QXJyYXlcbiAgICAgIGlmIChudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgICB2YXIgdyA9IDAsXG4gICAgICAgIGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSArIDIgPD0gbnVtX2VsdHM7IGkgKz0gMikge1xuICAgICAgICB3ID0gKGJhLmRhdGFbaSArIDBdICYgMHhmZmZmKSB8IChiYS5kYXRhW2kgKyAxXSA8PCAxNik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICAgIH1cbiAgICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPT0gMCkgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA2OiAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6IC8vIEludDMyQXJyYXkgKGludClcbiAgICBjYXNlIDk6IC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6IC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgICBudW1fZWx0cyAqPSAyO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMDogLy8gRmxvYXQzMkFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKylcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQzMihoLCBiYS5kYXRhW2ldKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgbnVtX2VsdHMgKj0gMjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICAgIGNhc2UgMTogLy8gRmxvYXQ2NEFycmF5XG4gICAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDEzOlxuICAgICAgaWYgKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdDE2KGgsIGJhLmRhdGFbaV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQxNlxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQxNihoYXNoLCBkKSB7XG4gIC8qIE5vcm1hbGl6ZSBOYU5zICovXG4gIGlmICgoZCAmIDB4N2MwMCkgPT09IDB4N2MwMCAmJiAoZCAmIDB4MDNmZikgIT09IDApIHtcbiAgICBkID0gMHg3YzAxO1xuICB9IGVsc2UgaWYgKGQgPT09IDB4ODAwMCkge1xuICAgIC8qIE5vcm1hbGl6ZSAtMCBpbnRvICswICovXG4gICAgZCA9IDA7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQzMihoYXNoLCB2KSB7XG4gIHZhciBpID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KHYpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGkgJiAweDdmODAwMDAwKSA9PT0gMHg3ZjgwMDAwMCAmJiAoaSAmIDB4N2ZmZmZmKSAhPT0gMCkge1xuICAgIGkgPSAweDdmODAwMDAxO1xuICB9IGVsc2UgaWYgKGkgPT09ICgweDgwMDAwMDAwIHwgMCkpIHtcbiAgICAvKiBOb3JtYWxpemUgLTAgaW50byArMCAqL1xuICAgIC8vIFRoaXMgY29kZSBwYXRoIGlzIG5vdCB1c2VkIGJ5IGNhbWxfaGFzaCBiZWNhdXNlIDAgYW5kIC0wIGxvb2tcbiAgICAvLyBsaWtlIGludGVnZXJzXG4gICAgaSA9IDA7XG4gIH1cbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGkpO1xuICByZXR1cm4gaGFzaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKSB7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpIHtcbiAgdmFyIGtpbmQ7XG4gIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKSB7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXlcbiAgICAgID8gbmV3IEludDMyQXJyYXkodGEuYnVmZmVyLCB0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpXG4gICAgICA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgVWludDhBcnJheShcbiAgICBiYS5idWZmZXIsXG4gICAgYmEuYnl0ZU9mZnNldCxcbiAgICBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCxcbiAgKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSwgcG9zMSArIGkpO1xuICAgIHZhciBiID0gY2FtbF9iYV9nZXRfMShzMiwgcG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGJhMS5kYXRhLnN1YmFycmF5KG9mczEsIG9mczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2UsIHBvczIpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pIHtcbiAgaWYgKDEyICE9PSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYgKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyMSkuc3ViYXJyYXkocG9zMSwgcG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSwgb2ZzMik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhKHN0cjEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmIChwb3MxICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYgKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zdWJhcnJheShwb3MxLCBwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLCBvZnMyKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKSB7XG4gIGlmICgxMiAhPT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIGlmIChvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmIChwb3MyICsgbGVuID4gY2FtbF9tbF9ieXRlc19sZW5ndGgoYnl0ZXMyKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLCBvZnMxICsgbGVuKTtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXkoc2xpY2UpLCAwLCBieXRlczIsIHBvczIsIGxlbik7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogYmxha2UyYlxuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBibGFrZTJiID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQmxha2UyQiBpbiBwdXJlIEphdmFzY3JpcHRcbiAgLy8gQWRhcHRlZCBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gUkZDNzY5M1xuICAvLyBQb3J0ZWQgdG8gSmF2YXNjcmlwdCBieSBEQyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9kY3Bvc2NoXG5cbiAgLy8gNjQtYml0IHVuc2lnbmVkIGFkZGl0aW9uXG4gIC8vIFNldHMgdlthLGErMV0gKz0gdltiLGIrMV1cbiAgLy8gdiBzaG91bGQgYmUgYSBVaW50MzJBcnJheVxuICBmdW5jdGlvbiBBREQ2NEFBKHYsIGEsIGIpIHtcbiAgICBjb25zdCBvMCA9IHZbYV0gKyB2W2JdO1xuICAgIGxldCBvMSA9IHZbYSArIDFdICsgdltiICsgMV07XG4gICAgaWYgKG8wID49IDB4MTAwMDAwMDAwKSB7XG4gICAgICBvMSsrO1xuICAgIH1cbiAgICB2W2FdID0gbzA7XG4gICAgdlthICsgMV0gPSBvMTtcbiAgfVxuXG4gIC8vIDY0LWJpdCB1bnNpZ25lZCBhZGRpdGlvblxuICAvLyBTZXRzIHZbYSxhKzFdICs9IGJcbiAgLy8gYjAgaXMgdGhlIGxvdyAzMiBiaXRzIG9mIGIsIGIxIHJlcHJlc2VudHMgdGhlIGhpZ2ggMzIgYml0c1xuICBmdW5jdGlvbiBBREQ2NEFDKHYsIGEsIGIwLCBiMSkge1xuICAgIGxldCBvMCA9IHZbYV0gKyBiMDtcbiAgICBpZiAoYjAgPCAwKSB7XG4gICAgICBvMCArPSAweDEwMDAwMDAwMDtcbiAgICB9XG4gICAgbGV0IG8xID0gdlthICsgMV0gKyBiMTtcbiAgICBpZiAobzAgPj0gMHgxMDAwMDAwMDApIHtcbiAgICAgIG8xKys7XG4gICAgfVxuICAgIHZbYV0gPSBvMDtcbiAgICB2W2EgKyAxXSA9IG8xO1xuICB9XG5cbiAgLy8gTGl0dGxlLWVuZGlhbiBieXRlIGFjY2Vzc1xuICBmdW5jdGlvbiBCMkJfR0VUMzIoYXJyLCBpKSB7XG4gICAgcmV0dXJuIGFycltpXSBeIChhcnJbaSArIDFdIDw8IDgpIF4gKGFycltpICsgMl0gPDwgMTYpIF4gKGFycltpICsgM10gPDwgMjQpO1xuICB9XG5cbiAgLy8gRyBNaXhpbmcgZnVuY3Rpb25cbiAgLy8gVGhlIFJPVFJzIGFyZSBpbmxpbmVkIGZvciBzcGVlZFxuICBmdW5jdGlvbiBCMkJfRyhhLCBiLCBjLCBkLCBpeCwgaXkpIHtcbiAgICBjb25zdCB4MCA9IG1baXhdO1xuICAgIGNvbnN0IHgxID0gbVtpeCArIDFdO1xuICAgIGNvbnN0IHkwID0gbVtpeV07XG4gICAgY29uc3QgeTEgPSBtW2l5ICsgMV07XG5cbiAgICBBREQ2NEFBKHYsIGEsIGIpOyAvLyB2W2EsYSsxXSArPSB2W2IsYisxXSAuLi4gaW4gSlMgd2UgbXVzdCBzdG9yZSBhIHVpbnQ2NCBhcyB0d28gdWludDMyc1xuICAgIEFERDY0QUModiwgYSwgeDAsIHgxKTsgLy8gdlthLCBhKzFdICs9IHggLi4uIHgwIGlzIHRoZSBsb3cgMzIgYml0cyBvZiB4LCB4MSBpcyB0aGUgaGlnaCAzMiBiaXRzXG5cbiAgICAvLyB2W2QsZCsxXSA9ICh2W2QsZCsxXSB4b3IgdlthLGErMV0pIHJvdGF0ZWQgdG8gdGhlIHJpZ2h0IGJ5IDMyIGJpdHNcbiAgICBsZXQgeG9yMCA9IHZbZF0gXiB2W2FdO1xuICAgIGxldCB4b3IxID0gdltkICsgMV0gXiB2W2EgKyAxXTtcbiAgICB2W2RdID0geG9yMTtcbiAgICB2W2QgKyAxXSA9IHhvcjA7XG5cbiAgICBBREQ2NEFBKHYsIGMsIGQpO1xuXG4gICAgLy8gdltiLGIrMV0gPSAodltiLGIrMV0geG9yIHZbYyxjKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDI0IGJpdHNcbiAgICB4b3IwID0gdltiXSBeIHZbY107XG4gICAgeG9yMSA9IHZbYiArIDFdIF4gdltjICsgMV07XG4gICAgdltiXSA9ICh4b3IwID4+PiAyNCkgXiAoeG9yMSA8PCA4KTtcbiAgICB2W2IgKyAxXSA9ICh4b3IxID4+PiAyNCkgXiAoeG9yMCA8PCA4KTtcblxuICAgIEFERDY0QUEodiwgYSwgYik7XG4gICAgQURENjRBQyh2LCBhLCB5MCwgeTEpO1xuXG4gICAgLy8gdltkLGQrMV0gPSAodltkLGQrMV0geG9yIHZbYSxhKzFdKSByb3RhdGVkIHJpZ2h0IGJ5IDE2IGJpdHNcbiAgICB4b3IwID0gdltkXSBeIHZbYV07XG4gICAgeG9yMSA9IHZbZCArIDFdIF4gdlthICsgMV07XG4gICAgdltkXSA9ICh4b3IwID4+PiAxNikgXiAoeG9yMSA8PCAxNik7XG4gICAgdltkICsgMV0gPSAoeG9yMSA+Pj4gMTYpIF4gKHhvcjAgPDwgMTYpO1xuXG4gICAgQURENjRBQSh2LCBjLCBkKTtcblxuICAgIC8vIHZbYixiKzFdID0gKHZbYixiKzFdIHhvciB2W2MsYysxXSkgcm90YXRlZCByaWdodCBieSA2MyBiaXRzXG4gICAgeG9yMCA9IHZbYl0gXiB2W2NdO1xuICAgIHhvcjEgPSB2W2IgKyAxXSBeIHZbYyArIDFdO1xuICAgIHZbYl0gPSAoeG9yMSA+Pj4gMzEpIF4gKHhvcjAgPDwgMSk7XG4gICAgdltiICsgMV0gPSAoeG9yMCA+Pj4gMzEpIF4gKHhvcjEgPDwgMSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBWZWN0b3JcbiAgY29uc3QgQkxBS0UyQl9JVjMyID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweGYzYmNjOTA4LCAweDZhMDllNjY3LCAweDg0Y2FhNzNiLCAweGJiNjdhZTg1LCAweGZlOTRmODJiLCAweDNjNmVmMzcyLFxuICAgIDB4NWYxZDM2ZjEsIDB4YTU0ZmY1M2EsIDB4YWRlNjgyZDEsIDB4NTEwZTUyN2YsIDB4MmIzZTZjMWYsIDB4OWIwNTY4OGMsXG4gICAgMHhmYjQxYmQ2YiwgMHgxZjgzZDlhYiwgMHgxMzdlMjE3OSwgMHg1YmUwY2QxOSxcbiAgXSk7XG5cbiAgY29uc3QgU0lHTUE4ID0gW1xuICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE0LCAxMCwgNCwgOCwgOSwgMTUsXG4gICAgMTMsIDYsIDEsIDEyLCAwLCAyLCAxMSwgNywgNSwgMywgMTEsIDgsIDEyLCAwLCA1LCAyLCAxNSwgMTMsIDEwLCAxNCwgMywgNixcbiAgICA3LCAxLCA5LCA0LCA3LCA5LCAzLCAxLCAxMywgMTIsIDExLCAxNCwgMiwgNiwgNSwgMTAsIDQsIDAsIDE1LCA4LCA5LCAwLCA1LFxuICAgIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMsIDIsIDEyLCA2LCAxMCwgMCwgMTEsIDgsIDMsIDQsXG4gICAgMTMsIDcsIDUsIDE1LCAxNCwgMSwgOSwgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LFxuICAgIDExLCAxMywgMTEsIDcsIDE0LCAxMiwgMSwgMywgOSwgNSwgMCwgMTUsIDQsIDgsIDYsIDIsIDEwLCA2LCAxNSwgMTQsIDksIDExLFxuICAgIDMsIDAsIDgsIDEyLCAyLCAxMywgNywgMSwgNCwgMTAsIDUsIDEwLCAyLCA4LCA0LCA3LCA2LCAxLCA1LCAxNSwgMTEsIDksIDE0LFxuICAgIDMsIDEyLCAxMywgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTQsIDEwLFxuICAgIDQsIDgsIDksIDE1LCAxMywgNiwgMSwgMTIsIDAsIDIsIDExLCA3LCA1LCAzLFxuICBdO1xuXG4gIC8vIFRoZXNlIGFyZSBvZmZzZXRzIGludG8gYSB1aW50NjQgYnVmZmVyLlxuICAvLyBNdWx0aXBseSB0aGVtIGFsbCBieSAyIHRvIG1ha2UgdGhlbSBvZmZzZXRzIGludG8gYSB1aW50MzIgYnVmZmVyLFxuICAvLyBiZWNhdXNlIHRoaXMgaXMgSmF2YXNjcmlwdCBhbmQgd2UgZG9uJ3QgaGF2ZSB1aW50NjRzXG4gIGNvbnN0IFNJR01BODIgPSBuZXcgVWludDhBcnJheShcbiAgICBTSUdNQTgubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAqIDI7XG4gICAgfSksXG4gICk7XG5cbiAgLy8gQ29tcHJlc3Npb24gZnVuY3Rpb24uICdsYXN0JyBmbGFnIGluZGljYXRlcyBsYXN0IGJsb2NrLlxuICAvLyBOb3RlIHdlJ3JlIHJlcHJlc2VudGluZyAxNiB1aW50NjRzIGFzIDMyIHVpbnQzMnNcbiAgY29uc3QgdiA9IG5ldyBVaW50MzJBcnJheSgzMik7XG4gIGNvbnN0IG0gPSBuZXcgVWludDMyQXJyYXkoMzIpO1xuICBmdW5jdGlvbiBibGFrZTJiQ29tcHJlc3MoY3R4LCBsYXN0KSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gaW5pdCB3b3JrIHZhcmlhYmxlc1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICB2W2ldID0gY3R4LmhbaV07XG4gICAgICB2W2kgKyAxNl0gPSBCTEFLRTJCX0lWMzJbaV07XG4gICAgfVxuXG4gICAgLy8gbG93IDY0IGJpdHMgb2Ygb2Zmc2V0XG4gICAgdlsyNF0gPSB2WzI0XSBeIGN0eC50O1xuICAgIHZbMjVdID0gdlsyNV0gXiAoY3R4LnQgLyAweDEwMDAwMDAwMCk7XG4gICAgLy8gaGlnaCA2NCBiaXRzIG5vdCBzdXBwb3J0ZWQsIG9mZnNldCBtYXkgbm90IGJlIGhpZ2hlciB0aGFuIDIqKjUzLTFcblxuICAgIC8vIGxhc3QgYmxvY2sgZmxhZyBzZXQgP1xuICAgIGlmIChsYXN0KSB7XG4gICAgICB2WzI4XSA9IH52WzI4XTtcbiAgICAgIHZbMjldID0gfnZbMjldO1xuICAgIH1cblxuICAgIC8vIGdldCBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIG1baV0gPSBCMkJfR0VUMzIoY3R4LmIsIDQgKiBpKTtcbiAgICB9XG5cbiAgICAvLyB0d2VsdmUgcm91bmRzIG9mIG1peGluZ1xuICAgIC8vIHVuY29tbWVudCB0aGUgRGVidWdQcmludCBjYWxscyB0byBsb2cgdGhlIGNvbXB1dGF0aW9uXG4gICAgLy8gYW5kIG1hdGNoIHRoZSBSRkMgc2FtcGxlIGRvY3VtZW50YXRpb25cbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgQjJCX0coMCwgOCwgMTYsIDI0LCBTSUdNQTgyW2kgKiAxNiArIDBdLCBTSUdNQTgyW2kgKiAxNiArIDFdKTtcbiAgICAgIEIyQl9HKDIsIDEwLCAxOCwgMjYsIFNJR01BODJbaSAqIDE2ICsgMl0sIFNJR01BODJbaSAqIDE2ICsgM10pO1xuICAgICAgQjJCX0coNCwgMTIsIDIwLCAyOCwgU0lHTUE4MltpICogMTYgKyA0XSwgU0lHTUE4MltpICogMTYgKyA1XSk7XG4gICAgICBCMkJfRyg2LCAxNCwgMjIsIDMwLCBTSUdNQTgyW2kgKiAxNiArIDZdLCBTSUdNQTgyW2kgKiAxNiArIDddKTtcbiAgICAgIEIyQl9HKDAsIDEwLCAyMCwgMzAsIFNJR01BODJbaSAqIDE2ICsgOF0sIFNJR01BODJbaSAqIDE2ICsgOV0pO1xuICAgICAgQjJCX0coMiwgMTIsIDIyLCAyNCwgU0lHTUE4MltpICogMTYgKyAxMF0sIFNJR01BODJbaSAqIDE2ICsgMTFdKTtcbiAgICAgIEIyQl9HKDQsIDE0LCAxNiwgMjYsIFNJR01BODJbaSAqIDE2ICsgMTJdLCBTSUdNQTgyW2kgKiAxNiArIDEzXSk7XG4gICAgICBCMkJfRyg2LCA4LCAxOCwgMjgsIFNJR01BODJbaSAqIDE2ICsgMTRdLCBTSUdNQTgyW2kgKiAxNiArIDE1XSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGN0eC5oW2ldID0gY3R4LmhbaV0gXiB2W2ldIF4gdltpICsgMTZdO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldXNhYmxlIHBhcmFtZXRlckJsb2NrXG4gIGNvbnN0IHBhcmFtZXRlckJsb2NrID0gbmV3IFVpbnQ4QXJyYXkoW1xuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICAwOiBvdXRsZW4sIGtleWxlbiwgZmFub3V0LCBkZXB0aFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vICA0OiBsZWFmIGxlbmd0aCwgc2VxdWVudGlhbCBtb2RlXG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gIDg6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTI6IG5vZGUgb2Zmc2V0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMTY6IG5vZGUgZGVwdGgsIGlubmVyIGxlbmd0aCwgcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMjA6IHJmdVxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDI0OiByZnVcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAyODogcmZ1XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gMzI6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyAzNjogc2FsdFxuICAgIDAsXG4gICAgMCxcbiAgICAwLFxuICAgIDAsIC8vIDQwOiBzYWx0XG4gICAgMCxcbiAgICAwLFxuICAgIDAsXG4gICAgMCwgLy8gNDQ6IHNhbHRcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA0ODogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1MjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA1NjogcGVyc29uYWxcbiAgICAwLFxuICAgIDAsXG4gICAgMCxcbiAgICAwLCAvLyA2MDogcGVyc29uYWxcbiAgXSk7XG5cbiAgLy8gQ3JlYXRlcyBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0XG4gIC8vIFJlcXVpcmVzIGFuIG91dHB1dCBsZW5ndGggYmV0d2VlbiAxIGFuZCA2NCBieXRlc1xuICAvLyBUYWtlcyBhbiBvcHRpb25hbCBVaW50OEFycmF5IGtleVxuICBmdW5jdGlvbiBibGFrZTJiSW5pdChvdXRsZW4sIGtleSkge1xuICAgIGlmIChvdXRsZW4gPT09IDAgfHwgb3V0bGVuID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgb3V0cHV0IGxlbmd0aCwgZXhwZWN0ZWQgMCA8IGxlbmd0aCA8PSA2NFwiKTtcbiAgICB9XG4gICAgaWYgKGtleS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBrZXksIGV4cGVjdGVkIFVpbnQ4QXJyYXkgd2l0aCAwIDwgbGVuZ3RoIDw9IDY0XCIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRlLCAncGFyYW0gYmxvY2snXG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgYjogbmV3IFVpbnQ4QXJyYXkoMTI4KSxcbiAgICAgIGg6IG5ldyBVaW50MzJBcnJheSgxNiksXG4gICAgICB0OiAwLCAvLyBpbnB1dCBjb3VudFxuICAgICAgYzogMCwgLy8gcG9pbnRlciB3aXRoaW4gYnVmZmVyXG4gICAgICBvdXRsZW46IG91dGxlbiwgLy8gb3V0cHV0IGxlbmd0aCBpbiBieXRlc1xuICAgIH07XG5cbiAgICAvLyBpbml0aWFsaXplIHBhcmFtZXRlckJsb2NrIGJlZm9yZSB1c2FnZVxuICAgIHBhcmFtZXRlckJsb2NrLmZpbGwoMCk7XG4gICAgcGFyYW1ldGVyQmxvY2tbMF0gPSBvdXRsZW47XG4gICAgcGFyYW1ldGVyQmxvY2tbMV0gPSBrZXkubGVuZ3RoO1xuICAgIHBhcmFtZXRlckJsb2NrWzJdID0gMTsgLy8gZmFub3V0XG4gICAgcGFyYW1ldGVyQmxvY2tbM10gPSAxOyAvLyBkZXB0aFxuXG4gICAgLy8gaW5pdGlhbGl6ZSBoYXNoIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBjdHguaFtpXSA9IEJMQUtFMkJfSVYzMltpXSBeIEIyQl9HRVQzMihwYXJhbWV0ZXJCbG9jaywgaSAqIDQpO1xuICAgIH1cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMCkge1xuICAgICAgYmxha2UyYlVwZGF0ZShjdHgsIGtleSk7XG4gICAgICAvLyBhdCB0aGUgZW5kXG4gICAgICBjdHguYyA9IDEyODtcbiAgICB9XG5cbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmVxdWlyZXMgaGFzaCBjb250ZXh0IGFuZCBVaW50OEFycmF5IChieXRlIGFycmF5KVxuICBmdW5jdGlvbiBibGFrZTJiVXBkYXRlKGN0eCwgaW5wdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3R4LmMgPT09IDEyOCkge1xuICAgICAgICAvLyBidWZmZXIgZnVsbCA/XG4gICAgICAgIGN0eC50ICs9IGN0eC5jOyAvLyBhZGQgY291bnRlcnNcbiAgICAgICAgYmxha2UyYkNvbXByZXNzKGN0eCwgZmFsc2UpOyAvLyBjb21wcmVzcyAobm90IGxhc3QpXG4gICAgICAgIGN0eC5jID0gMDsgLy8gY291bnRlciB0byB6ZXJvXG4gICAgICB9XG4gICAgICBjdHguYltjdHguYysrXSA9IGlucHV0W2ldO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXRlcyBhIEJMQUtFMmIgc3RyZWFtaW5nIGhhc2hcbiAgLy8gUmV0dXJucyBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyB0aGUgbWVzc2FnZSBkaWdlc3RcbiAgZnVuY3Rpb24gYmxha2UyYkZpbmFsKGN0eCkge1xuICAgIGN0eC50ICs9IGN0eC5jOyAvLyBtYXJrIGxhc3QgYmxvY2sgb2Zmc2V0XG5cbiAgICB3aGlsZSAoY3R4LmMgPCAxMjgpIHtcbiAgICAgIC8vIGZpbGwgdXAgd2l0aCB6ZXJvc1xuICAgICAgY3R4LmJbY3R4LmMrK10gPSAwO1xuICAgIH1cbiAgICBibGFrZTJiQ29tcHJlc3MoY3R4LCB0cnVlKTsgLy8gZmluYWwgYmxvY2sgZmxhZyA9IDFcblxuICAgIC8vIGxpdHRsZSBlbmRpYW4gY29udmVydCBhbmQgc3RvcmVcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShjdHgub3V0bGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5vdXRsZW47IGkrKykge1xuICAgICAgb3V0W2ldID0gY3R4LmhbaSA+PiAyXSA+PiAoOCAqIChpICYgMykpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHJldHVybiB7IEluaXQ6IGJsYWtlMmJJbml0LCBVcGRhdGU6IGJsYWtlMmJVcGRhdGUsIEZpbmFsOiBibGFrZTJiRmluYWwgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl9jcmVhdGUoaGFzaGxlbiwga2V5KSB7XG4gIGtleSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKGtleSk7XG4gIGlmIChrZXkubGVuZ3RoID4gNjQpIHtcbiAgICBrZXkuc3ViYXJyYXkoMCwgNjQpO1xuICB9XG4gIHJldHVybiBibGFrZTJiLkluaXQoaGFzaGxlbiwga2V5KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBibGFrZTJiXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBfaGFzaGxlbikge1xuICAvLyBjdHgub3V0bGVuID09PSBoYXNobGVuXG4gIHZhciByID0gYmxha2UyYi5GaW5hbChjdHgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfdWludDhfYXJyYXkocik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogYmxha2UyYlxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgaW5wdXQgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpbnB1dCA9IGlucHV0LnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKTtcbiAgYmxha2UyYi5VcGRhdGUoY3R4LCBpbnB1dCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsYWtlMl91cGRhdGVcbi8vUmVxdWlyZXM6IGJsYWtlMmJcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWYsIG9mcywgbGVuKSB7XG4gIHZhciBpbnB1dCA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmKTtcbiAgaW5wdXQgPSBpbnB1dC5zdWJhcnJheShvZnMsIG9mcyArIGxlbik7XG4gIGJsYWtlMmIuVXBkYXRlKGN0eCwgaW5wdXQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9ibGFrZTJfc3RyaW5nKGhhc2hsZW4sIGtleSwgYnVmX3N0ciwgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfYmxha2UyX2NyZWF0ZShoYXNobGVuLCBrZXkpO1xuICB2YXIgYnVmID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmX3N0cik7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGFrZTJfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl9maW5hbFxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfYmxha2UyX2J5dGVzKGhhc2hsZW4sIGtleSwgYnVmLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleSk7XG4gIGNhbWxfYmxha2UyX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfZmluYWwoY3R4LCBoYXNobGVuKTtcbn1cblxuLy9Qcm92aWRlczogYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfY3JlYXRlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX2NyZWF0ZShoYXNobGVuLCBrZXkpIHtcbiAgY29uc3Qga2V5X2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhrZXkpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfY3JlYXRlKGhhc2hsZW4sIGtleV9qc29vX3N0cmluZyk7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9ibGFrZTJfZmluYWwsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBibGFrZTJfanNfZm9yX3dhc21fZmluYWwoY3R4LCBoYXNobGVuKSB7XG4gIHJldHVybiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfYmxha2UyX2ZpbmFsKGN0eCwgaGFzaGxlbikpO1xufVxuXG4vL1Byb3ZpZGVzOiBibGFrZTJfanNfZm9yX3dhc21fdXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2JsYWtlMl91cGRhdGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IHdhc21cbi8vVmVyc2lvbjogPj0gNS4yLCA8IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWYpO1xuICByZXR1cm4gY2FtbF9ibGFrZTJfdXBkYXRlKGN0eCwgYnVmX2pzb29fc3RyaW5nLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGJsYWtlMl9qc19mb3Jfd2FzbV91cGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfYmxha2UyX3VwZGF0ZSwgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiB3YXNtXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gYmxha2UyX2pzX2Zvcl93YXNtX3VwZGF0ZShjdHgsIGJ1Ziwgb2ZzLCBsZW4pIHtcbiAgY29uc3QgYnVmX2pzb29fc3RyaW5nID0gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGJ1Zik7XG4gIHJldHVybiBjYW1sX2JsYWtlMl91cGRhdGUoY3R4LCBidWZfanNvb19zdHJpbmcsIG9mcywgbGVuKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsIHRvcmVhZCkge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYgKHRvcmVhZCA8IDApIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCwgYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhcbiAgICAgICAgY2hhbmlkLFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIDAsXG4gICAgICAgIHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkLFxuICAgICAgKTtcbiAgICAgIGlmIChyZWFkID09PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsIGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLCBvZnMsIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHJldHVybiAoeCArIHkpIHwgMDtcbiAgfVxuICBmdW5jdGlvbiB4eChxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4geHgoYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLFxuICAgICAgYiA9IHdbMV0sXG4gICAgICBjID0gd1syXSxcbiAgICAgIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclswXSwgNywgMHhkNzZhYTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxXSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMl0sIDE3LCAweDI0MjA3MGRiKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzNdLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls0XSwgNywgMHhmNTdjMGZhZik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls1XSwgMTIsIDB4NDc4N2M2MmEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzddLCAyMiwgMHhmZDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcls4XSwgNywgMHg2OTgwOThkOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcls5XSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhmZmZmNWJiMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NWNkN2JlKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweGZkOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4YTY3OTQzOGUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OWI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA1LCAweGY2MWUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzZdLCA5LCAweGMwNDBiMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1ZTVhNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMF0sIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzVdLCA1LCAweGQ2MmYxMDVkKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweGQ4YTFlNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzRdLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcls5XSwgNSwgMHgyMWUxY2RlNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbM10sIDE0LCAweGY0ZDUwZDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzhdLCAyMCwgMHg0NTVhMTRlZCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4YTllM2U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMl0sIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbN10sIDE0LCAweDY3NmYwMmQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OGQyYTRjOGEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcls1XSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcls4XSwgMTEsIDB4ODc3MWY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweGZkZTUzODBjKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzFdLCA0LCAweGE0YmVlYTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzRdLCAxMSwgMHg0YmRlY2ZhOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcls3XSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhiZWJmYmM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5YjdlYzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMF0sIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzNdLCAxNiwgMHhkNGVmMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcls2XSwgMjMsIDB4MDQ4ODFkMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbOV0sIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhlNmRiOTllNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFmYTI3Y2Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzJdLCAyMywgMHhjNGFjNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzBdLCA2LCAweGY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzddLCAxMCwgMHg0MzJhZmY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweGFiOTQyM2E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzVdLCAyMSwgMHhmYzkzYTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1YjU5YzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbM10sIDEwLCAweDhmMGNjYzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4ZmZlZmY0N2QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMV0sIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzhdLCA2LCAweDZmYTg3ZTRmKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbNl0sIDE1LCAweGEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbNF0sIDYsIDB4Zjc1MzdlODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsyXSwgMTUsIDB4MmFkN2QyYmIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbOV0sIDIxLCAweGViODZkMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH07XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtcbiAgICBsZW46IDAsXG4gICAgdzogbmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2XSksXG4gICAgYjMyOiBiMzIsXG4gICAgYjg6IGI4LFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbikge1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYgKGluX2J1Zikge1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYgKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCwgaW5wdXRfbGVuKSwgaW5fYnVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLCBtaXNzaW5nKSwgaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUgKGlucHV0X2xlbiA+PSA2NCkge1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLCBpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmIChpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsIGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpIHtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZisrO1xuICBpZiAoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IgKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNTY7IGorKykge1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspIHtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MWZmZmZmZmY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweGZmO1xuICByZXR1cm4gdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LCBhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX3VpbnQ4X2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19kYXRhdmlld1xudmFyIGpzb29fZGF0YXZpZXcgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKTtcblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuLy9SZXF1aXJlczoganNvb19kYXRhdmlld1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpIHtcbiAganNvb19kYXRhdmlldy5zZXRGbG9hdDY0KDAsIHgsIHRydWUpO1xuICB2YXIgbG8zMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xuICB2YXIgaGkzMiA9IGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDQsIHRydWUpO1xuICB2YXIgbG8gPSBsbzMyICYgMHhmZmZmZmY7XG4gIHZhciBtaSA9IChsbzMyID4+PiAyNCkgfCAoKGhpMzIgPDwgOCkgJiAweGZmZmZmZik7XG4gIHZhciBoaSA9IChoaTMyID4+PiAxNikgJiAweGZmZmY7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCh4KSB7XG4gIGpzb29fZGF0YXZpZXcuc2V0RmxvYXQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0VWludDMyKDAsIHRydWUpIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHggPiAwID8gXCJpbmZpbml0eVwiIDogXCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSB4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPyAxIDogeCA+PSAwID8gMCA6IDE7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PT0gMCkge1xuICB9IGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSB7XG4gICAgICB4ICo9IDI7XG4gICAgICBleHAtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikge1xuICAgICAgeCAvPSAyO1xuICAgICAgZXhwKys7XG4gICAgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyBcIlwiIDogXCIrXCI7XG4gIHZhciBzaWduX3N0ciA9IFwiXCI7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9IFwiLVwiO1xuICBlbHNlIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIDQzIC8qICcrJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIitcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyIC8qICcgJyAqLzpcbiAgICAgICAgc2lnbl9zdHIgPSBcIiBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLCBwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmIChwcmVjID49IDApIHtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgIHhfc3RyICs9IFwiLlwiICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsIFwiMFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHggKyAxICsgcHJlYztcbiAgICAgIGlmICh4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgXCIwXCIpO1xuICAgICAgZWxzZSB4X3N0ciA9IHhfc3RyLnNsaWNlKDAsIHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXG4gICAgc2lnbl9zdHIgKyBcIjB4XCIgKyB4X3N0ciArIFwicFwiICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApLFxuICApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZGF0YXZpZXdcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIC8vIFY4IHVzZXMgc2lnbmFsaW5nIE5hTnMgYXMgc2VudGluZWwuIFNvLCBOYU5zIGFyZSBtYWRlIHF1aWV0IHdoZW5cbiAgLy8gdGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5LiBNYWtlIHRoZW0gcXVpZXQgaGVyZSBzbyB0aGF0IHdlIGdldFxuICAvLyBjb25zaXN0ZW50IHJlc3VsdHMuXG4gIGlmICgoaGkgJiAweDdmZjgpID09PSAweDdmZjAgJiYgKG1pIHwgbG8gfCAoaGkgJiAweGYpKSAhPT0gMCkgaGkgfD0gODtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoMCwgbG8gfCAobWkgPDwgMjQpLCB0cnVlKTtcbiAganNvb19kYXRhdmlldy5zZXRVaW50MzIoNCwgKG1pID4+PiA4KSB8IChoaSA8PCAxNiksIHRydWUpO1xuICByZXR1cm4ganNvb19kYXRhdmlldy5nZXRGbG9hdDY0KDAsIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCh4LCB5KSB7XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkgfHwgTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gTnVtYmVyLk5hTjtcbiAgaWYgKHggPT09IHkpIHJldHVybiB5O1xuICBpZiAoeCA9PT0gMCkge1xuICAgIGlmICh5IDwgMCkgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NCk7XG4gICAgZWxzZSByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpO1xuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKHggPCB5ID09PSB4ID4gMCkgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSk7XG4gIGVsc2UgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSk7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2RhdGF2aWV3XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMoeCkge1xuICBqc29vX2RhdGF2aWV3LnNldFVpbnQzMigwLCB4LCB0cnVlKTtcbiAgcmV0dXJuIGpzb29fZGF0YXZpZXcuZ2V0RmxvYXQzMigwLCB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpID8gNCA6IDM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCh4KSB7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB2YXIgbmVnID0gMSAvIHggPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7XG4gICAgICBpID0gLWk7XG4gICAgICBmID0gLWY7XG4gICAgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKE51bWJlci5pc05hTih4KSkgcmV0dXJuIFswLCBOdW1iZXIuTmFOLCBOdW1iZXIuTmFOXTtcbiAgcmV0dXJuIFswLCAxIC8geCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0KHgsIGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7XG4gICAgICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0KHgpIHtcbiAgaWYgKHggPT09IDAgfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLXg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywgTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwgLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLXg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoIU51bWJlci5pc05hTih4KSkgcmV0dXJuIDE7XG4gIGlmICghTnVtYmVyLmlzTmFOKHkpKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0KHgsIHkpIHtcbiAgaWYgKHkgPT09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4geSA8IDAgPyAteCA6IHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuLy9BbGlhczogY2FtbF9zaWduYml0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4geCA8IDAgPyAxIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmV4cG0xKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkge1xuICByZXR1cm4gTWF0aC5wb3coMiwgeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMXAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmxvZzIoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nMTAoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLmNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvc2goeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCh4KSB7XG4gIHJldHVybiBNYXRoLnRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbmgoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0KHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4geCAtIHkgPj0gMC41ID8geSArIDEgOiB5O1xuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiB5IC0geCA+PSAwLjUgPyB5IC0gMSA6IHk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0KHgpIHtcbiAgcmV0dXJuIE1hdGguY2JydCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9XG4gICAgMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5KGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSBhaGkgKiBiaGkgLSBwICsgYWhpICogYmxvICsgYWxvICogYmhpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSBhIC0gKHMgLSB2KSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGp1c3QoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4XG4gICAgICA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKVxuICAgICAgOiB4O1xuICB9XG5cbiAgaWYgKHggPT09IDAgfHwgeSA9PT0gMCB8fCAhTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiAoTWF0aC5hYnMoeHMgKiB5cykgKiA0KSAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgKCgoTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OKSAvIDQpICogRVBTSUxPTikgLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LCBkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gTnVtYmVyLnBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdChcIitcIilbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLCBlKTtcbiAgICAgICAgeCArPSBjYW1sX3N0cl9yZXBlYXQoZSwgXCIwXCIpO1xuICAgICAgICBpZiAoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyBcIi5cIiArIGNhbWxfc3RyX3JlcGVhdChkcCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH1cbiAgfVxuICB2YXIgcyxcbiAgICBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSBmLnByZWMgPCAwID8gNiA6IGYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09PSAwICYmIDEgLyB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB7XG4gICAgZi5zaWduID0gLTE7XG4gICAgeCA9IC14O1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4oeCkpIHtcbiAgICBzID0gXCJuYW5cIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICBzID0gXCJpbmZcIjtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICB9IGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT09IFwiZVwiKVxuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgLSAxKSArIFwiMFwiICsgcy5zbGljZShpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZcIjpcbiAgICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcHJlYyA9IHByZWMgPyBwcmVjIDogMTtcbiAgICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICAgIHZhciBqID0gcy5pbmRleE9mKFwiZVwiKTtcbiAgICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IGogLSAxO1xuICAgICAgICAgIHdoaWxlIChzLmNoYXJBdChpKSA9PT0gXCIwXCIpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT09IFwiLlwiKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PT0gXCJlXCIpXG4gICAgICAgICAgICBzID0gcy5zbGljZSgwLCBpIC0gMSkgKyBcIjBcIiArIHMuc2xpY2UoaSAtIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgICBpZiAoZXhwIDwgMCkge1xuICAgICAgICAgICAgcCAtPSBleHAgKyAxO1xuICAgICAgICAgICAgcyA9IHgudG9GaXhlZChwKTtcbiAgICAgICAgICB9IGVsc2Ugd2hpbGUgKCgocyA9IHgudG9GaXhlZChwKSksIHMubGVuZ3RoID4gcHJlYyArIDEpKSBwLS07XG4gICAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKHMuY2hhckF0KGkpID09PSBcIjBcIikgaS0tO1xuICAgICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09PSBcIi5cIikgaS0tO1xuICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHZhciByX2Zsb2F0ID0gL14gKlstK10/KD86XFxkKlxcLj9cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWy0rXT9cXGQrKT8kLztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHJlcyA9ICtzO1xuICAvL0Zhc3QgcGF0aFxuICBpZiAoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLCBcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoIU51bWJlci5pc05hTihyZXMpICYmIHJfZmxvYXQudGVzdChzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKVxuICAgIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8kL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmIChtKSB7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCBcIlwiKTtcbiAgICB2YXIgbWFudGlzc2EgPSBOdW1iZXIucGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9ICgrbVs1XSB8fCAwKSAtIDQgKiBtMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgaWYgKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkoeCwgeSkge1xuICBpZiAoeS5mdW4pIHtcbiAgICB4LmZ1biA9IHkuZnVuO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmICh0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgeC5mdW4gPSB5O1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciBpID0geS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuLy9WZXJzaW9uOiA8IDUuNFxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYoeCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pO1xuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2xhenlcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2xhenkoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlfbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15X2xhenkoZHVtbXksIG5ld3ZhbCkge1xuICBzd2l0Y2ggKGNhbWxfb2JqX3RhZyhuZXd2YWwpKSB7XG4gICAgY2FzZSAyNDY6IC8vIExhenlcbiAgICBjYXNlIDI0NDogLy8gRm9yY2luZ1xuICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkXG4gICAgICBjYW1sX3VwZGF0ZV9kdW1teShkdW1teSwgbmV3dmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBkdW1teVsxXSA9IG5ld3ZhbDtcbiAgICAgIGR1bW15WzBdID0gMjUwO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyh4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHgpICYmIHhbMF0gPT09IHhbMF0gPj4+IDApIHJldHVybiB4WzBdO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKSByZXR1cm4gMjUyO1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSkgcmV0dXJuIDI1MjtcbiAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiAyNDc7XG4gIGVsc2UgaWYgKHg/LmNhbWxfY3VzdG9tKSByZXR1cm4gMjU1O1xuICBlbHNlIHJldHVybiAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcoeCwgdGFnKSB7XG4gIHhbMF0gPSB0YWc7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sodGFnLCBzaXplKSB7XG4gIC8vIFRPRE86IGZhaWwgZm9yIHZhbHVlIHRoYXQgYXJlIG5vdCByZXByZXNlbnRlZCBhcyBhbiBhcnJheVxuICB2YXIgbyA9IG5ldyBBcnJheShzaXplICsgMSk7XG4gIG9bMF0gPSB0YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLCB4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIiA/IHggOiB4LnNsaWNlKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUoeCwgcykge1xuICBpZiAocyA8PSAwIHx8IHMgKyAxID4geC5sZW5ndGgpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9PSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkKGIsIHYpIHtcbiAgYlswXSA9IDI1MDtcbiAgYlsxXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LCBpLCBvbGQsIG4pIHtcbiAgaWYgKHhbaSArIDFdID09PSBvbGQpIHtcbiAgICB4W2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZChfeCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQodikge1xuICByZXR1cm4gWzI1MCwgdl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcblxuLy9Qcm92aWRlczogY2FtbF9vb19jYWNoZV9pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tZXRob2RfY2FjaGVcbmZ1bmN0aW9uIGNhbWxfb29fY2FjaGVfaWQoKSB7XG4gIHZhciBjYWNoZWlkID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoO1xuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IDA7XG4gIGNhY2hlaWQ7XG59XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NhY2hlZF9tZXRob2QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWV0aG9kX2NhY2hlXG5mdW5jdGlvbiBjYW1sX2dldF9jYWNoZWRfbWV0aG9kKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAobWV0aHNbb2ZzICsgNF0gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgKyAzXTtcbiAgfVxuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSAtIDM7XG4gIHJldHVybiBtZXRoc1tsaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2Qob2JqLCB0YWcpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgbGkgPSAzLFxuICAgIGhpID0gbWV0aHNbMV0gKiAyICsgMSxcbiAgICBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkgKyBoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSArIDFdKSBoaSA9IG1pIC0gMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gdGFnID09PSBtZXRoc1tsaSArIDFdID8gbWV0aHNbbGldIDogMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQoYikge1xuICBiWzJdID0gY2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobywgaSkge1xuICByZXR1cm4gb1tpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobywgaSwgdikge1xuICByZXR1cm4gKG9baSArIDFdID0gdik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKF9vKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KF92LCBfb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLCBvLCBuKSB7XG4gIGlmIChiWzBdID09PSBvKSB7XG4gICAgYlswXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG8pICYmXG4gICAgb1swXSA9PT0gb1swXSA+Pj4gMCAmJlxuICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpXG4gICkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ0LCAyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDQsIDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiBjYW1sX29ial90YWcobykgPT09IDI1MCA/IG9bMV0gOiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gdCA9PT0gMjQ1ID8gMSA6IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2lkZW50aWZpZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2N1c3RvbV9pZGVudGlmaWVyKG8pIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG8uY2FtbF9jdXN0b20gfHwgXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZ2NfcmFtcF91cFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF91cChmKSB7XG4gIHZhciBhID0gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xuICB2YXIgc3VzcGVuZGVkID0gMDtcbiAgcmV0dXJuIFswLCBhLCBzdXNwZW5kZWRdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2djX3JhbXBfZG93blxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfbWxfZ2NfcmFtcF9kb3duKF9zdXNwZW5kZWRfY29sbGVjdGlvbl93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuIiwiLypcblRvIGRlYWwgd2l0aCBlZmZlY3RzLCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgaXMgaW50dWl0aXZlbHkgY29tcG9zZWQgb2ZcbmEgc3RhY2sgb2YgZmliZXJzLiBFYWNoIGZpYmVyIGhhcyBhIGN1cnJlbnQgbG93LWxldmVsIGNvbnRpbnVhdGlvblxuKG9uZS1hcmd1bWVudCBKYXZhU2NyaXB0IGZ1bmN0aW9uKSwgYSBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kXG5hIHRyaXBsZSBvZiBoYW5kbGVycywgd2hpY2ggYXJlIGludm9rZWQgd2hlbiB0aGUgZmliZXIgdGVybWluYXRlc1xuKGVpdGhlciB3aXRoIGEgdmFsdWUgb3IgYW4gZXhjZXB0aW9uKSBvciB3aGVuIGFuIGVmZmVjdCBpcyBwZXJmb3JtZWQuXG5UaGUgbG93LWxldmVsIGNvbnRpbnVhdGlvbiBvZiB0aGUgdG9wbW9zdCBmaWJlciAod2hpY2ggaXMgY3VycmVudGx5XG5leGVjdXRpbmcpIGlzIHBhc3NlZCBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uIGFzIGFuIGFkZGl0aW9uYWxcbmFyZ3VtZW50LiBJdHMgc3RhY2sgb2YgZXhjZXB0aW9uIGhhbmRsZXJzIGlzIHN0b3JlZCBpblxuW2NhbWxfY3VycmVudF9zdGFjay54XS5cbkV4Y2VwdGlvbiBoYW5kbGVycyBhcmUgcHVzaGVkIGludG8gdGhpcyBzdGFja1xud2hlbiBlbnRlcmluZyBhIFt0cnkgLi4uIHdpdGggLi4uXSBhbmQgcG9wcGVkIG9uIGV4aXQuXG5IYW5kbGVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suaF1cbmFuZCB0aGUgcmVtYWluaW5nIGZpYmVycyBhcmUgc3RvcmVkIGluIFtjYW1sX2N1cnJlbnRfc3RhY2suZV0uXG5UbyBpbnN0YWxsIGFuIGVmZmVjdCBoYW5kbGVyLCB3ZSBwdXNoIGEgbmV3IGZpYmVyIGludG8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0LlxuXG5XZSBoYXZlIGJhc2ljYWxseSB0aGUgZm9sbG93aW5nIHR5cGUgZm9yIHJlaWZpZWQgY29udGludWF0aW9ucyAodHlwZVxuW2NvbnRpbnVhdGlvbl0gaW4gbW9kdWxlIFtFZmZlY3RdIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTpcblxuICB0eXBlICgnYSwgJ2IpIGNvbnRpbnVhdGlvbiA9ICgnYSwgJ2IpIHN0YWNrIHJlZlxuXG4gIGFuZCAoXywgXykgc3RhY2sgPVxuICAgICAgQ29ucyA6ICgnYiAtPiB1bml0KSAqICAgICAgICAgICAgICgqIGxvdy1sZXZlbCBjb250aW51YXRpb24gKilcbiAgICAgICAgICAgICAoZXhuIC0+IHVuaXQpIGxpc3QgKiAgICAgICAoKiBleGNlcHRpb24gaGFuZGxlcnMgKilcbiAgICAgICAgICAgICAoJ2IsICdjKSBoYW5kbGVyICpcbiAgICAgICAgICAgICAoJ2EsICdiKSBzdGFja1xuICAgICAgICAgICAgIC0+ICgnYSwgJ2MpIHN0YWNrXG4gICAgfCBFbXB0eSA6ICgnYSwgJ2EpIHN0YWNrXG5cbiAgYW5kICgnYSwnYikgaGFuZGxlciA9ICAgKCogQXMgaW4gbW9kdWxlIEVmZmVjdCBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG4gICAgeyByZXRjOiAnYSAtPiAnYjtcbiAgICAgIGV4bmM6IGV4biAtPiAnYjtcbiAgICAgIGVmZmM6ICdjLidjIEVmZmVjdC50IC0+ICgoJ2MsJ2IpIGNvbnRpbnVhdGlvbiAtPiAnYikgb3B0aW9uIH1cblxuQ29udGludWF0aW9ucyBhcmUgb25lLXNob3QuIEEgY29udGludWF0aW9uIFtyZWYgRW1wdHldIGhhcyBhbHJlYWR5XG5iZWVuIHJlc3VtZWQuXG5cbkEgY29udGludWF0aW9uIGlzIGJhc2ljYWxseSBjb21wb3NlZCBvZiBhIGxpc3Qgb2YgZmliZXJzLCB3aGljaCBlYWNoXG5oYXMgaXRzIGxvdy1sZXZlbCBjb250aW51YXRpb24sIGl0cyBzdGFjayBvZiBleGNlcHRpb24gaGFuZGxlcnMgYW5kIGFcbnRyaXBsZSBvZiBoYW5kbGVycyB0byBkZWFsIHdpdGggd2hlbiB0aGUgZmliZXIgdGVybWluYXRlcyBvciBhblxuZWZmZWN0IGlzIHBlcmZvcm1lZC4gV2hlbiByZXN1bWluZyBhIGNvbnRpbnVhdGlvbiwgdGhlIGlubmVybW9zdCBmaWJlclxuaXMgcmVzdW1lZCBmaXJzdC5cblxuVGhlIGhhbmRsZXJzIGFyZSBDUFMtdHJhbnNmb3JtZWQgZnVuY3Rpb25zOiB0aGV5IGFjdHVhbGx5IHRha2UgYW5cbmFkZGl0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjdXJyZW50IGxvdy1sZXZlbCBjb250aW51YXRpb24uXG4qL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vIFRoaXMgaGFzIHRoZSBzaGFwZSB7aywgeCwgaCwgZX0gd2hlcmVcbi8vIC0gaCBpcyBhIHRyaXBsZSBvZiBoYW5kbGVycyAoc2VlIGVmZmVjdC5tbClcbi8vIC0gayBpcyB0aGUgbG93IGxldmVsIGNvbnRpbnVhdGlvblxuLy8gLSB4IGlzIHRoZSBleGNlcHRpb24gc3RhY2tcbi8vIC0gZSBpcyB0aGUgZmliZXIgc3RhY2sgb2YgdGhlIHBhcmVudCBmaWJlci5cbnZhciBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9wdXNoX3RyYXBcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9zdGFja1xuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9wdXNoX3RyYXAoaGFuZGxlcikge1xuICBjYW1sX2N1cnJlbnRfc3RhY2sueCA9IHsgaDogaGFuZGxlciwgdDogY2FtbF9jdXJyZW50X3N0YWNrLnggfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3BfdHJhcFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X3N0YWNrXG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX3BvcF90cmFwKCkge1xuICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KVxuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgdGhyb3cgeDtcbiAgICB9O1xuICB2YXIgaCA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfdW5oYW5kbGVkXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3VuaGFuZGxlZChlZmYpIHtcbiAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICB0aHJvdyBleG47XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9yZXN1bWVfc3RhY2tcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2VfY29uc3RhbnRcbi8vUmVxdWlyZXM6IGNhbWxfcG9wX2ZpYmVyLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgaykge1xuICBpZiAoIXN0YWNrKVxuICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoXG4gICAgICBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LkNvbnRpbnVhdGlvbl9hbHJlYWR5X3Jlc3VtZWRcIiksXG4gICAgKTtcbiAgaWYgKGxhc3QgPT09IDApIHtcbiAgICBsYXN0ID0gc3RhY2s7XG4gICAgLy8gUHJlIE9DYW1sIDUuMiwgbGFzdCB3YXMgbm90IHBvcHVsYXRlZC5cbiAgICB3aGlsZSAobGFzdC5lICE9PSAwKSBsYXN0ID0gbGFzdC5lO1xuICB9XG4gIGNhbWxfY3VycmVudF9zdGFjay5rID0gaztcbiAgbGFzdC5lID0gY2FtbF9jdXJyZW50X3N0YWNrO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBzdGFjaztcbiAgcmV0dXJuIHN0YWNrLms7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9wX2ZpYmVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3BvcF9maWJlcigpIHtcbiAgLy8gTW92ZSB0byB0aGUgcGFyZW50IGZpYmVyLCByZXR1cm5pbmcgdGhlIHBhcmVudCdzIGxvdy1sZXZlbCBjb250aW51YXRpb25cbiAgdmFyIGMgPSBjYW1sX2N1cnJlbnRfc3RhY2suZTtcbiAgY2FtbF9jdXJyZW50X3N0YWNrLmUgPSAwO1xuICBjYW1sX2N1cnJlbnRfc3RhY2sgPSBjO1xuICByZXR1cm4gYy5rO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG5cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfZnJlc2hfb29faWRcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKSB7XG4gIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgaWYgKGV4bikgZXhuID0gWzAsIGV4biwgZWZmXTtcbiAgZWxzZSB7XG4gICAgZXhuID0gW1xuICAgICAgMjQ4LFxuICAgICAgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksXG4gICAgICBjYW1sX2ZyZXNoX29vX2lkKDApLFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9wZXJmb3JtX2VmZmVjdChlZmYsIGswKSB7XG4gIGlmIChjYW1sX2N1cnJlbnRfc3RhY2suZSA9PT0gMCkge1xuICAgIHZhciBleG4gPSBjYW1sX21ha2VfdW5oYW5kbGVkX2VmZmVjdF9leG4oZWZmKTtcbiAgICB0aHJvdyBleG47XG4gIH1cbiAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0IGhhbmRsZXJcbiAgdmFyIGhhbmRsZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFszXTtcbiAgdmFyIGxhc3RfZmliZXIgPSBjYW1sX2N1cnJlbnRfc3RhY2s7XG4gIGxhc3RfZmliZXIuayA9IGswO1xuICB2YXIgY29udCA9IFsyNDUgLypjb250aW51YXRpb24qLywgbGFzdF9maWJlciwgbGFzdF9maWJlcl07XG4gIC8vIE1vdmUgdG8gcGFyZW50IGZpYmVyIGFuZCBleGVjdXRlIHRoZSBlZmZlY3QgaGFuZGxlciB0aGVyZVxuICAvLyBUaGUgaGFuZGxlciBpcyBkZWZpbmVkIGluIFN0ZGxpYi5FZmZlY3QsIHNvIHdlIGtub3cgdGhhdCB0aGUgYXJpdHkgbWF0Y2hlc1xuICB2YXIgazEgPSBjYW1sX3BvcF9maWJlcigpO1xuICByZXR1cm4gY2FtbF9zdGFja19jaGVja19kZXB0aCgpXG4gICAgPyBjYW1sX2dldF9jcHNfZnVuKGhhbmRsZXIpKGVmZiwgY29udCwgbGFzdF9maWJlciwgazEpXG4gICAgOiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGhhbmRsZXIsIFtlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVwZXJmb3JtX2VmZmVjdFxuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4biwgY2FtbF9jdXJyZW50X3N0YWNrXG4vL1JlcXVpcmVzOiBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjXG4vL1JlcXVpcmVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXBlcmZvcm1fZWZmZWN0KGVmZiwgY29udCwgbGFzdCwgazApIHtcbiAgaWYgKGNhbWxfY3VycmVudF9zdGFjay5lID09PSAwKSB7XG4gICAgdmFyIGV4biA9IGNhbWxfbWFrZV91bmhhbmRsZWRfZWZmZWN0X2V4bihlZmYpO1xuICAgIHZhciBzdGFjayA9IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KTtcbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhzdGFjaywgbGFzdCwgazApO1xuICAgIHRocm93IGV4bjtcbiAgfVxuICAvLyBHZXQgY3VycmVudCBlZmZlY3QgaGFuZGxlclxuICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay5oWzNdO1xuICB2YXIgbGFzdF9maWJlciA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgbGFzdF9maWJlci5rID0gazA7XG4gIGxhc3QuZSA9IGxhc3RfZmliZXI7XG4gIGNvbnRbMl0gPSBsYXN0X2ZpYmVyO1xuICAvLyBNb3ZlIHRvIHBhcmVudCBmaWJlciBhbmQgZXhlY3V0ZSB0aGUgZWZmZWN0IGhhbmRsZXIgdGhlcmVcbiAgLy8gVGhlIGhhbmRsZXIgaXMgZGVmaW5lZCBpbiBTdGRsaWIuRWZmZWN0LCBzbyB3ZSBrbm93IHRoYXQgdGhlIGFyaXR5IG1hdGNoZXNcbiAgdmFyIGsxID0gY2FtbF9wb3BfZmliZXIoKTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9nZXRfY3BzX2Z1bihoYW5kbGVyKShlZmYsIGNvbnQsIGxhc3RfZmliZXIsIGsxKVxuICAgIDogY2FtbF90cmFtcG9saW5lX3JldHVybihoYW5kbGVyLCBbZWZmLCBjb250LCBsYXN0X2ZpYmVyLCBrMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jcHNfZnVuXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiAhZG91YmxldHJhbnNsYXRlXG5mdW5jdGlvbiBjYW1sX2dldF9jcHNfZnVuKGYpIHtcbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2Nwc19mdW5cbi8vSWY6IGVmZmVjdHNcbi8vSWY6IGRvdWJsZXRyYW5zbGF0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfY3BzX2Z1bihmKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGdldCB0aGUgZWZmZWN0IGhhbmRsZXIuIElmIHRoZVxuICAvLyBlZmZlY3QgaGFuZGxlciBoYXMgbm8gQ1BTIGZ1bmN0aW9uLCB3ZSBrbm93IHRoYXQgd2UgY2FuIGRpcmVjdGx5XG4gIC8vIGNhbGwgdGhlIGRpcmVjdCB2ZXJzaW9uIGluc3RlYWQuXG4gIHJldHVybiBmLmNwcyA/IGYuY3BzIDogZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9SZXF1aXJlczogY2FtbF9wb3BfZmliZXIsIGNhbWxfY2FsbF9nZW4sIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgsIGNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5fY3BzLCBjYW1sX2N1cnJlbnRfc3RhY2tcbi8vSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2NhbGwoZiwgeCkge1xuICB2YXIgYXJncyA9IFt4LCBjYW1sX3BvcF9maWJlcigpXTtcbiAgcmV0dXJuIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKVxuICAgID8gY2FtbF9jYWxsX2dlbl9jcHMoZiwgYXJncylcbiAgICA6IGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZiwgYXJncywgMCk7XG59XG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrX2h2YWwoeCkge1xuICAvLyBDYWxsIFtodl0gaW4gdGhlIHBhcmVudCBmaWJlclxuICB2YXIgZiA9IGNhbWxfY3VycmVudF9zdGFjay5oWzFdO1xuICByZXR1cm4gY2FtbF9hbGxvY19zdGFja19jYWxsKGYsIHgpO1xufVxuZnVuY3Rpb24gY2FtbF9hbGxvY19zdGFja19oZXhuKGUpIHtcbiAgLy8gQ2FsbCBbaHhdIGluIHRoZSBwYXJlbnQgZmliZXJcbiAgdmFyIGYgPSBjYW1sX2N1cnJlbnRfc3RhY2suaFsyXTtcbiAgcmV0dXJuIGNhbWxfYWxsb2Nfc3RhY2tfY2FsbChmLCBlKTtcbn1cbmZ1bmN0aW9uIGNhbWxfYWxsb2Nfc3RhY2soaHYsIGh4LCBoZikge1xuICB2YXIgaGFuZGxlcnMgPSBbMCwgaHYsIGh4LCBoZl07XG4gIHJldHVybiB7XG4gICAgazogY2FtbF9hbGxvY19zdGFja19odmFsLFxuICAgIHg6IHsgaDogY2FtbF9hbGxvY19zdGFja19oZXhuLCB0OiAwIH0sXG4gICAgaDogaGFuZGxlcnMsXG4gICAgZTogMCxcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19zdGFja1xuLy9JZjogIWVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2FsbG9jX3N0YWNrKF9odiwgX2h4LCBfaGYpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Yyhjb250KSB7XG4gIHZhciBzdGFjayA9IGNvbnRbMV07XG4gIGNvbnRbMV0gPSAwO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGNcbi8vUmVxdWlyZXM6IGNhbWxfY29udGludWF0aW9uX3VzZV9ub2V4Y1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfY29udGludWF0aW9uX3VzZV9hbmRfdXBkYXRlX2hhbmRsZXJfbm9leGMoXG4gIGNvbnQsXG4gIGh2YWwsXG4gIGhleG4sXG4gIGhlZmYsXG4pIHtcbiAgdmFyIHN0YWNrID0gY2FtbF9jb250aW51YXRpb25fdXNlX25vZXhjKGNvbnQpO1xuICBpZiAoc3RhY2sgPT09IDApIHJldHVybiBzdGFjaztcbiAgdmFyIGxhc3QgPSBjb250WzJdO1xuICBsYXN0LmhbMV0gPSBodmFsO1xuICBsYXN0LmhbMl0gPSBoZXhuO1xuICBsYXN0LmhbM10gPSBoZWZmO1xuICByZXR1cm4gc3RhY2s7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2NvbnRpbnVhdGlvbl9jYWxsc3RhY2tcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9jb250aW51YXRpb25fY2FsbHN0YWNrKCkge1xuICByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9uZXdcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9uZXcoX3VuaXQpIHtcbiAgcmV0dXJuIHsgY29uZGl0aW9uOiAxIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3dhaXRcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl93YWl0KF90LCBfbXV0ZXh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3Rcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX21sX2NvbmRpdGlvbl9icm9hZGNhc3QoX3QpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbFxuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfbWxfY29uZGl0aW9uX3NpZ25hbChfdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19lZmZlY3Rfbm90X3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy8hSWY6IGVmZmVjdHNcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBqc29vX2VmZmVjdF9ub3Rfc3VwcG9ydGVkKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiRWZmZWN0IGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3VtZVxuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuX2NwcywgY2FtbF9jdXJyZW50X3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFja1xuLy9JZjogZWZmZWN0c1xuLy9JZjogZG91YmxldHJhbnNsYXRlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9yZXN1bWUoZiwgYXJnLCBzdGFjaywgbGFzdCkge1xuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfY3VycmVudF9zdGFjayA9IGNhbWxfY3VycmVudF9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2N1cnJlbnRfc3RhY2sgPSB7IGs6IDAsIHg6IDAsIGg6IDAsIGU6IDAgfTtcbiAgICB2YXIgayA9IGNhbWxfcmVzdW1lX3N0YWNrKHN0YWNrLCBsYXN0LCBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLyogTm90ZTogZiBpcyBub3QgYW4gb3JkaW5hcnkgZnVuY3Rpb24gYnV0IGEgKGRpcmVjdC1zdHlsZSwgQ1BTKSBjbG9zdXJlIHBhaXIgKi9cbiAgICB2YXIgcmVzID0geyBqb29fdHJhbXA6IGYsIGpvb19hcmdzOiBbYXJnLCBrXSwgam9vX2RpcmVjdDogMCB9O1xuICAgIGRvIHtcbiAgICAgIC8qIEF2b2lkcyB0cmFtcG9saW5pbmcgdG9vIG9mdGVuIHdoaWxlIHN0aWxsIGF2b2lkaW5nIHN0YWNrIG92ZXJmbG93LiBTZWVcbiAgICAgICAgIFtjYW1sX2NhbGxiYWNrXS4gKi9cbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb29fZGlyZWN0XG4gICAgICAgICAgPyByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncylcbiAgICAgICAgICA6IGNhbWxfY2FsbF9nZW5fY3BzKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfY3VycmVudF9zdGFjay54KSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfY3VycmVudF9zdGFjay54Lmg7XG4gICAgICAgIGNhbWxfY3VycmVudF9zdGFjay54ID0gY2FtbF9jdXJyZW50X3N0YWNrLngudDtcbiAgICAgICAgcmVzID0ge1xuICAgICAgICAgIGpvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldLFxuICAgICAgICAgIGpvb19kaXJlY3Q6IDEsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVzPy5qb29fYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9jdXJyZW50X3N0YWNrID0gc2F2ZWRfY3VycmVudF9zdGFjaztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Nwc19jbG9zdXJlXG4vL0lmOiBlZmZlY3RzXG4vL0lmOiBkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfY3BzX2Nsb3N1cmUoZGlyZWN0X2YsIGNwc19mKSB7XG4gIGRpcmVjdF9mLmNwcyA9IGNwc19mO1xuICByZXR1cm4gZGlyZWN0X2Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXNzdW1lX25vX3BlcmZvcm1cbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vSWY6ICFkb3VibGV0cmFuc2xhdGVcbmZ1bmN0aW9uIGNhbWxfYXNzdW1lX25vX3BlcmZvcm0oZikge1xuICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICBhMlswXSA9IDA7XG4gIGZvciAodmFyIGkyID0gMSwgaTEgPSBpICsgMTsgaTIgPD0gbGVuOyBpMisrLCBpMSsrKSB7XG4gICAgYTJbaTJdID0gYVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfc3ViIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfc3ViXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X3N1YihhLCBpLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfc3ViKGEsIGksIGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9zdWIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9zdWJcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfc3ViKGEsIGksIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9zdWIoYSwgaSwgbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCxcbiAgICBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMSArIGwyIC0gMTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsXG4gICAgaiA9IDE7XG4gIGZvciAoOyBpIDwgbDE7IGkrKykgYVtpXSA9IGExW2ldO1xuICBmb3IgKDsgaSA8IGw7IGkrKywgaisrKSBhW2ldID0gYTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYXBwZW5kIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYXBwZW5kXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9hcHBlbmQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9hcHBlbmRcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICByZXR1cm4gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQgbXV0YWJsZVxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfdW5pZm9ybV9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ibGl0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICByZXR1cm4gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9BbGlhczogY2FtbF9hcnJheV9zZXRfZmxvYXRcbi8vQWxpYXM6IGNhbWxfZmxvYXRhcnJheV9zZXRcbi8vQWxpYXM6IGNhbWxfYXJyYXlfc2V0X2FkZHJcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0KGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCArIDFdID0gbmV3dmFsO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2FycmF5X2dldF9mbG9hdFxuLy9BbGlhczogY2FtbF9mbG9hdGFycmF5X2dldFxuLy9BbGlhczogY2FtbF9hcnJheV9nZXRfYWRkclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXggKyAxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnJheVtvZnMgKyBpICsgMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2ZpbGxfdW5ib3hlZChhcnJheSwgb2ZzLCBsZW4sIHYpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfZmlsbFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9maWxsXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF91bmlmb3JtX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL0FsaWFzOiBjYW1sX2NoZWNrX2JvdW5kX2dlblxuLy9BbGlhczogY2FtbF9jaGVja19ib3VuZF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X21ha2UgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDQpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAwO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfbWFrZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2FycmF5X21ha2UobGVuLCBpbml0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NyZWF0ZV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9hcnJheV9jcmVhdGVfZmxvYXQobGVuKSB7XG4gIGlmIChsZW4gPj4+IDAgPj0gKCgweDdmZmZmZmZmIC8gOCkgfCAwKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gKGxlbiArIDEpIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXSA9IDI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiO1xufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbikge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2UgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlKGxlbiwgaW5pdCkge1xuICBpZiAobGVuID4+PiAwID49ICgoMHg3ZmZmZmZmZiAvIDgpIHwgMCkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IChsZW4gKyAxKSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF0gPSAyNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X21ha2VfdW5ib3hlZCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0YXJyYXlfbWFrZVxuLy9WZXJzaW9uOiA+PSA1LjNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9tYWtlX3VuYm94ZWQobGVuLCBpbml0KSB7XG4gIHJldHVybiBjYW1sX2Zsb2F0YXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X21ha2Vcbi8vVmVyc2lvbjogPj0gNS4zXG5mdW5jdGlvbiBjYW1sX3VuaWZvcm1fYXJyYXlfbWFrZShsZW4sIGluaXQpIHtcbiAgcmV0dXJuIGNhbWxfYXJyYXlfbWFrZShsZW4sIGluaXQpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDVcbnZhciBjYW1sX2RvbWFpbl9kbHMgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfc2V0KGEpIHtcbiAgY2FtbF9kb21haW5fZGxzID0gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldFxuLy9SZXF1aXJlczogY2FtbF9kb21haW5fZGxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9kb21haW5fZGxzX2NvbXBhcmVfYW5kX3NldChvbGQsIG4pIHtcbiAgaWYgKGNhbWxfZG9tYWluX2RscyAhPT0gb2xkKSByZXR1cm4gMDtcbiAgY2FtbF9kb21haW5fZGxzID0gbjtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZG9tYWluX2Rsc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2Rsc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9kbHNfZ2V0KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9kbHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2xvYWRcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9hdG9taWNfbG9hZChyZWYpIHtcbiAgcmV0dXJuIHJlZlsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hdG9taWNfbG9hZF9maWVsZFxuLy9WZXJzaW9uOiA+PSA1LjRcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2xvYWRfZmllbGQoYiwgaSkge1xuICByZXR1cm4gYltpICsgMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2Nhc1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXMocmVmLCBvLCBuKSB7XG4gIGlmIChyZWZbMV0gPT09IG8pIHtcbiAgICByZWZbMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19jYXNfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19jYXNfZmllbGQoYiwgaSwgbywgbikge1xuICBpZiAoYltpICsgMV0gPT09IG8pIHtcbiAgICBiW2kgKyAxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2ZldGNoX2FkZFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGQocmVmLCBpKSB7XG4gIHZhciBvbGQgPSByZWZbMV07XG4gIHJlZlsxXSArPSBpO1xuICByZXR1cm4gb2xkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGRcbi8vVmVyc2lvbjogPj0gNS40XG5mdW5jdGlvbiBjYW1sX2F0b21pY19mZXRjaF9hZGRfZmllbGQoYiwgaSwgbikge1xuICB2YXIgb2xkID0gYltpICsgMV07XG4gIGJbaSArIDFdICs9IG47XG4gIHJldHVybiBvbGQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX2V4Y2hhbmdlKHJlZiwgdikge1xuICB2YXIgciA9IHJlZlsxXTtcbiAgcmVmWzFdID0gdjtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXRvbWljX2V4Y2hhbmdlX2ZpZWxkXG4vL1ZlcnNpb246ID49IDUuNFxuZnVuY3Rpb24gY2FtbF9hdG9taWNfZXhjaGFuZ2VfZmllbGQoYiwgaSwgdikge1xuICB2YXIgciA9IGJbaSArIDFdO1xuICBiW2kgKyAxXSA9IHY7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2F0b21pY19tYWtlX2NvbnRlbmRlZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfYXRvbWljX21ha2VfY29udGVuZGVkKGEpIHtcbiAgcmV0dXJuIFswLCBhXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuXG4vL1ZlcnNpb246ID49IDUuMCwgPCA1LjJcbnZhciBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fID0gWzBdO1xuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fdW5pcXVlX3Rva2VuKF91bml0KSB7XG4gIHJldHVybiBjYW1sX21sX2RvbWFpbl91bmlxdWVfdG9rZW5fO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudChfdW5pdCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faW5kZXhcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMDNcbmZ1bmN0aW9uIGNhbWxfbWxfZG9tYWluX2luZGV4KF91bml0KSB7XG4gIHJldHVybiBjYW1sX2RvbWFpbl9pZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5faWRcbi8vVmVyc2lvbjogPj0gNVxudmFyIGNhbWxfZG9tYWluX2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjJcbnZhciBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4ID0gMTtcbmZ1bmN0aW9uIGNhbWxfZG9tYWluX3NwYXduKGYsIHRlcm1fc3luYykge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgWzBdKTtcbiAgY2FtbF9kb21haW5faWQgPSBvbGQ7XG4gIGNhbWxfbWxfbXV0ZXhfdW5sb2NrKHRlcm1fc3luY1syXSk7XG4gIC8vVE9ETzogZml4IGV4biBjYXNlXG4gIHRlcm1fc3luY1sxXSA9IFswLCBbMCwgcmVzXV07XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kb21haW5fc3Bhd25cbi8vUmVxdWlyZXM6IGNhbWxfbWxfbXV0ZXhfdW5sb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2RvbWFpbl9pZFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG52YXIgY2FtbF9kb21haW5fbGF0ZXN0X2lkeCA9IDE7XG5mdW5jdGlvbiBjYW1sX2RvbWFpbl9zcGF3bihmLCBtdXRleCkge1xuICB2YXIgaWQgPSBjYW1sX2RvbWFpbl9sYXRlc3RfaWR4Kys7XG4gIHZhciBvbGQgPSBjYW1sX2RvbWFpbl9pZDtcbiAgY2FtbF9kb21haW5faWQgPSBpZDtcbiAgdmFyIF9yZXMgPSBjYW1sX2NhbGxiYWNrKGYsIFswXSk7XG4gIGNhbWxfZG9tYWluX2lkID0gb2xkO1xuICBjYW1sX21sX211dGV4X3VubG9jayhtdXRleCk7XG4gIHJldHVybiBpZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kb21haW5faWRcbi8vUmVxdWlyZXM6IGNhbWxfZG9tYWluX2lkXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5faWQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfZG9tYWluX2lkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9tbF9kb21haW5fY3B1X3JlbGF4KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX2ludDMyX2Zvcm1hdFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZm9ybWF0XG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT09IFwiJWRcIilcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiICsgaSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7XG4gICAgaWYgKGYuc2lnbmVkY29udikge1xuICAgICAgZi5zaWduID0gLTE7XG4gICAgICBpID0gLWk7XG4gICAgfSBlbHNlIGkgPj4+PSAwO1xuICB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9IFwiIFwiO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0KG4sIFwiMFwiKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Uocykge1xuICB2YXIgaSA9IDAsXG4gICAgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLFxuICAgIGJhc2UgPSAxMCxcbiAgICBzaWduID0gMSxcbiAgICBzaWduZWRuZXNzID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkpIHtcbiAgICAgIGNhc2UgNDU6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IC0xO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDM6XG4gICAgICAgIGkrKztcbiAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgICAgY2FzZSAxMjA6XG4gICAgICBjYXNlIDg4OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTE6XG4gICAgICBjYXNlIDc5OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgYmFzZSA9IDg7XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDk4OlxuICAgICAgY2FzZSA2NjpcbiAgICAgICAgc2lnbmVkbmVzcyA9IDA7XG4gICAgICAgIGJhc2UgPSAyO1xuICAgICAgICBpICs9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMTc6XG4gICAgICBjYXNlIDg1OlxuICAgICAgICBzaWduZWRuZXNzID0gMDtcbiAgICAgICAgaSArPSAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZSwgc2lnbmVkbmVzc107XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IGNhbWxfaW50MzJfb2Zfc3RyaW5nXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlKHMpO1xuICB2YXIgaSA9IHJbMF0sXG4gICAgc2lnbiA9IHJbMV0sXG4gICAgYmFzZSA9IHJbMl0sXG4gICAgc2lnbmVkbmVzcyA9IHJbM107XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSBpIDwgbGVuID8gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA6IDA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKzsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmIChzaWduZWRuZXNzICYmIChyZXMgfCAwKSAhPT0gcmVzKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfbXVsXG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9tdWxcbi8vQWxpYXM6ICVpbnRfbXVsXG5mdW5jdGlvbiBjYW1sX211bChhLCBiKSB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX2RpdlxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfZGl2XG4vL0FsaWFzOiAlaW50X2RpdlxuZnVuY3Rpb24gY2FtbF9kaXYoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4gKHggLyB5KSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL0FsaWFzOiBjYW1sX2ludDMyX21vZFxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfbW9kXG4vL0FsaWFzOiAlaW50X21vZFxuZnVuY3Rpb24gY2FtbF9tb2QoeCwgeSkge1xuICBpZiAoeSA9PT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSgpO1xuICByZXR1cm4geCAlIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNiBjb25zdFxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoeCAmIDB4MDBmZikgPDwgOCkgfCAoKHggJiAweGZmMDApID4+IDgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwIGNvbnN0XG4vL0FsaWFzOiBjYW1sX25hdGl2ZWludF9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoXG4gICAgKCh4ICYgMHgwMDAwMDBmZikgPDwgMjQpIHxcbiAgICAoKHggJiAweDAwMDBmZjAwKSA8PCA4KSB8XG4gICAgKCh4ICYgMHgwMGZmMDAwMCkgPj4+IDgpIHxcbiAgICAoKHggJiAweGZmMDAwMDAwKSA+Pj4gMjQpXG4gICk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsIGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTEgfCAwKTtcbiAgZCA9IChkIDw8IDE1KSB8IChkID4+PiAoMzIgLSAxNSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9IChoIDw8IDEzKSB8IChoID4+PiAoMzIgLSAxMykpOyAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpIHwgMCkgKyAoMHhlNjU0NmI2NCB8IDApKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsKGgsIDB4ODVlYmNhNmIgfCAwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsKGgsIDB4YzJiMmFlMzUgfCAwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0KGhhc2gsIHYwKSB7XG4gIHZhciBpNjQgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodjApO1xuICB2YXIgbCA9IGNhbWxfaW50NjRfbG8zMihpNjQpO1xuICB2YXIgaCA9IGNhbWxfaW50NjRfaGkzMihpNjQpO1xuICAvKiBOb3JtYWxpemUgTmFOcyAqL1xuICBpZiAoKGggJiAweDdmZjAwMDAwKSA9PT0gMHg3ZmYwMDAwMCAmJiAobCB8IChoICYgMHhmZmZmZikpICE9PSAwKSB7XG4gICAgaCA9IDB4N2ZmMDAwMDA7XG4gICAgbCA9IDB4MDAwMDAwMDE7XG4gIH0gZWxzZSBpZiAoaCA9PT0gKDB4ODAwMDAwMDAgfCAwKSAmJiBsID09PSAwKSB7XG4gICAgLyogTm9ybWFsaXplIC0wIGludG8gKzAgKi9cbiAgICAvLyBUaGlzIGNvZGUgcGF0aCBpcyBub3QgdXNlZCBieSBjYW1sX2hhc2ggYmVjYXVzZSAwIGFuZCAtMCBsb29rXG4gICAgLy8gbGlrZSBpbnRlZ2Vyc1xuICAgIGggPSAwO1xuICB9XG4gIGhhc2ggPSBjYW1sX2hhc2hfbWl4X2ludChoYXNoLCBsKTtcbiAgaGFzaCA9IGNhbWxfaGFzaF9taXhfaW50KGhhc2gsIGgpO1xuICByZXR1cm4gaGFzaDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCxcbiAgICBpLFxuICAgIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9XG4gICAgICBzLmNoYXJDb2RlQXQoaSkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMSkgPDwgOCkgfFxuICAgICAgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSArIDMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICAgIGNhc2UgMzpcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaSArIDIpIDw8IDE2O1xuICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgY2FzZSAyOlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgdyB8PSBzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsXG4gICAgaSxcbiAgICB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldIHwgKHNbaSArIDFdIDw8IDgpIHwgKHNbaSArIDJdIDw8IDE2KSB8IChzW2kgKyAzXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgICBjYXNlIDM6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3ID0gc1tpICsgMl0gPDwgMTY7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDI6XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICB3IHw9IHNbaSArIDFdIDw8IDg7XG4gICAgLy8gZmFsbHRocm91Z2hcbiAgICBjYXNlIDE6XG4gICAgICB3IHw9IHNbaV07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpO1xuICAvKiBBUlJBWSAqLyBlbHNlIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07XG4gIHJkID0gMDtcbiAgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2Py5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYgKFxuICAgICAgICBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiZcbiAgICAgICAgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2hcbiAgICAgICkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGhoKTtcbiAgICAgICAgbnVtLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHZbMF0gPT09ICh2WzBdIHwgMCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgICBjYXNlIDI0ODpcbiAgICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgICAgbnVtLS07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUwOlxuICAgICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdik7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHYpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodiB8IDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdiArIHYgKyAxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCB2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNmZmZmZmZmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1LjBcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdikge1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzZmZmZmZmZjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSkge1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpXG4gICAgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpXG4gICAgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSlcbiAgICByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBhWzBdID09PSBhWzBdID4+PiAwICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuIHRhZyA9PT0gMjU0ID8gMCA6IHRhZztcbiAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKVxuICAgIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcilcbiAgICByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYT8uY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhPy5jb21wYXJlKVxuICAgIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpIHtcbiAgcmV0dXJuIChcbiAgICBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmVcbiAgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYgKGNvbXApIHtcbiAgICB2YXIgeCA9IHN3YXAgPiAwID8gY29tcChjdXN0b20sIG51bSwgdG90YWwpIDogY29tcChudW0sIGN1c3RvbSwgdG90YWwpO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNOYU4oeCkpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKCt4KSkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZiAoKHggfCAwKSAhPT0gMCkgcmV0dXJuIHggfCAwOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvciAoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZiAodGFnX2EgPT09IDI1MCkge1xuICAgICAgICBhID0gYVsxXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYgKHRhZ19iID09PSAyNTApIHtcbiAgICAgICAgYiA9IGJbMV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmICh0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYgKHRhZ19hID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19iID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZ19iID09PSAxMDAwKSB7XG4gICAgICAgICAgaWYgKHRhZ19hID09PSAxMjU1KSB7XG4gICAgICAgICAgICAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWdfYSA8IHRhZ19iID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgLy8gdGFnX2EgPSB0YWdfYlxuICAgICAgc3dpdGNoICh0YWdfYSkge1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pIHwgMDtcbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYikgfCAwO1xuICAgICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGluIGNhbWxfY29tcGFyZV92YWxfdGFnXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFxuICAgICAgICAgICAgXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgICBpZiAoY29tcCAhPT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5jYW1sX2N1c3RvbSA8IGIuY2FtbF9jdXN0b20gPyAtMSA6IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY29tcCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgICAgdmFyIHggPSBjb21wKGEsIGIsIHRvdGFsKTtcbiAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHgpKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICAgIHJldHVybiB0b3RhbCA/IC0xIDogeDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09ICh4IHwgMCkpIHtcbiAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoeCAhPT0gMCkgcmV0dXJuIHggfCAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLCB0b3RhbCk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSkge1xuICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAtMSA6IHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh4ICE9PSAoeCB8IDApKSB7XG4gICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHggIT09IDApIHJldHVybiB4IHwgMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgICBhID0gK2E7XG4gICAgICAgICAgYiA9ICtiO1xuICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYSkpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oYikpIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICByZXR1cm4gdG90YWwgPyAxIDogTnVtYmVyLk5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBMYXp5X3RhZyBvciBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoIDwgYi5sZW5ndGggPyAtMSA6IDE7XG4gICAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwoYSwgYiwgdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgY29uc3Rcbi8vQWxpYXM6IGNhbWxfaW50MzJfY29tcGFyZVxuLy9BbGlhczogY2FtbF9uYXRpdmVpbnRfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZShhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIHJldHVybiAxO1xufVxuXG4vLyBNYXkgcmFpc2Vcbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA9PT0gMCk7XG59XG5cbi8vIE1heSByYWlzZVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCh4LCB5KSB7XG4gIHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCwgeSwgZmFsc2UpICE9PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA+PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPiAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwoeCwgeSkge1xuICByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgsIHksIGZhbHNlKSA8PSAwKTtcbn1cblxuLy8gTWF5IHJhaXNlXG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuKHgsIHkpIHtcbiAgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LCB5LCBmYWxzZSkgPCAwKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4XG4vL1ZlcnNpb246ID49IDUuMVxudmFyIGNhbWxfY3VzdG9tX2V2ZW50X2luZGV4ID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3JlZ2lzdGVyXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9ldmVudF9pbmRleFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZWdpc3RlcihldmVudF9uYW1lLCBldmVudF90YWcsIGV2ZW50X3R5cGUpIHtcbiAgY2FtbF9jdXN0b21fZXZlbnRfaW5kZXggKz0gMTtcbiAgcmV0dXJuIFswLCBjYW1sX2N1c3RvbV9ldmVudF9pbmRleCwgZXZlbnRfbmFtZSwgZXZlbnRfdHlwZSwgZXZlbnRfdGFnXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3dyaXRlKF9ldmVudCwgX2V2ZW50X2NvbnRlbnQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfdXNlcl9yZXNvbHZlXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c191c2VyX3Jlc29sdmUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3N0YXJ0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfc3RhcnRcbi8vVmVyc2lvbjogPj0gNS4wLCA8IDUuMlxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19zdGFydCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcGF1c2Vcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19wYXVzZVxuLy9WZXJzaW9uOiA+PSA1LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3BhdXNlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19hcmVfYWN0aXZlKCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX2V2ZW50c19yZXN1bWVcbi8vVmVyc2lvbjogPj01LjAsIDwgNS4yXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX3Jlc3VtZSgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV9ldmVudHNfcmVzdW1lXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19yZXN1bWUoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2NyZWF0ZV9jdXJzb3IoX3RhcmdldCkge1xuICByZXR1cm4ge307XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfZnJlZV9jdXJzb3Jcbi8vVmVyc2lvbjogPj0gNS4wXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfZXZlbnRzX2ZyZWVfY3Vyc29yKF9jdXJzb3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9ldmVudHNfcmVhZF9wb2xsXG4vL1ZlcnNpb246ID49IDUuMFxuZnVuY3Rpb24gY2FtbF9ydW50aW1lX2V2ZW50c19yZWFkX3BvbGwoX2N1cnNvciwgX2NhbGxiYWNrcywgX251bSkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoIGNvbnN0XG4vL1ZlcnNpb246ID49IDUuM1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX2V2ZW50c19wYXRoKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuIiwiLy9Qcm92aWRlczogenN0ZF9kZWNvbXByZXNzXG4vL1ZlcnNpb246ID49IDUuMVxudmFyIHpzdGRfZGVjb21wcmVzcyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGFsaWFzZXMgZm9yIHNob3J0ZXIgY29tcHJlc3NlZCBjb2RlIChtb3N0IG1pbmlmZXJzIGRvbid0IGRvIHRoaXMpXG4gIHZhciBhYiA9IEFycmF5QnVmZmVyLFxuICAgIHU4ID0gVWludDhBcnJheSxcbiAgICB1MTYgPSBVaW50MTZBcnJheSxcbiAgICBpMTYgPSBJbnQxNkFycmF5LFxuICAgIGkzMiA9IEludDMyQXJyYXk7XG4gIHZhciBzbGMgPSBmdW5jdGlvbiAodiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuc2xpY2UpIHJldHVybiB1OC5wcm90b3R5cGUuc2xpY2UuY2FsbCh2LCBzLCBlKTtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKSBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aCkgZSA9IHYubGVuZ3RoO1xuICAgIHZhciBuID0gbmV3IHU4KGUgLSBzKTtcbiAgICBuLnNldCh2LnN1YmFycmF5KHMsIGUpKTtcbiAgICByZXR1cm4gbjtcbiAgfTtcbiAgdmFyIGZpbGwgPSBmdW5jdGlvbiAodiwgbiwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuZmlsbCkgcmV0dXJuIHU4LnByb3RvdHlwZS5maWxsLmNhbGwodiwgbiwgcywgZSk7XG4gICAgaWYgKHMgPT0gbnVsbCB8fCBzIDwgMCkgcyA9IDA7XG4gICAgaWYgKGUgPT0gbnVsbCB8fCBlID4gdi5sZW5ndGgpIGUgPSB2Lmxlbmd0aDtcbiAgICBmb3IgKDsgcyA8IGU7ICsrcykgdltzXSA9IG47XG4gICAgcmV0dXJuIHY7XG4gIH07XG4gIHZhciBjcHcgPSBmdW5jdGlvbiAodiwgdCwgcywgZSkge1xuICAgIGlmICh1OC5wcm90b3R5cGUuY29weVdpdGhpbilcbiAgICAgIHJldHVybiB1OC5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKHYsIHQsIHMsIGUpO1xuICAgIGlmIChzID09IG51bGwgfHwgcyA8IDApIHMgPSAwO1xuICAgIGlmIChlID09IG51bGwgfHwgZSA+IHYubGVuZ3RoKSBlID0gdi5sZW5ndGg7XG4gICAgd2hpbGUgKHMgPCBlKSB7XG4gICAgICB2W3QrK10gPSB2W3MrK107XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29kZXMgZm9yIGVycm9ycyBnZW5lcmF0ZWQgd2l0aGluIHRoaXMgbGlicmFyeVxuICAgKi9cbiAgLy8gZXJyb3IgY29kZXNcbiAgdmFyIGVjID0gW1xuICAgIFwiaW52YWxpZCB6c3RkIGRhdGFcIixcbiAgICBcIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQilcIixcbiAgICBcImludmFsaWQgYmxvY2sgdHlwZVwiLFxuICAgIFwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoXCIsXG4gICAgXCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixcbiAgICBcInVuZXhwZWN0ZWQgRU9GXCIsXG4gIF07XG4gIHZhciBlcnIgPSBmdW5jdGlvbiAoaW5kLCBtc2csIG50KSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnIHx8IGVjW2luZF0pO1xuICAgIGUuY29kZSA9IGluZDtcbiAgICBpZiAoIW50KSB0aHJvdyBlO1xuICAgIHJldHVybiBlO1xuICB9O1xuICB2YXIgcmIgPSBmdW5jdGlvbiAoZCwgYiwgbikge1xuICAgIHZhciBpID0gMCxcbiAgICAgIG8gPSAwO1xuICAgIGZvciAoOyBpIDwgbjsgKytpKSBvIHw9IGRbYisrXSA8PCAoaSA8PCAzKTtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgdmFyIGI0ID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICByZXR1cm4gKGRbYl0gfCAoZFtiICsgMV0gPDwgOCkgfCAoZFtiICsgMl0gPDwgMTYpIHwgKGRbYiArIDNdIDw8IDI0KSkgPj4+IDA7XG4gIH07XG4gIC8vIHJlYWQgWnN0YW5kYXJkIGZyYW1lIGhlYWRlclxuICB2YXIgcnpmaCA9IGZ1bmN0aW9uIChkYXQsIHcpIHtcbiAgICB2YXIgbjMgPSBkYXRbMF0gfCAoZGF0WzFdIDw8IDgpIHwgKGRhdFsyXSA8PCAxNik7XG4gICAgaWYgKG4zID09PSAweDJmYjUyOCAmJiBkYXRbM10gPT09IDI1Mykge1xuICAgICAgLy8gWnN0YW5kYXJkXG4gICAgICB2YXIgZmxnID0gZGF0WzRdO1xuICAgICAgLy8gICAgc2luZ2xlIHNlZ21lbnQgICAgICAgY2hlY2tzdW0gICAgICAgICAgICAgZGljdCBmbGFnICAgICBmcmFtZSBjb250ZW50IGZsYWdcbiAgICAgIHZhciBzcyA9IChmbGcgPj4gNSkgJiAxLFxuICAgICAgICBjYyA9IChmbGcgPj4gMikgJiAxLFxuICAgICAgICBkZiA9IGZsZyAmIDMsXG4gICAgICAgIGZjZiA9IGZsZyA+PiA2O1xuICAgICAgaWYgKGZsZyAmIDgpIGVycigwKTtcbiAgICAgIC8vIGJ5dGVcbiAgICAgIHZhciBidCA9IDYgLSBzcztcbiAgICAgIC8vIGRpY3QgYnl0ZXNcbiAgICAgIHZhciBkYiA9IGRmID09PSAzID8gNCA6IGRmO1xuICAgICAgLy8gZGljdGlvbmFyeSBpZFxuICAgICAgdmFyIGRpID0gcmIoZGF0LCBidCwgZGIpO1xuICAgICAgYnQgKz0gZGI7XG4gICAgICAvLyBmcmFtZSBzaXplIGJ5dGVzXG4gICAgICB2YXIgZnNiID0gZmNmID8gMSA8PCBmY2YgOiBzcztcbiAgICAgIC8vIGZyYW1lIHNvdXJjZSBzaXplXG4gICAgICB2YXIgZnNzID0gcmIoZGF0LCBidCwgZnNiKSArIChmY2YgPT09IDEgJiYgMjU2KTtcbiAgICAgIC8vIHdpbmRvdyBzaXplXG4gICAgICB2YXIgd3MgPSBmc3M7XG4gICAgICBpZiAoIXNzKSB7XG4gICAgICAgIC8vIHdpbmRvdyBkZXNjcmlwdG9yXG4gICAgICAgIHZhciB3YiA9IDEgPDwgKDEwICsgKGRhdFs1XSA+PiAzKSk7XG4gICAgICAgIHdzID0gd2IgKyAod2IgPj4gMykgKiAoZGF0WzVdICYgNyk7XG4gICAgICB9XG4gICAgICBpZiAod3MgPiAyMTQ1Mzg2NDk2KSBlcnIoMSk7XG4gICAgICB2YXIgYnVmID0gbmV3IHU4KCh3ID09PSAxID8gZnNzIHx8IHdzIDogdyA/IDAgOiB3cykgKyAxMik7XG4gICAgICAoYnVmWzBdID0gMSksIChidWZbNF0gPSA0KSwgKGJ1Zls4XSA9IDgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYjogYnQgKyBmc2IsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIGw6IDAsXG4gICAgICAgIGQ6IGRpLFxuICAgICAgICB3OiB3ICYmIHcgIT09IDEgPyB3IDogYnVmLnN1YmFycmF5KDEyKSxcbiAgICAgICAgZTogd3MsXG4gICAgICAgIG86IG5ldyBpMzIoYnVmLmJ1ZmZlciwgMCwgMyksXG4gICAgICAgIHU6IGZzcyxcbiAgICAgICAgYzogY2MsXG4gICAgICAgIG06IE1hdGgubWluKDEzMTA3Miwgd3MpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCgobjMgPj4gNCkgfCAoZGF0WzNdIDw8IDIwKSkgPT09IDB4MTg0ZDJhNSkge1xuICAgICAgLy8gc2tpcHBhYmxlXG4gICAgICByZXR1cm4gYjQoZGF0LCA0KSArIDg7XG4gICAgfVxuICAgIGVycigwKTtcbiAgfTtcbiAgLy8gbW9zdCBzaWduaWZpY2FudCBiaXQgZm9yIG5vbnplcm9cbiAgdmFyIG1zYiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgYml0cyA9IDA7XG4gICAgZm9yICg7IDEgPDwgYml0cyA8PSB2YWw7ICsrYml0cyk7XG4gICAgcmV0dXJuIGJpdHMgLSAxO1xuICB9O1xuICAvLyByZWFkIGZpbml0ZSBzdGF0ZSBlbnRyb3B5XG4gIHZhciByZnNlID0gZnVuY3Rpb24gKGRhdCwgYnQsIG1hbCkge1xuICAgIC8vIHRhYmxlIHBvc1xuICAgIHZhciB0cG9zID0gKGJ0IDw8IDMpICsgNDtcbiAgICAvLyBhY2N1cmFjeSBsb2dcbiAgICB2YXIgYWwgPSAoZGF0W2J0XSAmIDE1KSArIDU7XG4gICAgaWYgKGFsID4gbWFsKSBlcnIoMyk7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzeiA9IDEgPDwgYWw7XG4gICAgLy8gcHJvYmFiaWxpdGllcyBzeW1ib2xzICByZXBlYXQgICBpbmRleCAgIGhpZ2ggdGhyZXNob2xkXG4gICAgdmFyIHByb2JzID0gc3osXG4gICAgICBzeW0gPSAtMSxcbiAgICAgIHJlID0gLTEsXG4gICAgICBpID0gLTEsXG4gICAgICBodCA9IHN6O1xuICAgIC8vIG9wdGltaXphdGlvbjogc2luZ2xlIGFsbG9jYXRpb24gaXMgbXVjaCBmYXN0ZXJcbiAgICB2YXIgYnVmID0gbmV3IGFiKDUxMiArIChzeiA8PCAyKSk7XG4gICAgdmFyIGZyZXEgPSBuZXcgaTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICAvLyBzYW1lIHZpZXcgYXMgZnJlcVxuICAgIHZhciBkc3RhdGUgPSBuZXcgdTE2KGJ1ZiwgMCwgMjU2KTtcbiAgICB2YXIgbnN0YXRlID0gbmV3IHUxNihidWYsIDUxMiwgc3opO1xuICAgIHZhciBiYjEgPSA1MTIgKyAoc3ogPDwgMSk7XG4gICAgdmFyIHN5bXMgPSBuZXcgdTgoYnVmLCBiYjEsIHN6KTtcbiAgICB2YXIgbmJpdHMgPSBuZXcgdTgoYnVmLCBiYjEgKyBzeik7XG4gICAgd2hpbGUgKHN5bSA8IDI1NSAmJiBwcm9icyA+IDApIHtcbiAgICAgIHZhciBiaXRzID0gbXNiKHByb2JzICsgMSk7XG4gICAgICB2YXIgY2J0ID0gdHBvcyA+PiAzO1xuICAgICAgLy8gbWFza1xuICAgICAgdmFyIG1zayA9ICgxIDw8IChiaXRzICsgMSkpIC0gMTtcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICh0cG9zICYgNykpICZcbiAgICAgICAgbXNrO1xuICAgICAgLy8gbWFzayAoMSBmZXdlciBiaXQpXG4gICAgICB2YXIgbXNrMWZiID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgLy8gbWF4IHNtYWxsIHZhbHVlXG4gICAgICB2YXIgbXN2ID0gbXNrIC0gcHJvYnMgLSAxO1xuICAgICAgLy8gc21hbGwgdmFsdWVcbiAgICAgIHZhciBzdmFsID0gdmFsICYgbXNrMWZiO1xuICAgICAgaWYgKHN2YWwgPCBtc3YpICh0cG9zICs9IGJpdHMpLCAodmFsID0gc3ZhbCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHBvcyArPSBiaXRzICsgMTtcbiAgICAgICAgaWYgKHZhbCA+IG1zazFmYikgdmFsIC09IG1zdjtcbiAgICAgIH1cbiAgICAgIGZyZXFbKytzeW1dID0gLS12YWw7XG4gICAgICBpZiAodmFsID09PSAtMSkge1xuICAgICAgICBwcm9icyArPSB2YWw7XG4gICAgICAgIHN5bXNbLS1odF0gPSBzeW07XG4gICAgICB9IGVsc2UgcHJvYnMgLT0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIHJlcGVhdCBieXRlXG4gICAgICAgICAgdmFyIHJidCA9IHRwb3MgPj4gMztcbiAgICAgICAgICByZSA9ICgoZGF0W3JidF0gfCAoZGF0W3JidCArIDFdIDw8IDgpKSA+PiAodHBvcyAmIDcpKSAmIDM7XG4gICAgICAgICAgdHBvcyArPSAyO1xuICAgICAgICAgIHN5bSArPSByZTtcbiAgICAgICAgfSB3aGlsZSAocmUgPT09IDMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3ltID4gMjU1IHx8IHByb2JzKSBlcnIoMCk7XG4gICAgdmFyIHN5bXBvcyA9IDA7XG4gICAgLy8gc3ltIHN0ZXAgKGNvcHJpbWUgd2l0aCBzeiAtIGZvcm11bGEgZnJvbSB6c3RkIHNvdXJjZSlcbiAgICB2YXIgc3N0ZXAgPSAoc3ogPj4gMSkgKyAoc3ogPj4gMykgKyAzO1xuICAgIC8vIHN5bSBtYXNrXG4gICAgdmFyIHNtYXNrID0gc3ogLSAxO1xuICAgIGZvciAodmFyIHMgPSAwOyBzIDw9IHN5bTsgKytzKSB7XG4gICAgICB2YXIgc2YgPSBmcmVxW3NdO1xuICAgICAgaWYgKHNmIDwgMSkge1xuICAgICAgICBkc3RhdGVbc10gPSAtc2Y7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyBpcyBzcGxpdCBpbnRvIHR3byBsb29wcyBpbiB6c3RkIHRvIGF2b2lkIGJyYW5jaGluZywgYnV0IGFzIEpTIGlzIGhpZ2hlci1sZXZlbCB0aGF0IGlzIHVubmVjZXNzYXJ5XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2Y7ICsraSkge1xuICAgICAgICBzeW1zW3N5bXBvc10gPSBzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgc3ltcG9zID0gKHN5bXBvcyArIHNzdGVwKSAmIHNtYXNrO1xuICAgICAgICB9IHdoaWxlIChzeW1wb3MgPj0gaHQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBzcHJlYWRpbmcgc3ltYm9scywgc2hvdWxkIGJlIHplcm8gYWdhaW5cbiAgICBpZiAoc3ltcG9zKSBlcnIoMCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN6OyArK2kpIHtcbiAgICAgIC8vIG5leHQgc3RhdGVcbiAgICAgIHZhciBucyA9IGRzdGF0ZVtzeW1zW2ldXSsrO1xuICAgICAgLy8gbnVtIGJpdHNcbiAgICAgIHZhciBuYiA9IChuYml0c1tpXSA9IGFsIC0gbXNiKG5zKSk7XG4gICAgICBuc3RhdGVbaV0gPSAobnMgPDwgbmIpIC0gc3o7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAodHBvcyArIDcpID4+IDMsXG4gICAgICB7XG4gICAgICAgIGI6IGFsLFxuICAgICAgICBzOiBzeW1zLFxuICAgICAgICBuOiBuYml0cyxcbiAgICAgICAgdDogbnN0YXRlLFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuICAvLyByZWFkIGh1ZmZtYW5cbiAgdmFyIHJodSA9IGZ1bmN0aW9uIChkYXQsIGJ0KSB7XG4gICAgLy8gIGluZGV4ICB3ZWlnaHQgY291bnRcbiAgICB2YXIgaSA9IDAsXG4gICAgICB3YyA9IC0xO1xuICAgIC8vICAgIGJ1ZmZlciAgICAgICAgICAgICBoZWFkZXIgYnl0ZVxuICAgIHZhciBidWYgPSBuZXcgdTgoMjkyKSxcbiAgICAgIGhiID0gZGF0W2J0XTtcbiAgICAvLyBodWZmbWFuIHdlaWdodHNcbiAgICB2YXIgaHcgPSBidWYuc3ViYXJyYXkoMCwgMjU2KTtcbiAgICAvLyByYW5rIGNvdW50XG4gICAgdmFyIHJjID0gYnVmLnN1YmFycmF5KDI1NiwgMjY4KTtcbiAgICAvLyByYW5rIGluZGV4XG4gICAgdmFyIHJpID0gbmV3IHUxNihidWYuYnVmZmVyLCAyNjgpO1xuICAgIC8vIE5PVEU6IGF0IHRoaXMgcG9pbnQgYnQgaXMgMSBsZXNzIHRoYW4gZXhwZWN0ZWRcbiAgICBpZiAoaGIgPCAxMjgpIHtcbiAgICAgIC8vIGVuZCBieXRlLCBmc2UgZGVjb2RlIHRhYmxlXG4gICAgICB2YXIgX2EgPSByZnNlKGRhdCwgYnQgKyAxLCA2KSxcbiAgICAgICAgZWJ0ID0gX2FbMF0sXG4gICAgICAgIGZkdCA9IF9hWzFdO1xuICAgICAgYnQgKz0gaGI7XG4gICAgICB2YXIgZXBvcyA9IGVidCA8PCAzO1xuICAgICAgLy8gbGFzdCBieXRlXG4gICAgICB2YXIgbGIgPSBkYXRbYnRdO1xuICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgLy8gIHN0YXRlMSAgIHN0YXRlMiAgIHN0YXRlMSBiaXRzICAgc3RhdGUyIGJpdHNcbiAgICAgIHZhciBzdDEgPSAwLFxuICAgICAgICBzdDIgPSAwLFxuICAgICAgICBidHIxID0gZmR0LmIsXG4gICAgICAgIGJ0cjIgPSBidHIxO1xuICAgICAgLy8gZnNlIHBvc1xuICAgICAgLy8gcHJlLWluY3JlbWVudCB0byBhY2NvdW50IGZvciBvcmlnaW5hbCBkZWZpY2l0IG9mIDFcbiAgICAgIHZhciBmcG9zID0gKCsrYnQgPDwgMykgLSA4ICsgbXNiKGxiKTtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgZnBvcyAtPSBidHIxO1xuICAgICAgICBpZiAoZnBvcyA8IGVwb3MpIGJyZWFrO1xuICAgICAgICB2YXIgY2J0ID0gZnBvcyA+PiAzO1xuICAgICAgICBzdDEgKz1cbiAgICAgICAgICAoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKGZwb3MgJiA3KSkgJiAoKDEgPDwgYnRyMSkgLSAxKTtcbiAgICAgICAgaHdbKyt3Y10gPSBmZHQuc1tzdDFdO1xuICAgICAgICBmcG9zIC09IGJ0cjI7XG4gICAgICAgIGlmIChmcG9zIDwgZXBvcykgYnJlYWs7XG4gICAgICAgIGNidCA9IGZwb3MgPj4gMztcbiAgICAgICAgc3QyICs9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChmcG9zICYgNykpICYgKCgxIDw8IGJ0cjIpIC0gMSk7XG4gICAgICAgIGh3Wysrd2NdID0gZmR0LnNbc3QyXTtcbiAgICAgICAgYnRyMSA9IGZkdC5uW3N0MV07XG4gICAgICAgIHN0MSA9IGZkdC50W3N0MV07XG4gICAgICAgIGJ0cjIgPSBmZHQubltzdDJdO1xuICAgICAgICBzdDIgPSBmZHQudFtzdDJdO1xuICAgICAgfVxuICAgICAgaWYgKCsrd2MgPiAyNTUpIGVycigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2MgPSBoYiAtIDEyNztcbiAgICAgIGZvciAoOyBpIDwgd2M7IGkgKz0gMikge1xuICAgICAgICB2YXIgYnl0ZSA9IGRhdFsrK2J0XTtcbiAgICAgICAgaHdbaV0gPSBieXRlID4+IDQ7XG4gICAgICAgIGh3W2kgKyAxXSA9IGJ5dGUgJiAxNTtcbiAgICAgIH1cbiAgICAgICsrYnQ7XG4gICAgfVxuICAgIC8vIHdlaWdodCBleHBvbmVudGlhbCBzdW1cbiAgICB2YXIgd2VzID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIHd0ID0gaHdbaV07XG4gICAgICAvLyBiaXRzIG11c3QgYmUgYXQgbW9zdCAxMSwgc2FtZSBhcyB3ZWlnaHRcbiAgICAgIGlmICh3dCA+IDExKSBlcnIoMCk7XG4gICAgICB3ZXMgKz0gd3QgJiYgMSA8PCAod3QgLSAxKTtcbiAgICB9XG4gICAgLy8gbWF4IGJpdHNcbiAgICB2YXIgbWIgPSBtc2Iod2VzKSArIDE7XG4gICAgLy8gdGFibGUgc2l6ZVxuICAgIHZhciB0cyA9IDEgPDwgbWI7XG4gICAgLy8gcmVtYWluaW5nIHN1bVxuICAgIHZhciByZW0gPSB0cyAtIHdlcztcbiAgICAvLyBtdXN0IGJlIHBvd2VyIG9mIDJcbiAgICBpZiAocmVtICYgKHJlbSAtIDEpKSBlcnIoMCk7XG4gICAgaHdbd2MrK10gPSBtc2IocmVtKSArIDE7XG4gICAgZm9yIChpID0gMDsgaSA8IHdjOyArK2kpIHtcbiAgICAgIHZhciB3dCA9IGh3W2ldO1xuICAgICAgKytyY1soaHdbaV0gPSB3dCAmJiBtYiArIDEgLSB3dCldO1xuICAgIH1cbiAgICAvLyBodWYgYnVmXG4gICAgdmFyIGhidWYgPSBuZXcgdTgodHMgPDwgMSk7XG4gICAgLy8gICAgc3ltYm9scyAgICAgICAgICAgICAgICAgICAgICBudW0gYml0c1xuICAgIHZhciBzeW1zID0gaGJ1Zi5zdWJhcnJheSgwLCB0cyksXG4gICAgICBuYiA9IGhidWYuc3ViYXJyYXkodHMpO1xuICAgIHJpW21iXSA9IDA7XG4gICAgZm9yIChpID0gbWI7IGkgPiAwOyAtLWkpIHtcbiAgICAgIHZhciBwdiA9IHJpW2ldO1xuICAgICAgZmlsbChuYiwgaSwgcHYsIChyaVtpIC0gMV0gPSBwdiArIHJjW2ldICogKDEgPDwgKG1iIC0gaSkpKSk7XG4gICAgfVxuICAgIGlmIChyaVswXSAhPT0gdHMpIGVycigwKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2M7ICsraSkge1xuICAgICAgdmFyIGJpdHMgPSBod1tpXTtcbiAgICAgIGlmIChiaXRzKSB7XG4gICAgICAgIHZhciBjb2RlID0gcmlbYml0c107XG4gICAgICAgIGZpbGwoc3ltcywgaSwgY29kZSwgKHJpW2JpdHNdID0gY29kZSArICgxIDw8IChtYiAtIGJpdHMpKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgYnQsXG4gICAgICB7XG4gICAgICAgIG46IG5iLFxuICAgICAgICBiOiBtYixcbiAgICAgICAgczogc3ltcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgLy8gVGFibGVzIGdlbmVyYXRlZCB1c2luZyB0aGlzOlxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovYTk3OTQ1MmQ0MzU1OTkyY2JmOGYyNTdjYmZmYzllZGRcbiAgLy8gZGVmYXVsdCBsaXRlcmFsIGxlbmd0aCB0YWJsZVxuICB2YXIgZGxsdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICA4MSwgMTYsIDk5LCAxNDAsIDQ5LCAxOTgsIDI0LCA5OSwgMTIsIDMzLCAxOTYsIDI0LCA5OSwgMTAyLCAxMDIsIDEzNCwgNzAsXG4gICAgICAxNDYsIDQsXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG1hdGNoIGxlbmd0aCB0YWJsZVxuICB2YXIgZG1sdCA9IC8qI19fUFVSRV9fKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbXG4gICAgICAzMywgMjAsIDE5NiwgMjQsIDk5LCAxNDAsIDMzLCAxMzIsIDE2LCA2NiwgOCwgMzMsIDEzMiwgMTYsIDY2LCA4LCAzMywgNjgsXG4gICAgICA2OCwgNjgsIDY4LCA2OCwgNjgsIDY4LCA2OCwgMzYsIDksXG4gICAgXSksXG4gICAgMCxcbiAgICA2LFxuICApWzFdO1xuICAvLyBkZWZhdWx0IG9mZnNldCBjb2RlIHRhYmxlXG4gIHZhciBkb2N0ID0gLyojX19QVVJFX18gKi8gcmZzZShcbiAgICAvKiNfX1BVUkVfXyovIG5ldyB1OChbMzIsIDEzMiwgMTYsIDY2LCAxMDIsIDcwLCA2OCwgNjgsIDY4LCA2OCwgMzYsIDczLCAyXSksXG4gICAgMCxcbiAgICA1LFxuICApWzFdO1xuICAvLyBiaXRzIHRvIGJhc2VsaW5lXG4gIHZhciBiMmJsID0gZnVuY3Rpb24gKGIsIHMpIHtcbiAgICB2YXIgbGVuID0gYi5sZW5ndGgsXG4gICAgICBibCA9IG5ldyBpMzIobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBibFtpXSA9IHM7XG4gICAgICBzICs9IDEgPDwgYltpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJsO1xuICB9O1xuICAvLyBsaXRlcmFsIGxlbmd0aCBiaXRzXG4gIHZhciBsbGIgPSAvKiNfX1BVUkVfXyAqLyBuZXcgdTgoXG4gICAgLyojX19QVVJFX18gKi8gbmV3IGkzMihbXG4gICAgICAwLCAwLCAwLCAwLCAxNjg0MzAwOSwgNTA1Mjg3NzAsIDEzNDY3ODAyMCwgMjAyMDUwMDU3LCAyNjk0MjIwOTMsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgMzYsXG4gICk7XG4gIC8vIGxpdGVyYWwgbGVuZ3RoIGJhc2VsaW5lXG4gIHZhciBsbGJsID0gLyojX19QVVJFX18gKi8gYjJibChsbGIsIDApO1xuICAvLyBtYXRjaCBsZW5ndGggYml0c1xuICB2YXIgbWxiID0gLyojX19QVVJFX18gKi8gbmV3IHU4KFxuICAgIC8qI19fUFVSRV9fICovIG5ldyBpMzIoW1xuICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NDMwMDksIDUwNTI4NzcwLCAxMTc3NjkyMjAsIDE4NTIwNzA0OCxcbiAgICAgIDI1MjU3OTA4NCwgMTYsXG4gICAgXSkuYnVmZmVyLFxuICAgIDAsXG4gICAgNTMsXG4gICk7XG4gIC8vIG1hdGNoIGxlbmd0aCBiYXNlbGluZVxuICB2YXIgbWxibCA9IC8qI19fUFVSRV9fICovIGIyYmwobWxiLCAzKTtcbiAgLy8gZGVjb2RlIGh1ZmZtYW4gc3RyZWFtXG4gIHZhciBkaHUgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGxlbiA9IGRhdC5sZW5ndGgsXG4gICAgICBzcyA9IG91dC5sZW5ndGgsXG4gICAgICBsYiA9IGRhdFtsZW4gLSAxXSxcbiAgICAgIG1zayA9ICgxIDw8IGh1LmIpIC0gMSxcbiAgICAgIGViID0gLWh1LmI7XG4gICAgaWYgKCFsYikgZXJyKDApO1xuICAgIHZhciBzdCA9IDAsXG4gICAgICBidHIgPSBodS5iLFxuICAgICAgcG9zID0gKGxlbiA8PCAzKSAtIDggKyBtc2IobGIpIC0gYnRyLFxuICAgICAgaSA9IC0xO1xuICAgIHdoaWxlIChwb3MgPiBlYiAmJiBpIDwgc3MpIHtcbiAgICAgIHZhciBjYnQgPSBwb3MgPj4gMztcbiAgICAgIHZhciB2YWwgPVxuICAgICAgICAoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpIHwgKGRhdFtjYnQgKyAyXSA8PCAxNikpID4+IChwb3MgJiA3KTtcbiAgICAgIHN0ID0gKChzdCA8PCBidHIpIHwgdmFsKSAmIG1zaztcbiAgICAgIG91dFsrK2ldID0gaHUuc1tzdF07XG4gICAgICBwb3MgLT0gYnRyID0gaHUubltzdF07XG4gICAgfVxuICAgIGlmIChwb3MgIT09IGViIHx8IGkgKyAxICE9PSBzcykgZXJyKDApO1xuICB9O1xuICAvLyBkZWNvZGUgaHVmZm1hbiBzdHJlYW0gNHhcbiAgLy8gVE9ETzogdXNlIHdvcmtlcnMgdG8gcGFyYWxsZWxpemVcbiAgdmFyIGRodTQgPSBmdW5jdGlvbiAoZGF0LCBvdXQsIGh1KSB7XG4gICAgdmFyIGJ0ID0gNjtcbiAgICB2YXIgc3MgPSBvdXQubGVuZ3RoLFxuICAgICAgc3oxID0gKHNzICsgMykgPj4gMixcbiAgICAgIHN6MiA9IHN6MSA8PCAxLFxuICAgICAgc3ozID0gc3oxICsgc3oyO1xuICAgIGRodShcbiAgICAgIGRhdC5zdWJhcnJheShidCwgKGJ0ICs9IGRhdFswXSB8IChkYXRbMV0gPDwgOCkpKSxcbiAgICAgIG91dC5zdWJhcnJheSgwLCBzejEpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbMl0gfCAoZGF0WzNdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oxLCBzejIpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoXG4gICAgICBkYXQuc3ViYXJyYXkoYnQsIChidCArPSBkYXRbNF0gfCAoZGF0WzVdIDw8IDgpKSksXG4gICAgICBvdXQuc3ViYXJyYXkoc3oyLCBzejMpLFxuICAgICAgaHUsXG4gICAgKTtcbiAgICBkaHUoZGF0LnN1YmFycmF5KGJ0KSwgb3V0LnN1YmFycmF5KHN6MyksIGh1KTtcbiAgfTtcbiAgLy8gcmVhZCBac3RhbmRhcmQgYmxvY2tcbiAgdmFyIHJ6YiA9IGZ1bmN0aW9uIChkYXQsIHN0LCBvdXQpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGJ0ID0gc3QuYjtcbiAgICAvLyAgICBieXRlIDAgICAgICAgIGJsb2NrIHR5cGVcbiAgICB2YXIgYjAgPSBkYXRbYnRdLFxuICAgICAgYnR5cGUgPSAoYjAgPj4gMSkgJiAzO1xuICAgIHN0LmwgPSBiMCAmIDE7XG4gICAgdmFyIHN6ID0gKGIwID4+IDMpIHwgKGRhdFtidCArIDFdIDw8IDUpIHwgKGRhdFtidCArIDJdIDw8IDEzKTtcbiAgICAvLyBlbmQgYnl0ZSBmb3IgYmxvY2tcbiAgICB2YXIgZWJ0ID0gKGJ0ICs9IDMpICsgc3o7XG4gICAgaWYgKGJ0eXBlID09PSAxKSB7XG4gICAgICBpZiAoYnQgPj0gZGF0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgc3QuYiA9IGJ0ICsgMTtcbiAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgZmlsbChvdXQsIGRhdFtidF0sIHN0LnksIChzdC55ICs9IHN6KSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsbChuZXcgdTgoc3opLCBkYXRbYnRdKTtcbiAgICB9XG4gICAgaWYgKGVidCA+IGRhdC5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoYnR5cGUgPT09IDApIHtcbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICBpZiAob3V0KSB7XG4gICAgICAgIG91dC5zZXQoZGF0LnN1YmFycmF5KGJ0LCBlYnQpLCBzdC55KTtcbiAgICAgICAgc3QueSArPSBzejtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGMoZGF0LCBidCwgZWJ0KTtcbiAgICB9XG4gICAgaWYgKGJ0eXBlID09PSAyKSB7XG4gICAgICAvLyAgICBieXRlIDMgICAgICAgIGxpdCBidHlwZSAgICAgc2l6ZSBmb3JtYXRcbiAgICAgIHZhciBiMyA9IGRhdFtidF0sXG4gICAgICAgIGxidCA9IGIzICYgMyxcbiAgICAgICAgc2YgPSAoYjMgPj4gMikgJiAzO1xuICAgICAgLy8gbGl0IHNyYyBzaXplICBsaXQgY21wIHN6IDQgc3RyZWFtc1xuICAgICAgdmFyIGxzcyA9IGIzID4+IDQsXG4gICAgICAgIGxjcyA9IDAsXG4gICAgICAgIHM0ID0gMDtcbiAgICAgIGlmIChsYnQgPCAyKSB7XG4gICAgICAgIGlmIChzZiAmIDEpIGxzcyB8PSAoZGF0WysrYnRdIDw8IDQpIHwgKHNmICYgMiAmJiBkYXRbKytidF0gPDwgMTIpO1xuICAgICAgICBlbHNlIGxzcyA9IGIzID4+IDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHNmO1xuICAgICAgICBpZiAoc2YgPCAyKVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSAmIDYzKSA8PCA0KSxcbiAgICAgICAgICAgIChsY3MgPSAoZGF0W2J0XSA+PiA2KSB8IChkYXRbKytidF0gPDwgMikpO1xuICAgICAgICBlbHNlIGlmIChzZiA9PT0gMilcbiAgICAgICAgICAobHNzIHw9IChkYXRbKytidF0gPDwgNCkgfCAoKGRhdFsrK2J0XSAmIDMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gMikgfCAoZGF0WysrYnRdIDw8IDYpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChsc3MgfD0gKGRhdFsrK2J0XSA8PCA0KSB8ICgoZGF0WysrYnRdICYgNjMpIDw8IDEyKSksXG4gICAgICAgICAgICAobGNzID0gKGRhdFtidF0gPj4gNikgfCAoZGF0WysrYnRdIDw8IDIpIHwgKGRhdFsrK2J0XSA8PCAxMCkpO1xuICAgICAgfVxuICAgICAgKytidDtcbiAgICAgIC8vIGFkZCBsaXRlcmFscyB0byBlbmQgLSBjYW4gbmV2ZXIgb3ZlcmxhcCB3aXRoIGJhY2tyZWZlcmVuY2VzIGJlY2F1c2UgdW51c2VkIGxpdGVyYWxzIGFsd2F5cyBhcHBlbmRlZFxuICAgICAgdmFyIGJ1ZiA9IG91dCA/IG91dC5zdWJhcnJheShzdC55LCBzdC55ICsgc3QubSkgOiBuZXcgdTgoc3QubSk7XG4gICAgICAvLyBzdGFydGluZyBwb2ludCBmb3IgbGl0ZXJhbHNcbiAgICAgIHZhciBzcGwgPSBidWYubGVuZ3RoIC0gbHNzO1xuICAgICAgaWYgKGxidCA9PT0gMCkgYnVmLnNldChkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsc3MpKSwgc3BsKTtcbiAgICAgIGVsc2UgaWYgKGxidCA9PT0gMSkgZmlsbChidWYsIGRhdFtidCsrXSwgc3BsKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBodWZmbWFuIHRhYmxlXG4gICAgICAgIHZhciBodSA9IHN0Lmg7XG4gICAgICAgIGlmIChsYnQgPT09IDIpIHtcbiAgICAgICAgICB2YXIgaHVkID0gcmh1KGRhdCwgYnQpO1xuICAgICAgICAgIC8vIHN1YnRyYWN0IGRlc2NyaXB0aW9uIGxlbmd0aFxuICAgICAgICAgIGxjcyArPSBidCAtIChidCA9IGh1ZFswXSk7XG4gICAgICAgICAgc3QuaCA9IGh1ID0gaHVkWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKCFodSkgZXJyKDApO1xuICAgICAgICAoczQgPyBkaHU0IDogZGh1KShkYXQuc3ViYXJyYXkoYnQsIChidCArPSBsY3MpKSwgYnVmLnN1YmFycmF5KHNwbCksIGh1KTtcbiAgICAgIH1cbiAgICAgIC8vIG51bSBzZXF1ZW5jZXNcbiAgICAgIHZhciBucyA9IGRhdFtidCsrXTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBpZiAobnMgPT09IDI1NSkgbnMgPSAoZGF0W2J0KytdIHwgKGRhdFtidCsrXSA8PCA4KSkgKyAweDdmMDA7XG4gICAgICAgIGVsc2UgaWYgKG5zID4gMTI3KSBucyA9ICgobnMgLSAxMjgpIDw8IDgpIHwgZGF0W2J0KytdO1xuICAgICAgICAvLyBzeW1ib2wgY29tcHJlc3Npb24gbW9kZXNcbiAgICAgICAgdmFyIHNjbSA9IGRhdFtidCsrXTtcbiAgICAgICAgaWYgKHNjbSAmIDMpIGVycigwKTtcbiAgICAgICAgdmFyIGR0cyA9IFtkbWx0LCBkb2N0LCBkbGx0XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPiAtMTsgLS1pKSB7XG4gICAgICAgICAgdmFyIG1kID0gKHNjbSA+PiAoKGkgPDwgMSkgKyAyKSkgJiAzO1xuICAgICAgICAgIGlmIChtZCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmxlIGJ1ZlxuICAgICAgICAgICAgdmFyIHJidWYgPSBuZXcgdTgoWzAsIDAsIGRhdFtidCsrXV0pO1xuICAgICAgICAgICAgZHRzW2ldID0ge1xuICAgICAgICAgICAgICBzOiByYnVmLnN1YmFycmF5KDIsIDMpLFxuICAgICAgICAgICAgICBuOiByYnVmLnN1YmFycmF5KDAsIDEpLFxuICAgICAgICAgICAgICB0OiBuZXcgdTE2KHJidWYuYnVmZmVyLCAwLCAxKSxcbiAgICAgICAgICAgICAgYjogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMikge1xuICAgICAgICAgICAgLy8gYWNjdXJhY3kgbG9nIDggZm9yIG9mZnNldHMsIDkgZm9yIG90aGVyc1xuICAgICAgICAgICAgKF9hID0gcmZzZShkYXQsIGJ0LCA5IC0gKGkgJiAxKSkpLCAoYnQgPSBfYVswXSksIChkdHNbaV0gPSBfYVsxXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChtZCA9PT0gMykge1xuICAgICAgICAgICAgaWYgKCFzdC50KSBlcnIoMCk7XG4gICAgICAgICAgICBkdHNbaV0gPSBzdC50W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX2IgPSAoc3QudCA9IGR0cyksXG4gICAgICAgICAgbWx0ID0gX2JbMF0sXG4gICAgICAgICAgb2N0ID0gX2JbMV0sXG4gICAgICAgICAgbGx0ID0gX2JbMl07XG4gICAgICAgIHZhciBsYiA9IGRhdFtlYnQgLSAxXTtcbiAgICAgICAgaWYgKCFsYikgZXJyKDApO1xuICAgICAgICB2YXIgc3BvcyA9IChlYnQgPDwgMykgLSA4ICsgbXNiKGxiKSAtIGxsdC5iLFxuICAgICAgICAgIGNidCA9IHNwb3MgPj4gMyxcbiAgICAgICAgICBvdWJ0ID0gMDtcbiAgICAgICAgdmFyIGxzdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IGxsdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBvY3QuYikgPj4gMztcbiAgICAgICAgdmFyIG9zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG9jdC5iKSAtIDEpO1xuICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbHQuYikgPj4gMztcbiAgICAgICAgdmFyIG1zdCA9XG4gICAgICAgICAgKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICYgKCgxIDw8IG1sdC5iKSAtIDEpO1xuICAgICAgICBmb3IgKCsrbnM7IC0tbnM7ICkge1xuICAgICAgICAgIHZhciBsbGMgPSBsbHQuc1tsc3RdO1xuICAgICAgICAgIHZhciBsYnRyID0gbGx0Lm5bbHN0XTtcbiAgICAgICAgICB2YXIgbWxjID0gbWx0LnNbbXN0XTtcbiAgICAgICAgICB2YXIgbWJ0ciA9IG1sdC5uW21zdF07XG4gICAgICAgICAgdmFyIG9mYyA9IG9jdC5zW29zdF07XG4gICAgICAgICAgdmFyIG9idHIgPSBvY3Qubltvc3RdO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IG9mYykgPj4gMztcbiAgICAgICAgICB2YXIgb2ZwID0gMSA8PCBvZmM7XG4gICAgICAgICAgdmFyIG9mZiA9XG4gICAgICAgICAgICBvZnAgK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDFdIDw8IDgpIHxcbiAgICAgICAgICAgICAgKGRhdFtjYnQgKyAyXSA8PCAxNikgfFxuICAgICAgICAgICAgICAoZGF0W2NidCArIDNdIDw8IDI0KSkgPj4+XG4gICAgICAgICAgICAgIChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKG9mcCAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtbGJbbWxjXSkgPj4gMztcbiAgICAgICAgICB2YXIgbWwgPVxuICAgICAgICAgICAgbWxibFttbGNdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSB8IChkYXRbY2J0ICsgMl0gPDwgMTYpKSA+PlxuICAgICAgICAgICAgICAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBtbGJbbWxjXSkgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gbGxiW2xsY10pID4+IDM7XG4gICAgICAgICAgdmFyIGxsID1cbiAgICAgICAgICAgIGxsYmxbbGxjXSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkgfCAoZGF0W2NidCArIDJdIDw8IDE2KSkgPj5cbiAgICAgICAgICAgICAgKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbGxiW2xsY10pIC0gMSkpO1xuICAgICAgICAgIGNidCA9IChzcG9zIC09IGxidHIpID4+IDM7XG4gICAgICAgICAgbHN0ID1cbiAgICAgICAgICAgIGxsdC50W2xzdF0gK1xuICAgICAgICAgICAgKCgoZGF0W2NidF0gfCAoZGF0W2NidCArIDFdIDw8IDgpKSA+PiAoc3BvcyAmIDcpKSAmXG4gICAgICAgICAgICAgICgoMSA8PCBsYnRyKSAtIDEpKTtcbiAgICAgICAgICBjYnQgPSAoc3BvcyAtPSBtYnRyKSA+PiAzO1xuICAgICAgICAgIG1zdCA9XG4gICAgICAgICAgICBtbHQudFttc3RdICtcbiAgICAgICAgICAgICgoKGRhdFtjYnRdIHwgKGRhdFtjYnQgKyAxXSA8PCA4KSkgPj4gKHNwb3MgJiA3KSkgJlxuICAgICAgICAgICAgICAoKDEgPDwgbWJ0cikgLSAxKSk7XG4gICAgICAgICAgY2J0ID0gKHNwb3MgLT0gb2J0cikgPj4gMztcbiAgICAgICAgICBvc3QgPVxuICAgICAgICAgICAgb2N0LnRbb3N0XSArXG4gICAgICAgICAgICAoKChkYXRbY2J0XSB8IChkYXRbY2J0ICsgMV0gPDwgOCkpID4+IChzcG9zICYgNykpICZcbiAgICAgICAgICAgICAgKCgxIDw8IG9idHIpIC0gMSkpO1xuICAgICAgICAgIGlmIChvZmYgPiAzKSB7XG4gICAgICAgICAgICBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgIHN0Lm9bMV0gPSBzdC5vWzBdO1xuICAgICAgICAgICAgc3Qub1swXSA9IG9mZiAtPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gb2ZmIC0gKGxsICE9PSAwKTtcbiAgICAgICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgICAgb2ZmID0gaWR4ID09PSAzID8gc3Qub1swXSAtIDEgOiBzdC5vW2lkeF07XG4gICAgICAgICAgICAgIGlmIChpZHggPiAxKSBzdC5vWzJdID0gc3Qub1sxXTtcbiAgICAgICAgICAgICAgc3Qub1sxXSA9IHN0Lm9bMF07XG4gICAgICAgICAgICAgIHN0Lm9bMF0gPSBvZmY7XG4gICAgICAgICAgICB9IGVsc2Ugb2ZmID0gc3Qub1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbDsgKytpKSB7XG4gICAgICAgICAgICBidWZbb3VidCArIGldID0gYnVmW3NwbCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICAob3VidCArPSBsbCksIChzcGwgKz0gbGwpO1xuICAgICAgICAgIHZhciBzdGluID0gb3VidCAtIG9mZjtcbiAgICAgICAgICBpZiAoc3RpbiA8IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAtc3RpbjtcbiAgICAgICAgICAgIHZhciBicyA9IHN0LmUgKyBzdGluO1xuICAgICAgICAgICAgaWYgKGxlbiA+IG1sKSBsZW4gPSBtbDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgYnVmW291YnQgKyBpXSA9IHN0LndbYnMgKyBpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChvdWJ0ICs9IGxlbiksIChtbCAtPSBsZW4pLCAoc3RpbiA9IDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1sOyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvdWJ0ICsgaV0gPSBidWZbc3RpbiArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdWJ0ICs9IG1sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdWJ0ICE9PSBzcGwpIHtcbiAgICAgICAgICB3aGlsZSAoc3BsIDwgYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmW291YnQrK10gPSBidWZbc3BsKytdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIG91YnQgPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAob3V0KSBzdC55ICs9IG91YnQ7XG4gICAgICAgIGVsc2UgYnVmID0gc2xjKGJ1ZiwgMCwgb3VidCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0KSB7XG4gICAgICAgICAgc3QueSArPSBsc3M7XG4gICAgICAgICAgaWYgKHNwbCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsc3M7ICsraSkge1xuICAgICAgICAgICAgICBidWZbaV0gPSBidWZbc3BsICsgaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwbCkgYnVmID0gc2xjKGJ1Ziwgc3BsKTtcbiAgICAgIH1cbiAgICAgIHN0LmIgPSBlYnQ7XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICBlcnIoMik7XG4gIH07XG4gIC8vIGNvbmNhdFxuICB2YXIgY2N0ID0gZnVuY3Rpb24gKGJ1ZnMsIG9sKSB7XG4gICAgaWYgKGJ1ZnMubGVuZ3RoID09PSAxKSByZXR1cm4gYnVmc1swXTtcbiAgICB2YXIgYnVmID0gbmV3IHU4KG9sKTtcbiAgICBmb3IgKHZhciBpID0gMCwgYiA9IDA7IGkgPCBidWZzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2hrID0gYnVmc1tpXTtcbiAgICAgIGJ1Zi5zZXQoY2hrLCBiKTtcbiAgICAgIGIgKz0gY2hrLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfTtcbiAgLyoqXG4gICAqIERlY29tcHJlc3NlcyBac3RhbmRhcmQgZGF0YVxuICAgKiBAcGFyYW0gZGF0IFRoZSBpbnB1dCBkYXRhXG4gICAqIEBwYXJhbSBidWYgVGhlIG91dHB1dCBidWZmZXIuIElmIHVuc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZVxuICAgKiAgICAgICAgICAgIGV4YWN0bHkgZW5vdWdoIG1lbW9yeSB0byBmaXQgdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB5b3VyXG4gICAqICAgICAgICAgICAgZGF0YSBoYXMgbXVsdGlwbGUgZnJhbWVzIGFuZCB5b3Uga25vdyB0aGUgb3V0cHV0IHNpemUsIHNwZWNpZnlpbmdcbiAgICogICAgICAgICAgICBpdCB3aWxsIHlpZWxkIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICogQHJldHVybnMgVGhlIGRlY29tcHJlc3NlZCBkYXRhXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb21wcmVzcyhkYXQsIGJ1Zikge1xuICAgIHZhciBidCA9IDAsXG4gICAgICBidWZzID0gW10sXG4gICAgICBuYiA9ICshYnVmLFxuICAgICAgb2wgPSAwO1xuICAgIHdoaWxlIChkYXQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3QgPSByemZoKGRhdCwgbmIgfHwgYnVmKTtcbiAgICAgIGlmICh0eXBlb2Ygc3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKG5iKSB7XG4gICAgICAgICAgYnVmID0gbnVsbDtcbiAgICAgICAgICBpZiAoc3Qudy5sZW5ndGggPT09IHN0LnUpIHtcbiAgICAgICAgICAgIGJ1ZnMucHVzaCgoYnVmID0gc3QudykpO1xuICAgICAgICAgICAgb2wgKz0gc3QudTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmcy5wdXNoKGJ1Zik7XG4gICAgICAgICAgc3QuZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCFzdC5sKSB7XG4gICAgICAgICAgdmFyIGJsayA9IHJ6YihkYXQsIHN0LCBidWYpO1xuICAgICAgICAgIGlmICghYmxrKSBlcnIoNSk7XG4gICAgICAgICAgaWYgKGJ1Zikgc3QuZSA9IHN0Lnk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWZzLnB1c2goYmxrKTtcbiAgICAgICAgICAgIG9sICs9IGJsay5sZW5ndGg7XG4gICAgICAgICAgICBjcHcoc3QudywgMCwgYmxrLmxlbmd0aCk7XG4gICAgICAgICAgICBzdC53LnNldChibGssIHN0LncubGVuZ3RoIC0gYmxrLmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJ0ID0gc3QuYiArIHN0LmMgKiA0O1xuICAgICAgfSBlbHNlIGJ0ID0gc3Q7XG4gICAgICBkYXQgPSBkYXQuc3ViYXJyYXkoYnQpO1xuICAgIH1cbiAgICByZXR1cm4gY2N0KGJ1ZnMsIG9sKTtcbiAgfTtcbn0pKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0gbnVsbDtcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4wXG4vL1ZlcnNpb246IDwgNS4xLjFcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xudmFyIGNhbWxfZGVjb21wcmVzc19pbnB1dCA9IHpzdGRfZGVjb21wcmVzcztcblxuLy9Qcm92aWRlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG4vL1ZlcnNpb246ID49IDUuMS4xXG4vL1ZlcnNpb246IDwgNS4yLjBcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSBudWxsO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vVmVyc2lvbjogPj0gNS4yXG4vL1JlcXVpcmVzOiB6c3RkX2RlY29tcHJlc3NcbnZhciBjYW1sX2RlY29tcHJlc3NfaW5wdXQgPSB6c3RkX2RlY29tcHJlc3M7XG5cbi8vUHJvdmlkZXM6IGNhbWxfenN0ZF9pbml0aWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbi8vUmVxdWlyZXM6IHpzdGRfZGVjb21wcmVzc1xuLy9WZXJzaW9uOiA+PSA1LjEuMVxuZnVuY3Rpb24gY2FtbF96c3RkX2luaXRpYWxpemUoX3VuaXQpIHtcbiAgY2FtbF9kZWNvbXByZXNzX2lucHV0ID0genN0ZF9kZWNvbXByZXNzO1xuICByZXR1cm4gMTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMztcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMjtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX25vbmVcbnZhciBjYW1sX2VwaGVfbm9uZSA9IHsgY2FtbF9lcGhlX25vbmU6IDAgfTtcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfZGF0YV9vcHRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgdmFyIG9sZCA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB2IGluc3RhbmNlb2YgT2JqZWN0KSB2ID0gbmV3IGdsb2JhbFRoaXMuV2Vha1JlZih2KTtcbiAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gdjtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHgpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdCh4LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NyZWF0ZShuKSB7XG4gIHJldHVybiBjYW1sX3dlYWtfY3JlYXRlKG4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX25vbmVcbmZ1bmN0aW9uIGNhbWxfd2Vha19jcmVhdGUobikge1xuICB2YXIgYWxlbiA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgdmFyIHggPSBuZXcgQXJyYXkoYWxlbik7XG4gIHhbMF0gPSAyNTE7XG4gIHhbMV0gPSBcImNhbWxfZXBoZV9saXN0X2hlYWRcIjtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhbGVuOyBpKyspIHtcbiAgICB4W2ldID0gY2FtbF9lcGhlX25vbmU7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9zZXRfa2V5LCBjYW1sX2VwaGVfdW5zZXRfa2V5XG5mdW5jdGlvbiBjYW1sX3dlYWtfc2V0KHgsIGksIHYpIHtcbiAgaWYgKHYgPT09IDApIGNhbWxfZXBoZV91bnNldF9rZXkoeCwgaSk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9rZXkoeCwgaSwgdlsxXSk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfZ2V0XG5cbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfa2V5KHgsIGkpIHtcbiAgdmFyIHdlYWsgPSB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV07XG4gIGlmICh3ZWFrID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGlmIChnbG9iYWxUaGlzLldlYWtSZWYgJiYgd2VhayBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuV2Vha1JlZikge1xuICAgIHdlYWsgPSB3ZWFrLmRlcmVmKCk7XG4gICAgaWYgKHdlYWsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldID0gY2FtbF9lcGhlX25vbmU7XG4gICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWzAsIHdlYWtdO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9rZXlfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2dldF9rZXksY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuLy9BbGlhczogY2FtbF93ZWFrX2dldF9jb3B5XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5KHgsIGkpIHtcbiAgdmFyIHkgPSBjYW1sX2VwaGVfZ2V0X2tleSh4LCBpKTtcbiAgaWYgKHkgPT09IDApIHJldHVybiB5O1xuICB2YXIgeiA9IHlbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfa2V5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG4vL0FsaWFzOiBjYW1sX3dlYWtfY2hlY2tcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19rZXkoeCwgaSkge1xuICB2YXIgd2VhayA9IHhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbiAgaWYgKHdlYWsgPT09IGNhbWxfZXBoZV9ub25lKSByZXR1cm4gMDtcbiAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiB3ZWFrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgd2VhayA9IHdlYWsuZGVyZWYoKTtcbiAgICBpZiAod2VhayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfYmxpdF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuLy9BbGlhczogY2FtbF93ZWFrX2JsaXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2tleShhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIHZhciBvbGQgPSBjYW1sX2VwaGVfZ2V0X2RhdGEoYTEpO1xuICAvLyBtaW51cyBvbmUgYmVjYXVzZSBjYW1sX2FycmF5X2JsaXQgd29ya3Mgb24gb2NhbWwgYXJyYXlcbiAgY2FtbF9hcnJheV9ibGl0KFxuICAgIGExLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTEgLSAxLFxuICAgIGEyLFxuICAgIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaTIgLSAxLFxuICAgIGxlbixcbiAgKTtcbiAgY2FtbF9lcGhlX3NldF9kYXRhX29wdChhMiwgb2xkKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YSwgY2FtbF9lcGhlX3NldF9kYXRhX29wdFxuZnVuY3Rpb24gY2FtbF9lcGhlX2JsaXRfZGF0YShzcmMsIGRzdCkge1xuICB2YXIgb2xkID0gY2FtbF9lcGhlX2dldF9kYXRhKHNyYyk7XG4gIGNhbWxfZXBoZV9zZXRfZGF0YV9vcHQoZHN0LCBvbGQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXQsIGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfbm9uZVxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpIHtcbiAgdmFyIGRhdGEgPSB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF07XG4gIGlmIChkYXRhID09PSBjYW1sX2VwaGVfbm9uZSkgcmV0dXJuIDA7XG4gIGZvciAodmFyIGkgPSBjYW1sX2VwaGVfa2V5X29mZnNldDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBjYW1sX2VwaGVfbm9uZTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoZ2xvYmFsVGhpcy5XZWFrTWFwKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhLmdldChrKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbMCwgZGF0YV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX2R1cFxuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkoeCkge1xuICB2YXIgciA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKHIgPT09IDApIHJldHVybiAwO1xuICB2YXIgeiA9IHJbMV07XG4gIGlmIChBcnJheS5pc0FycmF5KHopKSByZXR1cm4gWzAsIGNhbWxfb2JqX2R1cCh6KV07XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldCwgY2FtbF9lcGhlX2tleV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSkge1xuICBmb3IgKHZhciBpID0geC5sZW5ndGggLSAxOyBpID49IGNhbWxfZXBoZV9rZXlfb2Zmc2V0OyBpLS0pIHtcbiAgICB2YXIgayA9IHhbaV07XG4gICAgaWYgKGdsb2JhbFRoaXMuV2Vha1JlZiAmJiBrIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5XZWFrUmVmKSB7XG4gICAgICB2YXIgZCA9IGsuZGVyZWYoKTtcbiAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeFtpXSA9IGNhbWxfZXBoZV9ub25lO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnbG9iYWxUaGlzLldlYWtNYXApIHtcbiAgICAgICAgZGF0YSA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKS5zZXQoaywgZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0XG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGFfb3B0KHgsIGRhdGFfb3B0KSB7XG4gIGlmIChkYXRhX29wdCA9PT0gMCkgY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCk7XG4gIGVsc2UgY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGFfb3B0WzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV91bnNldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9ub25lXG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfZGF0YSh4KSB7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGNhbWxfZXBoZV9ub25lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NoZWNrX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuZnVuY3Rpb24gY2FtbF9lcGhlX2NoZWNrX2RhdGEoeCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZXBoZV9nZXRfZGF0YSh4KTtcbiAgaWYgKGRhdGEgPT09IDApIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAxO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcihfdW5pdCkge1xuICAvL2F2YWlsYWJsZSB3aXRoIFtub2RlIC0tZXhwb3NlLWdjXVxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZ2MgPT09IFwiZnVuY3Rpb25cIikgZ2xvYmFsVGhpcy5nYyh0cnVlKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKF91bml0KSB7XG4gIC8vYXZhaWxhYmxlIHdpdGggW25vZGUgLS1leHBvc2UtZ2NdXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5nYyA9PT0gXCJmdW5jdGlvblwiKSBnbG9iYWxUaGlzLmdjKCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoX3VuaXQpIHtcbiAgLy9hdmFpbGFibGUgd2l0aCBbbm9kZSAtLWV4cG9zZS1nY11cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmdjID09PSBcImZ1bmN0aW9uXCIpIGdsb2JhbFRoaXMuZ2MoKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbihfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIFsyNTQsIDAsIDAsIDBdO1xufVxuLy9Qcm92aWRlczogY2FtbF9nY19xdWlja19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3F1aWNrX3N0YXQoX3VuaXQpIHtcbiAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG4vL1JlcXVpcmVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc3RhdCh1bml0KSB7XG4gIHJldHVybiBjYW1sX2djX3F1aWNrX3N0YXQodW5pdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc2V0XG5mdW5jdGlvbiBjYW1sX2djX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19nZXRcbmZ1bmN0aW9uIGNhbWxfZ2NfZ2V0KF91bml0KSB7XG4gIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXIoX2YsIF94KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlXG52YXIgYWxsX2ZpbmFsaXplcnMgPSBuZXcgZ2xvYmFsVGhpcy5TZXQoKTtcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUoY2IsIGEpIHtcbiAgaWYgKGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHZhciB4ID0gbmV3IGdsb2JhbFRoaXMuRmluYWxpemF0aW9uUmVnaXN0cnkoZnVuY3Rpb24gKHgpIHtcbiAgICAgIGFsbF9maW5hbGl6ZXJzLmRlbGV0ZSh4KTtcbiAgICAgIGNiKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIHgucmVnaXN0ZXIoYSwgeCk7XG4gICAgYWxsX2ZpbmFsaXplcnMuYWRkKHgpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlbGVhc2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVsZWFzZShfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQoX3JhdGUsIF9zdGFja19zaXplLCBfdHJhY2tlcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2ZfZGlzY2FyZFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9kaXNjYXJkKF90KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V2ZW50bG9nX3Jlc3VtZVxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19yZXN1bWUoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2Vcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuLy9WZXJzaW9uOiA8IDUuMFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yX3NsaWNlXG5mdW5jdGlvbiBjYW1sX2djX21ham9yX3NsaWNlKF93b3JrKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9idWNrZXRcbi8vVmVyc2lvbjogPCA1LjBcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2J1Y2tldChfbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG4vL1ZlcnNpb246IDwgNS4wXG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQoX24pIHtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID0ge1xuICAgIGp1c3RpZnk6IFwiK1wiLFxuICAgIHNpZ25zdHlsZTogXCItXCIsXG4gICAgZmlsbGVyOiBcIiBcIixcbiAgICBhbHRlcm5hdGU6IGZhbHNlLFxuICAgIGJhc2U6IDAsXG4gICAgc2lnbmVkY29udjogZmFsc2UsXG4gICAgd2lkdGg6IDAsXG4gICAgdXBwZXJjYXNlOiBmYWxzZSxcbiAgICBzaWduOiAxLFxuICAgIHByZWM6IC0xLFxuICAgIGNvbnY6IFwiZlwiLFxuICB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgZi5qdXN0aWZ5ID0gXCItXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIitcIjpcbiAgICAgIGNhc2UgXCIgXCI6XG4gICAgICAgIGYuc2lnbnN0eWxlID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOlxuICAgICAgICBmLmZpbGxlciA9IFwiMFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiMVwiOlxuICAgICAgY2FzZSBcIjJcIjpcbiAgICAgIGNhc2UgXCIzXCI6XG4gICAgICBjYXNlIFwiNFwiOlxuICAgICAgY2FzZSBcIjVcIjpcbiAgICAgIGNhc2UgXCI2XCI6XG4gICAgICBjYXNlIFwiN1wiOlxuICAgICAgY2FzZSBcIjhcIjpcbiAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgIGYud2lkdGggPSAwO1xuICAgICAgICB3aGlsZSAoKChjID0gZm10LmNoYXJDb2RlQXQoaSkgLSA0OCksIGMgPj0gMCAmJiBjIDw9IDkpKSB7XG4gICAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBmLnByZWMgPSAwO1xuICAgICAgICBpKys7XG4gICAgICAgIHdoaWxlICgoKGMgPSBmbXQuY2hhckNvZGVBdChpKSAtIDQ4KSwgYyA+PSAwICYmIGMgPD0gOSkpIHtcbiAgICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgZi5iYXNlID0gMTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgZi5iYXNlID0gMTY7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICBmLmJhc2UgPSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7XG4gICAgICAgIGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9PSBcIi1cIikpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT09IFwiK1wiICYmIGYuZmlsbGVyID09PSBcIiBcIilcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gXCIgXCI7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9IFwiLVwiO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9PSBcIi1cIikgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT09IDgpIGJ1ZmZlciArPSBcIjBcIjtcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZSA/IFwiMFhcIiA6IFwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCIrXCIgJiYgZi5maWxsZXIgPT09IFwiMFwiKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIjBcIjtcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PT0gXCItXCIpIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSBcIiBcIjtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBIdWdvIEhldXphcmRcblxuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVcbnZhciBjYW1sX2dyX3N0YXRlO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYgKGNhbWxfZ3Jfc3RhdGUpIHtcbiAgICByZXR1cm4gY2FtbF9ncl9zdGF0ZTtcbiAgfVxuICB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoW1xuICAgIDAsXG4gICAgY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiTm90IGluaXRpYWxpemVkXCIpLFxuICBdKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGUgPSBjdHg7XG4gIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbykge1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiICsgbmFtZSArIFwiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmICghKGluZm8gPT09IFwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZiAoIXRhcmdldCkgdGFyZ2V0ID0gXCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYgKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKTtcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdyA/IE51bWJlci5wYXJzZUludCh3KSA6IDIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiICsgdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoID8gTnVtYmVyLnBhcnNlSW50KGgpIDogMjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiICsgaCk7XG5cbiAgdmFyIHdpbiA9IGdsb2JhbFRoaXMub3BlbihcImFib3V0OmJsYW5rXCIsIHRhcmdldCwgc3BlY3Muam9pbihcIixcIikpO1xuICBpZiAoIXdpbikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpO1xuICB9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsIHcsIGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCkge1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsIGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLCBjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJib3R0b21cIjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcywgdywgaCkge1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgd2lkdGg6IHcsXG4gICAgaGVpZ2h0OiBoLFxuICAgIGxpbmVfd2lkdGg6IDEsXG4gICAgZm9udDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZTogMjYsXG4gICAgY29sb3I6IDB4MDAwMDAwLFxuICAgIHRpdGxlOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpLFxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KSByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmIChzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgaWYgKHcgIT09IHMuY2FudmFzLndpZHRoKSBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIGlmIChoICE9PSBzLmNhbnZhcy5oZWlnaHQpIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHMuY2FudmFzLndpZHRoLCBzLmNhbnZhcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gXCJcIiArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSBcIjBcIiArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhciByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gICAgZyA9IChjb2xvciA+PiA4KSAmIDB4ZmYsXG4gICAgYiA9IChjb2xvciA+PiAwKSAmIDB4ZmY7XG4gIHMuY29sb3IgPSBjb2xvcjtcbiAgdmFyIGNfc3RyID0gXCIjXCIgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgsIHkpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsIDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIChkWzFdID1cbiAgICAoY29sb3IgPj4gOCkgJlxuICAgIDB4ZmYpLCAvL2dcbiAgICAoZFsyXSA9IChjb2xvciA+PiAwKSAmIDB4ZmYpOyAvL2JcbiAgZFszXSA9IDB4ZmY7IC8vYVxuICBzLnggPSB4O1xuICBzLnkgPSB5O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLCB4LCBzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbSA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoeCwgcy5oZWlnaHQgLSB5LCAxLCAxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54ID0geDtcbiAgcy55ID0geTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngsIHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LCBzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueCA9IHg7XG4gIHMueSA9IHk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LCB5LCB3LCBoKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCwgcy5oZWlnaHQgLSB5LCB3LCAtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsIGN4LCBjeSwgcnksIHJ4LCBhMSwgYTIpIHtcbiAgd2hpbGUgKGExID4gYTIpIGEyICs9IDM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLFxuICAgIHhQb3MsXG4gICAgeVBvcyxcbiAgICB4UG9zX3ByZXYsXG4gICAgeVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCArIHJ5KSAvIDIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9ICgoYTIgLSBhMSkgKiBNYXRoLlBJKSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IG51bTsgaisrKSB7XG4gICAgeFBvcyA9XG4gICAgICBjeCAtXG4gICAgICByeCAqIE1hdGguc2luKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnkgKiBNYXRoLmNvcyhpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9XG4gICAgICBjeSArXG4gICAgICByeSAqIE1hdGguY29zKGkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgK1xuICAgICAgcnggKiBNYXRoLnNpbihpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYgIT09IHhQb3MgfHwgeVBvc19wcmV2ICE9PSB5UG9zKSB7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXYgPSB4UG9zO1xuICAgIHlQb3NfcHJldiA9IHlQb3M7XG4gICAgaSAtPSBkZWx0YTsgLy9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LCB5LCByeCwgcnksIGExLCBhMikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCwgeCwgcy5oZWlnaHQgLSB5LCByeCwgcnksIGExLCBhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gdztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCwgeSwgdywgaCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LCBzLmhlaWdodCAtIHksIHcsIC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLCBzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLCBzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSwgcy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgsIHksIHJ4LCByeSwgYTEsIGEyKSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LCB4LCBzLmhlaWdodCAtIHksIHJ4LCByeSwgYTEsIGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIsIHMueCwgcy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpIHtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cikge1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpIHtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsIHcsIHMudGV4dF9zaXplXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycikge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDE7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodywgaCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyBqKyspIHtcbiAgICAgIHZhciBjID0gYXJyW2kgKyAxXVtqICsgMV07XG4gICAgICB2YXIgbyA9IGkgKiAodyAqIDQpICsgaiAqIDQ7XG4gICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAoYyA+PiAxNikgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IChjID4+IDgpICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAoYyA+PiAwKSAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKSB7XG4gIHZhciBkYXRhID0gWzBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltLmhlaWdodDsgaSsrKSB7XG4gICAgZGF0YVtpICsgMV0gPSBbMF07XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbS53aWR0aDsgaisrKSB7XG4gICAgICB2YXIgbyA9IGkgKiAoaW0ud2lkdGggKiA0KSArIGogKiA0LFxuICAgICAgICByID0gaW0uZGF0YVtvICsgMF0sXG4gICAgICAgIGcgPSBpbS5kYXRhW28gKyAxXSxcbiAgICAgICAgYiA9IGltLmRhdGFbbyArIDJdO1xuICAgICAgZGF0YVtpICsgMV1baiArIDFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSwgeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmICghaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwgMCwgMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGdsb2JhbFRoaXMuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCB4LCBzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICAgICAgaW0uaW1hZ2UgPSBpbWFnZTtcbiAgICB9O1xuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSwgeCwgcy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3JlYXRlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jcmVhdGVfaW1hZ2UoeCwgeSkge1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgsIHkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9ibGl0X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9ibGl0X2ltYWdlKGltLCB4LCB5KSB7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltMiA9IHMuY29udGV4dC5nZXRJbWFnZURhdGEoXG4gICAgeCxcbiAgICBzLmhlaWdodCAtIGltLmhlaWdodCAtIHksXG4gICAgaW0ud2lkdGgsXG4gICAgaW0uaGVpZ2h0LFxuICApO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSArIDFdID0gaW0yLmRhdGFbaSArIDFdO1xuICAgIGltLmRhdGFbaSArIDJdID0gaW0yLmRhdGFbaSArIDJdO1xuICAgIGltLmRhdGFbaSArIDNdID0gaW0yLmRhdGFbaSArIDNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKSB7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCkge1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2FpdF9ldmVudFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl93YWl0X2V2ZW50KF9ldmwpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9zeW5jaHJvbml6ZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3JlbWVtYmVyX21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVtZW1iZXJfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChfYSkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl93aW5kb3dfaWQgbm90IEltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX29wZW5fc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fc3Vid2luZG93KF9hLCBfYiwgX2MsIF9kKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KF9hKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VzY2FwZSBjb25zdCAoY29uc3QpXG52YXIgY2FtbF9qc19yZWdleHBzID0geyBhbXA6IC8mL2csIGx0OiAvPC9nLCBxdW90OiAvXCIvZywgYWxsOiAvWyY8XCJdLyB9O1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VzY2FwZShzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHNcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvO1xuICBpZiAocy5tYXRjaChlbnRpdHkpKSB7XG4gICAgdmFyIHN0cixcbiAgICAgIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICB0ZW1wLmlubmVySFRNTCA9IHM7XG4gICAgc3RyID0gdGVtcC50ZXh0Q29udGVudCB8fCB0ZW1wLmlubmVyVGV4dDtcbiAgICB0ZW1wID0gbnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUoKSB7XG4gIHZhciBjID0gY29uc29sZTtcbiAgdmFyIG0gPSBbXG4gICAgXCJsb2dcIixcbiAgICBcImRlYnVnXCIsXG4gICAgXCJpbmZvXCIsXG4gICAgXCJ3YXJuXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiYXNzZXJ0XCIsXG4gICAgXCJkaXJcIixcbiAgICBcImRpcnhtbFwiLFxuICAgIFwidHJhY2VcIixcbiAgICBcImdyb3VwXCIsXG4gICAgXCJncm91cENvbGxhcHNlZFwiLFxuICAgIFwiZ3JvdXBFbmRcIixcbiAgICBcInRpbWVcIixcbiAgICBcInRpbWVFbmRcIixcbiAgXTtcbiAgZnVuY3Rpb24gZigpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dID0gZjtcbiAgcmV0dXJuIGM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlKF91bml0KSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiWE1MSHR0cFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfSBjYXRjaCB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkZhaWxlZCB0byBjcmVhdGUgWE1MSHR0cFJlcXVlc3RcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZiAoZXhuLmpzX2Vycm9yKSB7XG4gICAgcmV0dXJuIGV4bi5qc19lcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNikgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYyxcbiAgICBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBsZXhidWZbbGV4X2J1ZmZlcl07XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IgKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlIC0gMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKSB7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT09IDApIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZSBjID0gMjU2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldChidWZmZXIsIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09PSBzdGF0ZSkgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PT0gLTEpIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChkc3QgPT09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGkrKztcbiAgICBpZiAoc3JjID09PSAweGZmKSBtZW1bZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlIG1lbVtkc3QgKyAxXSA9IG1lbVtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpKys7XG4gICAgaWYgKGRzdCA9PT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaSsrO1xuICAgIGlmIChzcmMgPT09IDB4ZmYpIG1lbVtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2UgbWVtW2RzdCArIDFdID0gbWVtW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5KHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gY2FtbF9sZXhfYXJyYXkodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbClcbiAgICB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLFxuICAgIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGxleGJ1ZltsZXhfYnVmZmVyXTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvciAoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZSAtIDE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSkge1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09PSAwKSByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2UgYyA9IDI1NjtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQoYnVmZmVyLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT09IHN0YXRlKSBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2Ugc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09PSAtMSkgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSxcbiAgICAgICAgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbShcbiAgICAgICAgICB0YmwubGV4X2NvZGUsXG4gICAgICAgICAgcGNfb2ZmLFxuICAgICAgICAgIGxleGJ1ZltsZXhfbWVtXSxcbiAgICAgICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSxcbiAgICAgICAgKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfbHhtX01cbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fTSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZDEzNDI1NDNkZTgyZWY5NVwiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX2RhYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9WZXJzaW9uOiA+PSA1XG52YXIgY2FtbF9seG1fZGFiYSA9IGNhbWxfaW50NjRfb2Zfc3RyaW5nKFxuICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIjB4ZGFiYTBiNmViMDkzMjJlM1wiKSxcbik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbHhtX25leHQgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3hvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbXVsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NldF8xXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9NXG4vL1JlcXVpcmVzOiBjYW1sX2x4bV9kYWJhXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfbHhtX25leHQodikge1xuICBmdW5jdGlvbiBzaGlmdF9sKHgsIGspIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0KHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIHNoaWZ0X3IoeCwgaykge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHgsIGspO1xuICB9XG4gIGZ1bmN0aW9uIG9yKGEsIGIpIHtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9vcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X3hvcihhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBhZGQoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X2FkZChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBtdWwoYSwgYikge1xuICAgIHJldHVybiBjYW1sX2ludDY0X211bChhLCBiKTtcbiAgfVxuICBmdW5jdGlvbiByb3RsKHgsIGspIHtcbiAgICByZXR1cm4gb3Ioc2hpZnRfbCh4LCBrKSwgc2hpZnRfcih4LCA2NCAtIGspKTtcbiAgfVxuICBmdW5jdGlvbiBnZXQoYSwgaSkge1xuICAgIHJldHVybiBjYW1sX2JhX2dldF8xKGEsIGkpO1xuICB9XG4gIGZ1bmN0aW9uIHNldChhLCBpLCB4KSB7XG4gICAgcmV0dXJuIGNhbWxfYmFfc2V0XzEoYSwgaSwgeCk7XG4gIH1cbiAgdmFyIE0gPSBjYW1sX2x4bV9NO1xuICB2YXIgZGFiYSA9IGNhbWxfbHhtX2RhYmE7XG4gIHZhciB6LCBxMCwgcTE7XG4gIHZhciBzdCA9IHY7XG4gIHZhciBhID0gZ2V0KHN0LCAwKTtcbiAgdmFyIHMgPSBnZXQoc3QsIDEpO1xuICB2YXIgeDAgPSBnZXQoc3QsIDIpO1xuICB2YXIgeDEgPSBnZXQoc3QsIDMpO1xuICAvKiBDb21iaW5pbmcgb3BlcmF0aW9uICovXG4gIHogPSBhZGQocywgeDApO1xuICAvKiBNaXhpbmcgZnVuY3Rpb24gKi9cbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IG11bCh4b3Ioeiwgc2hpZnRfcih6LCAzMikpLCBkYWJhKTtcbiAgeiA9IHhvcih6LCBzaGlmdF9yKHosIDMyKSk7XG4gIC8qIExDRyB1cGRhdGUgKi9cbiAgc2V0KHN0LCAxLCBhZGQobXVsKHMsIE0pLCBhKSk7XG4gIC8qIFhCRyB1cGRhdGUgKi9cbiAgdmFyIHEwID0geDA7XG4gIHZhciBxMSA9IHgxO1xuICBxMSA9IHhvcihxMSwgcTApO1xuICBxMCA9IHJvdGwocTAsIDI0KTtcbiAgcTAgPSB4b3IoeG9yKHEwLCBxMSksIHNoaWZ0X2wocTEsIDE2KSk7XG4gIHExID0gcm90bChxMSwgMzcpO1xuICBzZXQoc3QsIDIsIHEwKTtcbiAgc2V0KHN0LCAzLCBxMSk7XG4gIC8qIFJldHVybiByZXN1bHQgKi9cbiAgcmV0dXJuIHo7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlcl90cmFjZVxudmFyIGNhbWxfcGFyc2VyX3RyYWNlID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5LCBjYW1sX3BhcnNlcl90cmFjZSxjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpIHtcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICB2YXIgdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIHZhciB0YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBmdW5jdGlvbiBsb2coeCkge1xuICAgIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4ICsgXCJcXG5cIik7XG4gICAgY2FtbF9tbF9vdXRwdXQoY2FtbF9zeXNfZmRzWzJdLmNoYW5pZCwgcywgMCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuX25hbWUobmFtZXMsIG51bWJlcikge1xuICAgIHZhciBzdHIgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lcyk7XG4gICAgaWYgKHN0clswXSA9PT0gXCJcXHgwMFwiKSByZXR1cm4gXCI8dW5rbm93biB0b2tlbj5cIjtcbiAgICByZXR1cm4gc3RyLnNwbGl0KFwiXFx4MDBcIilbbnVtYmVyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByaW50X3Rva2VuKHN0YXRlLCB0b2spIHtcbiAgICB2YXIgdG9rZW4sIGtpbmQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodG9rKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbl9uYW1lKHRhYmxlc1t0YmxfbmFtZXNfYmxvY2tdLCB0b2tbMF0pO1xuICAgICAgaWYgKHR5cGVvZiB0b2tbMV0gPT09IFwibnVtYmVyXCIpIGtpbmQgPSBcIlwiICsgdG9rWzFdO1xuICAgICAgZWxzZSBpZiAodHlwZW9mIHRva1sxXSA9PT0gXCJzdHJpbmdcIikga2luZCA9IHRva1sxXTtcbiAgICAgIGVsc2UgaWYgKHRva1sxXSBpbnN0YW5jZW9mIE1sQnl0ZXMpIGtpbmQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRva1sxXSk7XG4gICAgICBlbHNlIGtpbmQgPSBcIl9cIjtcbiAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogcmVhZCB0b2tlbiBcIiArIHRva2VuICsgXCIoXCIgKyBraW5kICsgXCIpXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHRva2VuX25hbWUodGFibGVzW3RibF9uYW1lc19jb25zdF0sIHRvayk7XG4gICAgICBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlYWQgdG9rZW4gXCIgKyB0b2tlbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlID0gY2FtbF9sZXhfYXJyYXkodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byA9IGNhbWxfbGV4X2FycmF5KHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLFxuICAgIG4sXG4gICAgbjEsXG4gICAgbjIsXG4gICAgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgdGhlX2xvb3A6IGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGNtZCkge1xuICAgICAgY2FzZSAwOiAvL1NUQVJUOlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDY6IC8vbG9vcDpcbiAgICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgICBpZiAobiAhPT0gMCkge1xuICAgICAgICAgIGNtZCA9IHJlZHVjZTtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHtcbiAgICAgICAgICBjbWQgPSB0ZXN0c2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgICBjYXNlIDE6IC8vVE9LRU5fUkVBRDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgcHJpbnRfdG9rZW4oc3RhdGUsIGFyZyk7XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBjYXNlIDc6IC8vdGVzdHNoaWZ0OlxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6XG4gICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuMSAhPT0gMCAmJlxuICAgICAgICAgIG4yID49IDAgJiZcbiAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09PSBlbnZbZW52X2N1cnJfY2hhcl1cbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kID0gc2hpZnQ7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG4xICE9PSAwICYmXG4gICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT09IGVudltlbnZfY3Vycl9jaGFyXVxuICAgICAgICApIHtcbiAgICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgICBjbWQgPSByZWR1Y2U7XG4gICAgICAgICAgY29udGludWUgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgICAgYnJlYWsgdGhlX2xvb3A7XG4gICAgICAgIH1cbiAgICAgIC8vIGZhbGx0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICAgIGNhc2UgNTogLy9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICAgICAgbjIgPj0gMCAmJlxuICAgICAgICAgICAgICBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gRVJSQ09ERVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiUmVjb3ZlcmluZyBpbiBzdGF0ZSBcIiArIHN0YXRlMSk7XG4gICAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIHRoZV9sb29wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJEaXNjYXJkaW5nIHN0YXRlIFwiICsgc3RhdGUxKTtcbiAgICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiTm8gbW9yZSBzdGF0ZXMgdG8gZGlzY2FyZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7IC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgIGlmIChjYW1sX3BhcnNlcl90cmFjZSkgbG9nKFwiRGlzY2FyZGluZyBsYXN0IHRva2VuIHJlYWRcIik7XG4gICAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgICAgY21kID0gbG9vcDtcbiAgICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gVW5yZWFjaGFibGVcbiAgICAgIGNhc2UgODogLy9zaGlmdDpcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOlxuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgY2FzZSA5OiAvL3NoaWZ0X3JlY292ZXI6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKVxuICAgICAgICAgIGxvZyhcIlN0YXRlIFwiICsgc3RhdGUgKyBcIjogc2hpZnQgdG8gc3RhdGUgXCIgKyB0YWJsZXMudGFibGVbbjJdKTtcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBzcCsrO1xuICAgICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgICAgfVxuICAgICAgLy8gZmFsbHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgICAgY2FzZSAyOiAvL1NUQUNLU19HUk9XTl8xOlxuICAgICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcblxuICAgICAgY2FzZSAxMDogLy9yZWR1Y2U6XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9GYWxsdGhyb3VnaFN3aXRjaENsYXVzZTpcbiAgICAgICAgaWYgKGNhbWxfcGFyc2VyX3RyYWNlKSBsb2coXCJTdGF0ZSBcIiArIHN0YXRlICsgXCI6IHJlZHVjZSBieSBydWxlIFwiICsgbik7XG4gICAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbjEgIT09IDAgJiZcbiAgICAgICAgICBuMiA+PSAwICYmXG4gICAgICAgICAgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PT0gc3RhdGUxXG4gICAgICAgIClcbiAgICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGVsc2Ugc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICAgIGJyZWFrIHRoZV9sb29wO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxsdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgICBjYXNlIDM6IC8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgICBicmVhayB0aGVfbG9vcDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICAgIGNhc2UgNDogLy9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBjbWQgPSBsb29wO1xuICAgICAgICBjb250aW51ZSB0aGVfbG9vcDtcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZXJfdHJhY2VcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZShib29sKSB7XG4gIHZhciBvbGRmbGFnID0gY2FtbF9wYXJzZXJfdHJhY2U7XG4gIGNhbWxfcGFyc2VyX3RyYWNlID0gYm9vbDtcbiAgcmV0dXJuIG9sZGZsYWc7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBIdWdvIEhldXphcmRcbi8vIENvcHlyaWdodCAoQykgMjAyMCAtIFNoYWNoYXIgSXR6aGFreVxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2Jsb2IvNC4wNy9vdGhlcmxpYnMvc3RyL3N0cnN0dWJzLmNcbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2NvcS9qc2NvcS9ibG9iL3Y4LjExL2NvcS1qcy9qc19zdHViL3N0ci5qc1xuXG4vL1Byb3ZpZGVzOiByZV9tYXRjaFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZ2V0XG5cbnZhciByZV9tYXRjaCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZV93b3JkX2xldHRlcnMgPSBbXG4gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCAvKiAweDAwLTB4MUY6IG5vbmUgKi8sIDB4MDAsIDB4MDAsIDB4ZmYsXG4gICAgMHgwMyAvKiAweDIwLTB4M0Y6IGRpZ2l0cyAwLTkgKi8sIDB4ZmUsIDB4ZmYsIDB4ZmYsXG4gICAgMHg4NyAvKiAweDQwLTB4NUY6IEEgdG8gWiwgXyAqLywgMHhmZSwgMHhmZiwgMHhmZixcbiAgICAweDA3IC8qIDB4NjAtMHg3RjogYSB0byB6ICovLCAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4ODAtMHg5Rjogbm9uZSAqLyxcbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIDB4QTAtMHhCRjogbm9uZSAqLywgMHhmZiwgMHhmZiwgMHg3ZixcbiAgICAweGZmIC8qIDB4QzAtMHhERjogTGF0aW4tMSBhY2NlbnRlZCB1cHBlcmNhc2UgKi8sIDB4ZmYsIDB4ZmYsIDB4N2YsXG4gICAgMHhmZiAvKiAweEUwLTB4RkY6IExhdGluLTEgYWNjZW50ZWQgbG93ZXJjYXNlICovLFxuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsXG4gICAgQ0hBUk5PUk06IDEsXG4gICAgU1RSSU5HOiAyLFxuICAgIFNUUklOR05PUk06IDMsXG4gICAgQ0hBUkNMQVNTOiA0LFxuICAgIEJPTDogNSxcbiAgICBFT0w6IDYsXG4gICAgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LFxuICAgIEVOREdST1VQOiA5LFxuICAgIFJFRkdST1VQOiAxMCxcbiAgICBBQ0NFUFQ6IDExLFxuICAgIFNJTVBMRU9QVDogMTIsXG4gICAgU0lNUExFU1RBUjogMTMsXG4gICAgU0lNUExFUExVUzogMTQsXG4gICAgR09UTzogMTUsXG4gICAgUFVTSEJBQ0s6IDE2LFxuICAgIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4LFxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzX3dvcmRfbGV0dGVyKGMpIHtcbiAgICByZXR1cm4gKHJlX3dvcmRfbGV0dGVyc1tjID4+IDNdID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLCBpKSB7XG4gICAgcmV0dXJuIChjYW1sX3N0cmluZ19nZXQocywgaSA+PiAzKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcbiAgICB2YXIgcHJvZyA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsxXSksXG4gICAgICBjcG9vbCA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICBub3JtdGFibGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgIG51bWdyb3VwcyA9IHJlWzRdIHwgMCxcbiAgICAgIG51bXJlZ2lzdGVycyA9IHJlWzVdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgcXVpdCA9IGZhbHNlLFxuICAgICAgc3RhY2sgPSBbXSxcbiAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgcmVfcmVnaXN0ZXIgPSBuZXcgQXJyYXkobnVtcmVnaXN0ZXJzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBncm91cHNbaV0gPSB7IHN0YXJ0OiAtMSwgZW5kOiAtMSB9O1xuICAgIH1cbiAgICBncm91cHNbMF0uc3RhcnQgPSBwb3M7XG5cbiAgICB2YXIgYmFja3RyYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICB2YXIgaXRlbSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS51bmRvKSB7XG4gICAgICAgICAgaXRlbS51bmRvLm9ialtpdGVtLnVuZG8ucHJvcF0gPSBpdGVtLnVuZG8udmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3MpIHtcbiAgICAgICAgICBwYyA9IGl0ZW0ucG9zLnBjO1xuICAgICAgICAgIHBvcyA9IGl0ZW0ucG9zLnR4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1aXQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB2YXIgcHVzaCA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBzdGFjay5wdXNoKGl0ZW0pO1xuICAgIH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGggKiAyKTtcbiAgICAgIHJlc3VsdFswXSA9IDA7IC8vIHRhZ1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGcgPSBncm91cHNbaV07XG4gICAgICAgIGlmIChnLnN0YXJ0IDwgMCB8fCBnLmVuZCA8IDApIHtcbiAgICAgICAgICBnLnN0YXJ0ID0gZy5lbmQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbMiAqIGkgKyAxXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyICogaSArIDEgKyAxXSA9IGcuZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgdmFyIHByZWZpeF9tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwYXJ0aWFsKSByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgIH07XG5cbiAgICAvKiBNYWluIERGQSBpbnRlcnByZXRlciBsb29wICovXG4gICAgd2hpbGUgKCFxdWl0KSB7XG4gICAgICB2YXIgb3AgPSBwcm9nW3BjXSAmIDB4ZmYsXG4gICAgICAgIHNhcmcgPSBwcm9nW3BjXSA+PiA4LFxuICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgIGMgPSBzW3Bvc10sXG4gICAgICAgIGdyb3VwO1xuXG4gICAgICBwYysrO1xuXG4gICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gdWFyZykgcG9zKys7XG4gICAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIQVJOT1JNOlxuICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmVmaXhfbWF0Y2goKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09IGFyZy5jaGFyQ29kZUF0KGkpKSBjID0gc1srK3Bvc107XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBhcmcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGNwb29sW3VhcmddKSwgaSA9IDA7XG4gICAgICAgICAgICBpIDwgYXJnLmxlbmd0aDtcbiAgICAgICAgICAgIGkrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm10YWJsZS5jaGFyQ29kZUF0KGMpID09PSBhcmcuY2hhckNvZGVBdChpKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICAgIGlmIChwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICAgIGlmIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09IDEwIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgYmFja3RyYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuV09SREJPVU5EQVJZOlxuICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHByZWZpeF9tYXRjaCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzWzBdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9PSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkJFR0dST1VQOlxuICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICAgIHB1c2goeyB1bmRvOiB7IG9iajogZ3JvdXAsIHByb3A6IFwic3RhcnRcIiwgdmFsdWU6IGdyb3VwLnN0YXJ0IH0gfSk7XG4gICAgICAgICAgZ3JvdXAuc3RhcnQgPSBwb3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgICBwdXNoKHsgdW5kbzogeyBvYmo6IGdyb3VwLCBwcm9wOiBcImVuZFwiLCB2YWx1ZTogZ3JvdXAuZW5kIH0gfSk7XG4gICAgICAgICAgZ3JvdXAuZW5kID0gcG9zO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgICAgaWYgKGdyb3VwLnN0YXJ0IDwgMCB8fCBncm91cC5lbmQgPCAwKSB7XG4gICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNbaV0gIT09IHNbcG9zXSkge1xuICAgICAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSkgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuU0lNUExFUExVUzpcbiAgICAgICAgICBpZiAocG9zID09PSBzLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJlZml4X21hdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgICAgfSBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICAgIHJldHVybiBhY2NlcHQoKTtcbiAgICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgICBwdXNoKHsgcG9zOiB7IHBjOiBwYyArIHNhcmcsIHR4dDogcG9zIH0gfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Ugb3Bjb2Rlcy5TRVRNQVJLOlxuICAgICAgICAgIHB1c2goe1xuICAgICAgICAgICAgdW5kbzogeyBvYmo6IHJlX3JlZ2lzdGVyLCBwcm9wOiB1YXJnLCB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ10gfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBvcGNvZGVzLkNIRUNLUFJPR1JFU1M6XG4gICAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KSgpO1xuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19nZXRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9mb3J3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKTtcbiAgdmFyIHN0YXJ0Y2hhcnMgPSByZVs2XSB8IDA7XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIGlmIChzdGFydGNoYXJzID49IDApIHtcbiAgICBzdGFydGNoYXJzID0gcmVbMl1bc3RhcnRjaGFycyArIDFdO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zIDwgbGVuICYmXG4gICAgICAgIGNhbWxfc3RyaW5nX2dldChzdGFydGNoYXJzLCBjYW1sX3N0cmluZ19nZXQocywgcG9zKSkgPT09IDBcbiAgICAgIClcbiAgICAgICAgcG9zKys7XG4gICAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgICAgcG9zKys7XG4gICAgfSB3aGlsZSAocG9zIDw9IGxlbik7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcysrO1xuICAgIH0gd2hpbGUgKHBvcyA8PSBsZW4pO1xuICB9XG4gIHJldHVybiBbMF07IC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuZnVuY3Rpb24gcmVfc2VhcmNoX2JhY2t3YXJkKHJlLCBzLCBwb3MpIHtcbiAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIik7XG4gIHZhciBzdGFydGNoYXJzID0gcmVbNl0gfCAwO1xuICBpZiAoc3RhcnRjaGFycyA+PSAwKSB7XG4gICAgc3RhcnRjaGFycyA9IHJlWzJdW3N0YXJ0Y2hhcnMgKyAxXTtcbiAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICAgIGRvIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgcG9zID4gMCAmJlxuICAgICAgICBwb3MgPCBsZW4gJiZcbiAgICAgICAgY2FtbF9zdHJpbmdfZ2V0KHN0YXJ0Y2hhcnMsIGNhbWxfc3RyaW5nX2dldChzLCBwb3MpKSA9PT0gMFxuICAgICAgKVxuICAgICAgICBwb3MtLTtcbiAgICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBwb3MtLTtcbiAgICB9IHdoaWxlIChwb3MgPj0gMCk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIHBvcy0tO1xuICAgIH0gd2hpbGUgKHBvcyA+PSAwKTtcbiAgfVxuICByZXR1cm4gWzBdOyAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUsIHMsIHBvcykge1xuICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3BhcnRpYWxfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfcGFydGlhbF9tYXRjaChyZSwgcywgcG9zKSB7XG4gIGlmIChwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKTtcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCwgZ3JvdXBzLCBvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlIChuIDwgbGVuKSB7XG4gICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICBpZiAoY3VyICE9PSBcIlxcXFxcIikge1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG4gPT09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2ggKGN1cikge1xuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6XG4gICAgICAgIGNhc2UgXCIxXCI6XG4gICAgICAgIGNhc2UgXCIyXCI6XG4gICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgIGNhc2UgXCI1XCI6XG4gICAgICAgIGNhc2UgXCI2XCI6XG4gICAgICAgIGNhc2UgXCI3XCI6XG4gICAgICAgIGNhc2UgXCI4XCI6XG4gICAgICAgIGNhc2UgXCI5XCI6XG4gICAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgICAgaWYgKGMgKiAyID49IGdyb3Vwcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMik7XG4gICAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjICogMiArIDEpO1xuICAgICAgICAgIGlmIChzdGFydCA9PT0gLTEpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IHJlZmVyZW5jZSB0byB1bm1hdGNoZWQgZ3JvdXBcIik7XG4gICAgICAgICAgcmVzICs9IG9yaWcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzICs9IFwiXFxcXFwiICsgY3VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpO1xufVxuIl0sIm5hbWVzIjpbImNzdF9PdXRfb2ZfbWVtb3J5IiwiY3N0X1N5c19lcnJvciIsImNzdF9GYWlsdXJlIiwiY3N0X0ludmFsaWRfYXJndW1lbnQiLCJjc3RfRW5kX29mX2ZpbGUiLCJjc3RfRGl2aXNpb25fYnlfemVybyIsImNzdF9Ob3RfZm91bmQiLCJjc3RfTWF0Y2hfZmFpbHVyZSIsImNzdF9TdGFja19vdmVyZmxvdyIsImNzdF9TeXNfYmxvY2tlZF9pbyIsImNzdF9Bc3NlcnRfZmFpbHVyZSIsImNzdF9VbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBQTtBQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUE7QUFBQSxRQUFBO0FBQUEsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBO0FBQUEsSUFBQTtBQUFBLElBQUE7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O0FBQUE7QUFBQTtBQUFBLFdBR3FCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FNUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFlRyxlQUNkLHVCQUNFLFlBQVksQ0FESDtBQUFBLGFBT0g7QUFBQSxhQUNBO0FBQUE7QUFBQSxpQkFFRjtBQUFBLFNBR047QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBO0FBQUEsU0FJRjtBQUFBLFNBQ0E7QUFBQSxTQUlBLFNBQ0UsaUJBQ0E7QUFBQSxTQUlGLHdCQUF5QixPQUNoQjtBQUFBLFNBTVQ7QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBO0FBQUEsU0FHRix3QkFBeUI7QUFBQSxRQUczQjtBQUFBO0FBQUE7QUFBQSxXQUd1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBdUVyQjtBQUFBLFVBQWlDLE1BQ3pCO0FBQUEsU0FFUjtBQUFBLFVBQXFCLE1BQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBSUUsSUFDTDtBQUFBLGdCQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FPTDtBQUFBLFNBQ0E7QUFBQSxTQUNBO0FBQUEsU0FDQTtBQUFBLFNBQ0E7QUFBQSxTQUdBLFlBQVc7QUFBQSxVQUFrQiw2QkFDRTtBQUFBLFNBRy9CLG1CQUNFLHlCQUVBO0FBQUEsU0FHRixVQUFVO0FBQUEsUUFDWjtBQUFBO0FBQUEsU0FLRSxZQUFXO0FBQUEsVUFDVDtBQUFBLFdBRUU7QUFBQSxXQUNBO0FBQUEsV0FDQTtBQUFBO0FBQUEsVUFFRjtBQUFBO0FBQUEsUUFFSjtBQUFBO0FBQUEsU0FLRTtBQUFBLFNBRUEsbUJBQW9CO0FBQUEsU0FJcEI7QUFBQSxxQkFHWTtBQUFBLFNBQ1osWUFBVztBQUFBLFVBQTBCO0FBQUEsU0FHckMsVUFBVTtBQUFBLFFBQ1o7QUFBQSxRQUNBLHNFQUF3RTtBQUFBLE9BM1MzRDtBQUFBLE9BQUQ7QUFBQTtBQUFBLElKa0VaLFlBQVcsaUJBQW1CO0FBQUEsSUFHOUIsUUFBUTtBQUFBLEdBQ1Y7QUFBQTtBQUFBO0FBQUEsTUtqQndCO0FBQUEsMkJBRXBCLGdCQUFrQixDQUNwQjtBQUFBO0FBQUEsU0FFRSxJQUFJLElBQUksV0FBVztBQUFBLFNBQ25CLE9BQU8sNkJBQW1DO0FBQUEsUUFDNUM7QUFBQTtBQUFBLFNBRUUsT0FBTyxrQ0FBcUM7QUFBQSxRQUM5QztBQUFBO0FBQUEsU0FFRSxPQUFPLGtDQUFxQztBQUFBLFFBQzlDO0FBQUEseUNBRUUsT0FBTyw0QkFBNEIsQ0FDckM7QUFBQTtBQUFBLFNBRUUsT0FBTyxnQ0FBK0I7QUFBQSxRQUN4QztBQUFBLFFBRUE7QUFBQSxpQkFDUSxVQUNGLFVBQ0EsVUFDQTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBQ0osSUFBSTtBQUFBLFNBRUosT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTztBQUFBLFNBQ1AsT0FBTyxhQTdFRixDQThFTjtBQUFBLE9BbkdzQjtBQUFBLE9BQUQ7QUFB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0p6YUE7QUFBQSxPQUFBQSxvQkFBQTtBQUFBO0FBQUEsT0FBQUMsZ0JBQUE7QUFBQTtBQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBLE9BQUFDLHVCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUFDLGtCQUFBO0FBQUE7QUFBQSxPQUFBQyx1QkFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxnQkFBQTtBQUFBO0FBQUEsT0FBQUMsb0JBQUE7QUFBQTtBQUFBLE9BQUFDLHFCQUFBO0FBQUE7QUFBQSxPQUFBQyxxQkFBQTtBQUFBO0FBQUEsT0FBQUMscUJBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQUMsaUNBQUEiLCJpZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOF19fSx7Im9mZnNldCI6eyJsaW5lIjo5MzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJlcmFzZV9yZWwiLCJwYXJhbSIsInJlc3QiLCJ0eSIsInR5MSIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInByZWMiLCJpY29udiIsImZjb252Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwiY291bnRlciIsImlnbiIsImYiLCJhcml0eSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxVQUFBQztBQUFBQSxJQytnQlEsOEJBa0NZO0FBQUEsSUFsQ1o7QUFBQTtBQUFBLFdBQUFDLE9BQUEsVUFLSSwyQkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBTHBCLFVBT00sNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQVB0QixVQVNHLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FUbkIsVUFXSyw2QkFBZ0I7QUFBQTtBQUFBLFdBQUFBLFNBWHJCLFVBZVMsNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWZ6QixVQWFLLDZCQUFnQjtBQUFBO0FBQUEsV0FBQUEsU0FickIsVUFpQkssNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQWpCckIsVUFtQkksNkJBQWdCO0FBQUE7QUFBQSxXQUFBQSxTQW5CcEIsVUFBQUMsS0FBQTtBQUFBLE9BcUJlLGlDQUFjO0FBQUE7QUFBQSxXQUFBRCxTQXJCN0IsVUFBQUUsTUFBQTtBQUFBLE9BdUJ1Qix1Q0FBYztBQUFBO0FBQUEsV0FBQUYsU0F2QnJDLFVBeUJLLDhCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUF6QnJCLFVBMkJLLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUEzQnJCLFVBNkJHLCtCQUFnQjtBQUFBO0FBQUEsV0FBQUEsVUE3Qm5CLFVBK0JNLCtCQUFnQjtBQUFBLG1CQUFBQSxVQS9CdEIsVUFpQ2Ms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QUEsT0F3RGUsa0RBQW9CO0FBQUE7QUFBQSxXQUFBbEIsVUF4RG5DLFNBOEJOLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUE5QmhCLFNBQUFtQixXQUFBLFNBQUFDLFlBQUE7QUFBQSxPQTZDdUIsMkRBQW9CO0FBQUE7QUFBQSxXQUFBcEIsVUE3QzNDLFNBQUFxQixVQUFBO0FBQUEsT0ErQ2MsK0NBQW9CO0FBQUE7QUFBQSxXQUFBckIsVUEvQ2xDLFNBaURFLHNDQUFzQjtBQUFBO0FBQUEsV0FBQUEsVUFqRHhCLFNBQUFzQixNQUFBO0FBQUEsT0FtRE8sMkNBQW9CO0FBQUE7QUFBQSxXQUFBdEIsVUFuRDNCLFNBQUF1QixJQUFBLFNBQUFDLFFBQUE7QUFBQSxPQTRCSyxnREFBb0I7QUFBQTtBQUFBLEdBK0JsQztBQUFBLEdEanJCUiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjk0ODksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RkbGliLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GOF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgaDEgOjogW10gLT4gaDEgOjogbDJcbiAgfCBoMSA6OiBoMiA6OiBbXSAtPiBoMSA6OiBoMiA6OiBsMlxuICB8IGgxIDo6IGgyIDo6IGgzIDo6IHRsIC0+IGgxIDo6IGgyIDo6IGgzIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxuKCogZm9yIGF0X2V4aXQgKilcbnR5cGUgJ2EgYXRvbWljX3RcbmV4dGVybmFsIGF0b21pY19tYWtlIDogJ2EgLT4gJ2EgYXRvbWljX3QgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCBhdG9taWNfZ2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgPSBcIiVhdG9taWNfbG9hZFwiXG5leHRlcm5hbCBhdG9taWNfY29tcGFyZV9hbmRfc2V0IDogJ2EgYXRvbWljX3QgLT4gJ2EgLT4gJ2EgLT4gYm9vbFxuICA9IFwiJWF0b21pY19jYXNcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IGF0b21pY19tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gYXRvbWljX21ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBhdG9taWNfY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2RvbWFpbl9sb2NhbF9hdF9leGl0ID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgKCFkb19kb21haW5fbG9jYWxfYXRfZXhpdCkgKCk7XG4gIChhdG9taWNfZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICAgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICAgID0gQ29tcGxleFxubW9kdWxlIENvbmRpdGlvbiAgICAgID0gQ29uZGl0aW9uXG5tb2R1bGUgRGlnZXN0ICAgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBEb21haW4gICAgICAgICA9IERvbWFpblxubW9kdWxlIER5bmFycmF5ICAgICAgID0gRHluYXJyYXlcbm1vZHVsZSBFZmZlY3QgICAgICAgICA9IEVmZmVjdFxubW9kdWxlIEVpdGhlciAgICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgICA9IEdjXG5tb2R1bGUgSGFzaHRibCAgICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBNdXRleCAgICAgICAgICA9IE11dGV4XG5tb2R1bGUgTmF0aXZlaW50ICAgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICAgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQcmludGV4YyAgICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZW1hcGhvcmUgICAgICA9IFNlbWFwaG9yZVxubW9kdWxlIFNlcSAgICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJpbmcgICAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyAgID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgICAgPSBTeXNcbm1vZHVsZSBUeXBlICAgICAgICAgICA9IFR5cGVcbm1vZHVsZSBVY2hhciAgICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgICAgPSBXZWFrXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2NhcyIsImNhbWxfYXRvbWljX2xvYWQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9mbHVzaCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb25jYXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX29wZW4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImdsb2JhbF9kYXRhIiwiQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzIiwiSW52YWxpZF9hcmd1bWVudCIsIkZhaWx1cmUiLCJNYXRjaF9mYWlsdXJlIiwiQXNzZXJ0X2ZhaWx1cmUiLCJOb3RfZm91bmQiLCJPdXRfb2ZfbWVtb3J5IiwiU3RhY2tfb3ZlcmZsb3ciLCJTeXNfZXJyb3IiLCJFbmRfb2ZfZmlsZSIsIkRpdmlzaW9uX2J5X3plcm8iLCJTeXNfYmxvY2tlZF9pbyIsIlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJFeGl0IiwibWluIiwieCIsInkiLCJtYXgiLCJhYnMiLCJsbm90IiwiY2hhcl9vZl9pbnQiLCJuIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsInBhcmFtIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwiZXhuIiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJzMSIsImwiLCJpIiwibWF0Y2giLCJzdHJpbmdfb2ZfZmxvYXQiLCJmbG9hdF9vZl9zdHJpbmdfb3B0Iiwic3ltYm9sIiwibDEiLCJsMiIsImgxIiwiaDIiLCJ0bCIsImgzIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsIm1vZGUiLCJwZXJtIiwibmFtZSIsImMiLCJvcGVuX291dCIsIm9wZW5fb3V0X2JpbiIsImZsdXNoX2FsbCIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsInYiLCJjbG9zZV9vdXQiLCJjbG9zZV9vdXRfbm9lcnIiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJvcGVuX2luX2JpbiIsImlucHV0IiwiaWMiLCJ1bnNhZmVfcmVhbGx5X2lucHV0IiwiciIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwicG9zIiwiaGQiLCJhY2N1IiwiYmVnIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN0ciIsInN0cjIiLCJmbXQyIiwic3RyMSIsImZtdDEiLCJzMiIsImV4aXRfZnVuY3Rpb24iLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4iLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19kb21haW5fbG9jYWxfYXRfZXhpdCIsImRvX2F0X2V4aXQiLCJleGl0IiwicmV0Y29kZSIsIlN0ZGxpYiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHFCQUFB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJrQi9EIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6OTk1NywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zeXMubWwuaW4iXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBAY29uZmlndXJlX2lucHV0QCAqKVxuIzMgXCJzeXMubWwuaW5cIlxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGJhY2tlbmRfdHlwZSA9XG4gIHwgTmF0aXZlXG4gIHwgQnl0ZWNvZGVcbiAgfCBPdGhlciBvZiBzdHJpbmdcbigqIFN5c3RlbSBpbnRlcmZhY2UgKilcblxuZXh0ZXJuYWwgZ2V0X2NvbmZpZzogdW5pdCAtPiBzdHJpbmcgKiBpbnQgKiBib29sID0gXCJjYW1sX3N5c19nZXRfY29uZmlnXCJcbmV4dGVybmFsIGdldF9leGVjdXRhYmxlX25hbWUgOiB1bml0IC0+IHN0cmluZyA9IFwiY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lXCJcbmV4dGVybmFsIGFyZ3YgOiBzdHJpbmcgYXJyYXkgPSBcIiVzeXNfYXJndlwiXG5leHRlcm5hbCBiaWdfZW5kaWFuIDogdW5pdCAtPiBib29sID0gXCIlYmlnX2VuZGlhblwiXG5leHRlcm5hbCB3b3JkX3NpemUgOiB1bml0IC0+IGludCA9IFwiJXdvcmRfc2l6ZVwiXG5leHRlcm5hbCBpbnRfc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlaW50X3NpemVcIlxuZXh0ZXJuYWwgbWF4X3dvc2l6ZSA6IHVuaXQgLT4gaW50ID0gXCIlbWF4X3dvc2l6ZVwiXG5leHRlcm5hbCB1bml4IDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX3VuaXhcIlxuZXh0ZXJuYWwgd2luMzIgOiB1bml0IC0+IGJvb2wgPSBcIiVvc3R5cGVfd2luMzJcIlxuZXh0ZXJuYWwgY3lnd2luIDogdW5pdCAtPiBib29sID0gXCIlb3N0eXBlX2N5Z3dpblwiXG5leHRlcm5hbCBnZXRfYmFja2VuZF90eXBlIDogdW5pdCAtPiBiYWNrZW5kX3R5cGUgPSBcIiViYWNrZW5kX3R5cGVcIlxuXG5sZXQgZXhlY3V0YWJsZV9uYW1lID0gZ2V0X2V4ZWN1dGFibGVfbmFtZSgpXG5sZXQgKG9zX3R5cGUsIF8sIF8pID0gZ2V0X2NvbmZpZygpXG5sZXQgYmFja2VuZF90eXBlID0gZ2V0X2JhY2tlbmRfdHlwZSAoKVxubGV0IGJpZ19lbmRpYW4gPSBiaWdfZW5kaWFuICgpXG5sZXQgd29yZF9zaXplID0gd29yZF9zaXplICgpXG5sZXQgaW50X3NpemUgPSBpbnRfc2l6ZSAoKVxubGV0IHVuaXggPSB1bml4ICgpXG5sZXQgd2luMzIgPSB3aW4zMiAoKVxubGV0IGN5Z3dpbiA9IGN5Z3dpbiAoKVxubGV0IG1heF9hcnJheV9sZW5ndGggPSBtYXhfd29zaXplICgpXG5sZXQgbWF4X2Zsb2F0YXJyYXlfbGVuZ3RoID0gbWF4X2FycmF5X2xlbmd0aCAvICg2NCAvIHdvcmRfc2l6ZSlcbmxldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMVxuZXh0ZXJuYWwgcnVudGltZV92YXJpYW50IDogdW5pdCAtPiBzdHJpbmcgPSBcImNhbWxfcnVudGltZV92YXJpYW50XCJcbmV4dGVybmFsIHJ1bnRpbWVfcGFyYW1ldGVycyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1wiXG5cbmV4dGVybmFsIGZpbGVfZXhpc3RzOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfZmlsZV9leGlzdHNcIlxuZXh0ZXJuYWwgaXNfZGlyZWN0b3J5IDogc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3lzX2lzX2RpcmVjdG9yeVwiXG5leHRlcm5hbCBpc19yZWd1bGFyX2ZpbGUgOiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXCJcbmV4dGVybmFsIHJlbW92ZTogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbW92ZVwiXG5leHRlcm5hbCByZW5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfc3lzX3JlbmFtZVwiXG5leHRlcm5hbCBnZXRlbnY6IHN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfc3lzX2dldGVudlwiXG5cbmxldCBnZXRlbnZfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChnZXRlbnYgcylcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5leHRlcm5hbCBjb21tYW5kOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFwiXG5leHRlcm5hbCB0aW1lOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9zeXNfdGltZVwiIFwiY2FtbF9zeXNfdGltZV91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGNoZGlyOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2hkaXJcIlxuZXh0ZXJuYWwgbWtkaXI6IHN0cmluZyAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfbWtkaXJcIlxuZXh0ZXJuYWwgcm1kaXI6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3N5c19ybWRpclwiXG5leHRlcm5hbCBnZXRjd2Q6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX3N5c19nZXRjd2RcIlxuZXh0ZXJuYWwgcmVhZGRpciA6IHN0cmluZyAtPiBzdHJpbmcgYXJyYXkgPSBcImNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XCJcblxubGV0IGludGVyYWN0aXZlID0gcmVmIGZhbHNlXG5cbnR5cGUgc2lnbmFsX2JlaGF2aW9yID1cbiAgICBTaWduYWxfZGVmYXVsdFxuICB8IFNpZ25hbF9pZ25vcmVcbiAgfCBTaWduYWxfaGFuZGxlIG9mIChpbnQgLT4gdW5pdClcblxuZXh0ZXJuYWwgc2lnbmFsIDogaW50IC0+IHNpZ25hbF9iZWhhdmlvciAtPiBzaWduYWxfYmVoYXZpb3JcbiAgICAgICAgICAgICAgICA9IFwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyXCJcblxubGV0IHNldF9zaWduYWwgc2lnX251bSBzaWdfYmVoID0gaWdub3JlKHNpZ25hbCBzaWdfbnVtIHNpZ19iZWgpXG5cbmxldCBzaWdhYnJ0ID0gLTFcbmxldCBzaWdhbHJtID0gLTJcbmxldCBzaWdmcGUgPSAtM1xubGV0IHNpZ2h1cCA9IC00XG5sZXQgc2lnaWxsID0gLTVcbmxldCBzaWdpbnQgPSAtNlxubGV0IHNpZ2tpbGwgPSAtN1xubGV0IHNpZ3BpcGUgPSAtOFxubGV0IHNpZ3F1aXQgPSAtOVxubGV0IHNpZ3NlZ3YgPSAtMTBcbmxldCBzaWd0ZXJtID0gLTExXG5sZXQgc2lndXNyMSA9IC0xMlxubGV0IHNpZ3VzcjIgPSAtMTNcbmxldCBzaWdjaGxkID0gLTE0XG5sZXQgc2lnY29udCA9IC0xNVxubGV0IHNpZ3N0b3AgPSAtMTZcbmxldCBzaWd0c3RwID0gLTE3XG5sZXQgc2lndHRpbiA9IC0xOFxubGV0IHNpZ3R0b3UgPSAtMTlcbmxldCBzaWd2dGFscm0gPSAtMjBcbmxldCBzaWdwcm9mID0gLTIxXG5sZXQgc2lnYnVzID0gLTIyXG5sZXQgc2lncG9sbCA9IC0yM1xubGV0IHNpZ3N5cyA9IC0yNFxubGV0IHNpZ3RyYXAgPSAtMjVcbmxldCBzaWd1cmcgPSAtMjZcbmxldCBzaWd4Y3B1ID0gLTI3XG5sZXQgc2lneGZzeiA9IC0yOFxuXG5leGNlcHRpb24gQnJlYWtcblxubGV0IGNhdGNoX2JyZWFrIG9uID1cbiAgaWYgb24gdGhlblxuICAgIHNldF9zaWduYWwgc2lnaW50IChTaWduYWxfaGFuZGxlKGZ1biBfIC0+IHJhaXNlIEJyZWFrKSlcbiAgZWxzZVxuICAgIHNldF9zaWduYWwgc2lnaW50IFNpZ25hbF9kZWZhdWx0XG5cblxuZXh0ZXJuYWwgZW5hYmxlX3J1bnRpbWVfd2FybmluZ3M6IGJvb2wgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1wiXG5leHRlcm5hbCBydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQ6IHVuaXQgLT4gYm9vbCA9XG4gIFwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcIlxuXG4oKiBUaGUgdmVyc2lvbiBzdHJpbmcgaXMgZm91bmQgaW4gZmlsZSAuLi9WRVJTSU9OICopXG5cbmxldCBvY2FtbF92ZXJzaW9uID0gXCJAVkVSU0lPTkBcIlxuXG5sZXQgZGV2ZWxvcG1lbnRfdmVyc2lvbiA9IEBPQ0FNTF9ERVZFTE9QTUVOVF9WRVJTSU9OQFxuXG50eXBlIGV4dHJhX3ByZWZpeCA9IFBsdXMgfCBUaWxkZVxuXG50eXBlIGV4dHJhX2luZm8gPSBleHRyYV9wcmVmaXggKiBzdHJpbmdcblxudHlwZSBvY2FtbF9yZWxlYXNlX2luZm8gPSB7XG4gIG1ham9yIDogaW50O1xuICBtaW5vciA6IGludDtcbiAgcGF0Y2hsZXZlbCA6IGludDtcbiAgZXh0cmEgOiBleHRyYV9pbmZvIG9wdGlvblxufVxuXG5sZXQgb2NhbWxfcmVsZWFzZSA9IHtcbiAgbWFqb3IgPSBAT0NBTUxfVkVSU0lPTl9NQUpPUkA7XG4gIG1pbm9yID0gQE9DQU1MX1ZFUlNJT05fTUlOT1JAO1xuICBwYXRjaGxldmVsID0gQE9DQU1MX1ZFUlNJT05fUEFUQ0hMRVZFTEA7XG4gIGV4dHJhID0gQE9DQU1MX1JFTEVBU0VfRVhUUkFAXG59XG5cbigqIE9wdGltaXphdGlvbiAqKVxuXG5leHRlcm5hbCBvcGFxdWVfaWRlbnRpdHkgOiAnYSAtPiAnYSA9IFwiJW9wYXF1ZVwiXG5cbm1vZHVsZSBJbW1lZGlhdGU2NCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBOb25faW1tZWRpYXRlID0gc2lnXG4gICAgdHlwZSB0XG4gIGVuZFxuICBtb2R1bGUgdHlwZSBJbW1lZGlhdGUgPSBzaWdcbiAgICB0eXBlIHQgW0BAaW1tZWRpYXRlXVxuICBlbmRcblxuICBtb2R1bGUgTWFrZShJbW1lZGlhdGUgOiBJbW1lZGlhdGUpKE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlKSA9IHN0cnVjdFxuICAgIHR5cGUgdCBbQEBpbW1lZGlhdGU2NF1cbiAgICB0eXBlICdhIHJlcHIgPVxuICAgICAgfCBJbW1lZGlhdGUgOiBJbW1lZGlhdGUudCByZXByXG4gICAgICB8IE5vbl9pbW1lZGlhdGUgOiBOb25faW1tZWRpYXRlLnQgcmVwclxuICAgIGV4dGVybmFsIG1hZ2ljIDogXyByZXByIC0+IHQgcmVwciA9IFwiJWlkZW50aXR5XCJcbiAgICBsZXQgcmVwciA9XG4gICAgICBpZiB3b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIG1hZ2ljIEltbWVkaWF0ZVxuICAgICAgZWxzZVxuICAgICAgICBtYWdpYyBOb25faW1tZWRpYXRlXG4gIGVuZFxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJTdGRsaWIiLCJleGVjdXRhYmxlX25hbWUiLCJvc190eXBlIiwidW5peCIsIndpbjMyIiwiY3lnd2luIiwibWF4X2FycmF5X2xlbmd0aCIsIm1heF9mbG9hdGFycmF5X2xlbmd0aCIsIm1heF9zdHJpbmdfbGVuZ3RoIiwiZ2V0ZW52X29wdCIsInMiLCJleG4iLCJzZXRfc2lnbmFsIiwic2lnX251bSIsInNpZ19iZWgiLCJCcmVhayIsImNhdGNoX2JyZWFrIiwib24iLCJNYWtlIiwiSW1tZWRpYXRlIiwiTm9uX2ltbWVkaWF0ZSIsIlN0ZGxpYl9TeXMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxrQkNtQ3NCO0FBQUEsSUFBQUMsVUFDQTtBQUFBLElBQUFDLE9BQVk7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLFlBQUFDLFdBQUFDO0FBQUFBLElBdUJoQyxZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQzRFg7QUFBQSwyQkM0RG9CO0FBQUEsS0Q1RHBCO0FBQUE7QUFBQSxHQzREd0I7QUFBQSxZQUFBQyxXQUFBQyxTQUFBQyxTQXFCdUM7QUFBQSxPQUFBQyxRQTdDN0I7QUFBQSxZQUFBQyxZQUFBQyxJQStFaEMsaUJBR2tDO0FBQUEsWUFBQUMsS0FBQUMsV0FBQUMsZUFzRDVCO0FBQUE7QUFBQSxJQUFBQztBQUFBQSxNQXhJMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwQ2xDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAwNDYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb2JqLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQzXG5cbmxldCBmb3JjaW5nX3RhZyA9IDI0NFxubGV0IGNvbnRfdGFnID0gMjQ1XG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCJcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX29ial90YWciLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9TeXMiLCJpc19ibG9jayIsImEiLCJkb3VibGVfZmllbGQiLCJ4IiwiaSIsInNldF9kb3VibGVfZmllbGQiLCJ2Iiwib2ZfdmFsIiwic2xvdCIsImNzdF9PYmpfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwibmFtZSIsImlkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibCIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwiZSIsIm8iLCJtc2ciLCJnZXRfa2V5IiwiZ2V0X2tleV9jb3B5Iiwic2V0X2tleSIsInVuc2V0X2tleSIsImNoZWNrX2tleSIsImJsaXRfa2V5IiwiZTEiLCJvMSIsImUyIiwibzIiLCJTdGRsaWJfT2JqIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLFNBQUFDLEdDeUJrQyxtQ0FBYztBQUFBLFlBQUFDLGFBQUFDLEdBQUFDLEdBU1Isb0NBQXFDO0FBQUEsWUFBQUMsaUJBQUFGLEdBQUFDLEdBQUFFO0FBQUFBLElBRTNFO0FBQUEsSUFBdUM7QUFBQTtBQUFBLFlBQUFDLE9BQUFKO0FBQUFBO0FBQUFBLEtBQUFLO0FBQUFBLE9Bd0NoQztBQUFBLFVBQWdCO0FBQUE7QUFBQSxLQUFBQyxnQ0Q1RXpCO0FBQUE7QUFBQTtBQUFBLEtDZ0ZTLHFCQUFtQixnQ0FBQUMsT0FBeUM7QUFBQSxTQUFBQSxPQUMxRDtBQUFBO0FBQUEsSUFFRjtBQUFBO0FBQUEsY0FDRSxtREFBdUM7QUFBQTtBQUFBLFlBQUFBLEtBQUFGLE1BR3BCO0FBQUEsWUFBQUcsR0FBQUgsTUFHQTtBQUFBLE9BQUFJLGtCRDFGOUI7QUFBQSxZQUFBQyxPQUFBQztBQUFBQSxRQUFBLElDd0dJO0FBQUEsY0FDRTtBQUFBLElBQ0Ysa0NBQVE7QUFBQTtBQUFBLFlBQUFDLE9BQUFaLEdBRUssd0JBQWdDO0FBQUEsWUFBQWEsd0JBQUFDLEdBQUFDLEdBQUFDO0FBQUFBLFFBQUEsSUFHN0Msb0JBQXNCLG1CQUF0QjtBQUFBLGVBQ0UsNkJBQWU7QUFBQTtBQUFBLFlBQUFDLFFBQUFILEdBQUFDO0FBQUFBLElBSWpCO0FBQUEsSUFDQSxzQ0FBVztBQUFBO0FBQUEsWUFBQUcsYUFBQUosR0FBQUM7QUFBQUEsSUFJWDtBQUFBLElBQ0EsMkNBQWdCO0FBQUE7QUFBQSxZQUFBSSxRQUFBTCxHQUFBQyxHQUFBZjtBQUFBQSxJQUloQjtBQUFBLElBQ0EseUNBQWE7QUFBQTtBQUFBLFlBQUFvQixVQUFBTixHQUFBQztBQUFBQSxJQUliO0FBQUEsSUFDQSx3Q0FBYTtBQUFBO0FBQUEsWUFBQU0sVUFBQVAsR0FBQUM7QUFBQUEsSUFJYjtBQUFBLElBQ0Esd0NBQWE7QUFBQTtBQUFBLFlBQUFPLFNBQUFDLElBQUFDLElBQUFDLElBQUFDLElBQUFmO0FBQUFBLElBTWI7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUEyQix5Q0FDTjtBQUFBO0FBQUEsVUFFaEI7QUFBQSxjQUFlO0FBQUEsS0FBZjtBQUFBO0FBQUEsSUFEQSxxREFDcUM7QUFBQTtBQUFBO0FBQUEsSUFBQWdCO0FBQUFBLE1EbEo5QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMTcyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2F0b21pYy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICBTdGVwaGVuIERvbGFuLCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTctMjAxOCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBtYWtlIDogJ2EgLT4gJ2EgdCA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsIG1ha2VfY29udGVuZGVkIDogJ2EgLT4gJ2EgdCA9IFwiY2FtbF9hdG9taWNfbWFrZV9jb250ZW5kZWRcIlxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiAnYSA9IFwiJWF0b21pY19sb2FkXCJcbmV4dGVybmFsIGV4Y2hhbmdlIDogJ2EgdCAtPiAnYSAtPiAnYSA9IFwiJWF0b21pY19leGNoYW5nZVwiXG5leHRlcm5hbCBjb21wYXJlX2FuZF9zZXQgOiAnYSB0IC0+ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVhdG9taWNfY2FzXCJcbmV4dGVybmFsIGZldGNoX2FuZF9hZGQgOiBpbnQgdCAtPiBpbnQgLT4gaW50ID0gXCIlYXRvbWljX2ZldGNoX2FkZFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxubGV0IHNldCByIHggPSBpZ25vcmUgKGV4Y2hhbmdlIHIgeClcbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYXRvbWljX2V4Y2hhbmdlIiwiY2FtbF9hdG9taWNfZmV0Y2hfYWRkIiwic2V0IiwiciIsIngiLCJpbmNyIiwiZGVjciIsIlN0ZGxpYl9BdG9taWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLFlBQUFDLElBQUFDLEdBQUFDLEdDd0JjLHFDQUFxQjtBQUFBLFlBQUFDLEtBQUFGLEdBQ3RCLHNDQUEwQjtBQUFBLFlBQUFHLEtBQUFILEdBQzFCLHVDQUE2QjtBQUFBO0FBQUEsSUFBQUk7QUFBQUEsTUQxQjFDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAyMDEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbigqIFt1cGRhdGVfdG9fZm9yY2luZyBibGtdIHRyaWVzIHRvIHVwZGF0ZSBhIFtibGtdIHdpdGggW2xhenlfdGFnXSB0b1xuICAgW2ZvcmNpbmdfdGFnXSB1c2luZyBjb21wYXJlLWFuZC1zd2FwIChDQVMpLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGUgaGVhZGVyIHdvcmQgYnkgYSBjb25jdXJyZW50IEdDIHRocmVhZC4gUmV0dXJucyBbMF0gaWYgdGhlXG4gICBDQVMgaXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIENBUyBmYWlscywgdGhlbiB0aGUgdGFnIHdhcyBvYnNlcnZlZCB0byBiZVxuICAgc29tZXRoaW5nIG90aGVyIHRoYW4gW2xhenlfdGFnXSBkdWUgdG8gYSBjb25jdXJyZW50IG11dGF0b3IuIEluIHRoaXMgY2FzZSxcbiAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIFsxXS4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3JjaW5nIDogT2JqLnQgLT4gaW50ID1cbiAgXCJjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcIiBbQEBub2FsbG9jXVxuXG4oKiBbcmVzZXRfdG9fbGF6eSBibGtdIGV4cGVjdHMgW2Jsa10gdG8gYmUgYSBsYXp5IG9iamVjdCB3aXRoIFtPYmouZm9yY2luZ190YWddXG4gICBhbmQgdXBkYXRlcyB0aGUgdGFnIHRvIFtPYmoubGF6eV90YWddLCB0YWtpbmcgY2FyZSB0byBoYW5kbGUgY29uY3VycmVudFxuICAgbWFya2luZyBvZiB0aGlzIG9iamVjdCdzIGhlYWRlciBieSBhIGNvbmN1cnJlbnQgR0MgdGhyZWFkLiAqKVxuZXh0ZXJuYWwgcmVzZXRfdG9fbGF6eSA6IE9iai50IC0+IHVuaXQgPSBcImNhbWxfbGF6eV9yZXNldF90b19sYXp5XCIgW0BAbm9hbGxvY11cblxuKCogW3VwZGF0ZV90b19mb3J3YXJkIGJsa10gZXhwZWN0cyBbYmxrXSB0byBiZSBhIGxhenkgb2JqZWN0IHdpdGhcbiAgIFtPYmouZm9yY2luZ190YWddIGFuZCB1cGRhdGVzIHRoZSB0YWcgdG8gW09iai5mb3J3YXJkX3RhZ10sIHRha2luZyBjYXJlIHRvXG4gICBoYW5kbGUgY29uY3VycmVudCBtYXJraW5nIG9mIHRoaXMgb2JqZWN0J3MgaGVhZGVyIGJ5IGEgY29uY3VycmVudCBHQyB0aHJlYWQuXG4gKilcbmV4dGVybmFsIHVwZGF0ZV90b19mb3J3YXJkIDogT2JqLnQgLT4gdW5pdCA9XG4gIFwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXCIgW0BAbm9hbGxvY11cblxuKCogQXNzdW1lcyBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGZvcmNpbmcgKilcbmxldCBkb19mb3JjZV9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciByZXN1bHQpO1xuICAgIHVwZGF0ZV90b19mb3J3YXJkIGI7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgYiAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByZXNldF90b19sYXp5IGI7XG4gICAgcmFpc2UgZVxuXG4oKiBBc3N1bWVzIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgZm9yY2luZyAqKVxubGV0IGRvX2ZvcmNlX3ZhbF9ibG9jayBibGsgPVxuICBsZXQgYiA9IE9iai5yZXByIGJsayBpblxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgYiAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCBiIDAgKE9iai5yZXByICgpKTsgKCogUmVsZWFzZSB0aGUgY2xvc3VyZSAqKVxuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBPYmouc2V0X2ZpZWxkIGIgMCAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgdXBkYXRlX3RvX2ZvcndhcmQgYjtcbiAgcmVzdWx0XG5cbigqIENhbGxlZCBieSBbZm9yY2VfZ2VuXSAqKVxubGV0IGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgKCogV2UgZXhwZWN0IHRoZSB0YWcgdG8gYmUgW2xhenlfdGFnXSwgYnV0IG1heSBiZSBvdGhlciB0YWdzIGR1ZSB0b1xuICAgICBjb25jdXJyZW50IGZvcmNpbmcgb2YgbGF6eSB2YWx1ZXMuICopXG4gIG1hdGNoIHVwZGF0ZV90b19mb3JjaW5nIChPYmoucmVwciBibGspIHdpdGhcbiAgfCAwIHdoZW4gb25seV92YWwgLT4gZG9fZm9yY2VfdmFsX2Jsb2NrIGJsa1xuICB8IDAgLT4gZG9fZm9yY2VfYmxvY2sgYmxrXG4gIHwgXyAtPiByYWlzZSBVbmRlZmluZWRcblxuKCogdXNlZCBpbiB0aGUgJWxhenlfZm9yY2UgcHJpbWl0aXZlICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayBibGsgPSBmb3JjZV9nZW5fbGF6eV9ibG9jayB+b25seV92YWw6ZmFsc2UgYmxrXG5cbigqIFtmb3JjZV9nZW4gfm9ubHlfdmFsOmZhbHNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzXG4gICBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZSB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHNcbiAgIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmwgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcbmxldCBmb3JjZV9nZW4gfm9ubHlfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdCBjb3VsZCBoYXZlIGJlZW5cbiAgICAgICBzaG9ydGN1dCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKS4gVGhpcyBpcyBub3QgYW4gaXNzdWUgaGVyZSBhdCB0aGUgbW9tZW50IHNpbmNlXG4gICAgICAgW09iai50YWddIGlzIG5vdCBzaW1wbGlmaWVkIGJ5IHRoZSBjb21waWxlciwgYW5kIEdQUiM3MTMgYWxzb1xuICAgICAgIGVuc3VyZXMgdGhhdCBubyB2YWx1ZSB3aWxsIGJlIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcuXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICAoKiBTVEFSVCBubyBzYWZlIHBvaW50cy4gSWYgYSBHQyBvY2N1cnMgaGVyZSwgdGhlbiB0aGUgb2JqZWN0IFt4XSBtYXkgYmVcbiAgICAgc2hvcnQtY2lyY3VpdGVkLCBhbmQgZ2V0dGluZyB0aGUgZmlyc3QgZmllbGQgb2YgW3hdIHdvdWxkIGdldCB1cyB0aGUgd3JvbmdcbiAgICAgdmFsdWUuIEx1Y2tpbHksIHRoZSBjb21waWxlciBkb2VzIG5vdCBpbnNlcnQgR0Mgc2FmZSBwb2ludHMgYXQgdGhpcyBwbGFjZSxcbiAgICAgc28gaXQgaXMgb2suICopXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlblxuICAgIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpXG4gICgqIEVORCBubyBzYWZlIHBvaW50cyAqKVxuICBlbHNlIGlmIHQgPSBPYmouZm9yY2luZ190YWcgdGhlbiByYWlzZSBVbmRlZmluZWRcbiAgZWxzZSBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2dlbl9sYXp5X2Jsb2NrIH5vbmx5X3ZhbCBsenZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJTdGRsaWJfT2JqIiwiVW5kZWZpbmVkIiwiZm9yY2VfZ2VuX2xhenlfYmxvY2siLCJvbmx5X3ZhbCIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJlIiwicGFyYW0iLCJmb3JjZV9sYXp5X2Jsb2NrIiwiZm9yY2VfZ2VuIiwibHp2IiwidCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxVQUFBQztBQUFBQSxJQ3VFUTtBQUFBLEtBR0M7QUFBQSxJQUZFO0FBQUEsU0FBQUMsWUFaYztBQUFBLEtBQ3ZCO0FBQUEsU0FBQUMsV0FDYTtBQUFBLEtBQ2I7QUFBQSxLQUNBO0FBQUEsS0FBbUI7QUFBQTtBQUFBLFFBQUFELFVBbkJJO0FBQUEsSUFDdkI7QUFBQSxJQUErQjtBQUFBLFNBQUFDLFNBRWhCO0FBQUEsS0FDYjtBQUFBLEtBQ0E7QUFBQTtBQUFBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSURsREo7QUFBQSxLQ3FESSxrQkFBQUMsT0FBdUMsd0NBQU87QUFBQSxLQUM5QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBb0JLO0FBQUEsWUFBQUMsaUJBQUFMLEtBR0csbUNBQXdDO0FBQUEsWUFBQU0sVUFBQVAsVUFBQVE7QUFBQUEsUUFBQUMsSUFxQnpEO0FBQUEsSUFDUix5QkFDMEI7QUFBQSxJQUVyQix3QkFBNEI7QUFBQSxJQUM1QixtQ0FDQSxtQ0FBa0M7QUFBQTtBQUFBLEdEeEd6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEwMjU4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2xhenkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5sZXQgZm9yY2VfdmFsIGwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX2dlbiB+b25seV92YWw6dHJ1ZSBsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8XG4gICAgIHQgPSBPYmouZm9yY2luZ190YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX29ial90YWciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJDYW1saW50ZXJuYWxMYXp5IiwiU3RkbGliX09iaiIsIlVuZGVmaW5lZCIsImZvcmNlX3ZhbCIsImwiLCJmcm9tX2Z1biIsIngiLCJmcm9tX3ZhbCIsInYiLCJ0IiwiaXNfdmFsIiwibWFwIiwicGFyYW0iLCJtYXBfdmFsIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQSx5QkFBQUMsZUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsVUFBQUMsR0N1RGtCLDJDQUEyQztBQUFBLFlBQUFDLFNBQUFSO0FBQUFBLFFBQUFTLElBR25EO0FBQUEsSUFDUjtBQUFBLElBQThCO0FBQUEsR0FDVjtBQUFBLFlBQUFDLFNBQUFDO0FBQUFBLFFBQUFDLElBR1o7QUFBQSxJQUNSO0FBQUE7QUFBQTtBQUFBLEtBSUc7QUFBQSxJQUgrQyx3Q0FJL0M7QUFBQTtBQUFBLFlBQUFDLE9BQUFOO0FBQUFBLFFBQUEsSUFFcUI7QUFBQSx3Q0FBb0I7QUFBQSxHQUFnQjtBQUFBLFlBQUFPLElBQUFkLEdBQUFTO0FBQUFBLElBRzVEO0FBQUEscUJBQUFNO0FBQUFBLGlCQUFBLElEMUVGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNDMEVFO0FBQUEsR0FBa0I7QUFBQSxZQUFBQyxRQUFBaEIsR0FBQVM7QUFBQUEsSUFHZjtBQUFBLEtBRUU7QUFBQSxzQkFBQU07QUFBQUEsa0JBQUEsSUQvRVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUMrRU87QUFBQSxZQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFTLE9BQWEsU0FBYixpQkFDUztBQUFBO0FBQUEsR0QvRXpCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTAzMzksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc2VxLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgZmluZF9pbmRleCBwIHhzID1cbiAgbGV0IHJlYyBhdXggaSB4cyA9IG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5vbmVcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBpZiBwIHggdGhlbiBTb21lIGkgZWxzZSBhdXggKGkrMSkgeHMgaW5cbiAgYXV4IDAgeHNcblxubGV0IHJlYyBmaW5kX21hcCBmIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOb25lXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgZmluZF9tYXAgZiB4c1xuICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+XG4gICAgICAgICAgcmVzdWx0XG5cbmxldCBmaW5kX21hcGkgZiB4cyA9XG4gIGxldCByZWMgYXV4IGkgeHMgPSBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIGF1eCAoaSsxKSB4c1xuICAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICAgIHJlc3VsdCBpblxuICBhdXggMCB4c1xuXG4oKiBbaXRlcjJdLCBbZm9sZF9sZWZ0Ml0sIFtmb3JfYWxsMl0sIFtleGlzdHMyXSwgW21hcDJdLCBbemlwXSB3b3JrIGFsc28gaW5cbiAgIHRoZSBjYXNlIHdoZXJlIHRoZSB0d28gc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHMuIFRoZXkgc3RvcCBhcyBzb29uXG4gICBhcyBvbmUgc2VxdWVuY2UgaXMgZXhoYXVzdGVkLiBUaGVpciBiZWhhdmlvciBpcyBzbGlnaHRseSBhc3ltbWV0cmljOiB3aGVuXG4gICBbeHNdIGlzIGVtcHR5LCB0aGV5IGRvIG5vdCBmb3JjZSBbeXNdOyBob3dldmVyLCB3aGVuIFt5c10gaXMgZW1wdHksIFt4c10gaXNcbiAgIGZvcmNlZCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gYXBwbGljYXRpb24gW3hzKCldIHR1cm5zIG91dFxuICAgdG8gYmUgdXNlbGVzcy4gKilcblxubGV0IHJlYyBpdGVyMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICAoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgpXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5O1xuICAgICAgICAgIGl0ZXIyIGYgeHMgeXNcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgYWNjdVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGFjY3VcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgeCB5IGluXG4gICAgICAgICAgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXNcblxubGV0IHJlYyBmb3JfYWxsMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSAmJiBmb3JfYWxsMiBmIHhzIHlzXG5cbmxldCByZWMgZXhpc3RzMiBmIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBmYWxzZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGYgeCB5IHx8IGV4aXN0czIgZiB4cyB5c1xuXG5sZXQgcmVjIGVxdWFsIGVxIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgZXEgeCB5ICYmIGVxdWFsIGVxIHhzIHlzXG4gIHwgTmlsLCBDb25zIChfLCBfKVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgIGZhbHNlXG5cbmxldCByZWMgY29tcGFyZSBjbXAgeHMgeXMgPVxuICBtYXRjaCB4cygpLCB5cygpIHdpdGhcbiAgfCBOaWwsIE5pbCAtPlxuICAgICAgMFxuICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4IHkgaW5cbiAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZSBjb21wYXJlIGNtcCB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXykgLT5cbiAgICAgIC0xXG4gIHwgQ29ucyAoXywgXyksIE5pbCAtPlxuICAgICAgKzFcblxuXG5cbigqIFtpbml0X2F1eCBmIGkgal0gaXMgdGhlIHNlcXVlbmNlIFtmIGksIC4uLiwgZiAoai0xKV0uICopXG5cbmxldCByZWMgaW5pdF9hdXggZiBpIGogKCkgPVxuICBpZiBpIDwgaiB0aGVuIGJlZ2luXG4gICAgQ29ucyAoZiBpLCBpbml0X2F1eCBmIChpICsgMSkgailcbiAgZW5kXG4gIGVsc2VcbiAgICBOaWxcblxubGV0IGluaXQgbiBmID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU2VxLmluaXRcIlxuICBlbHNlXG4gICAgaW5pdF9hdXggZiAwIG5cblxubGV0IHJlYyByZXBlYXQgeCAoKSA9XG4gIENvbnMgKHgsIHJlcGVhdCB4KVxuXG5sZXQgcmVjIGZvcmV2ZXIgZiAoKSA9XG4gIENvbnMgKGYoKSwgZm9yZXZlciBmKVxuXG4oKiBUaGlzIHByZWxpbWluYXJ5IGRlZmluaXRpb24gb2YgW2N5Y2xlXSByZXF1aXJlcyB0aGUgc2VxdWVuY2UgW3hzXVxuICAgdG8gYmUgbm9uZW1wdHkuIEFwcGx5aW5nIGl0IHRvIGFuIGVtcHR5IHNlcXVlbmNlIHdvdWxkIHByb2R1Y2UgYVxuICAgc2VxdWVuY2UgdGhhdCBkaXZlcmdlcyB3aGVuIGl0IGlzIGZvcmNlZC4gKilcblxubGV0IHJlYyBjeWNsZV9ub25lbXB0eSB4cyAoKSA9XG4gIGFwcGVuZCB4cyAoY3ljbGVfbm9uZW1wdHkgeHMpICgpXG5cbigqIFtjeWNsZSB4c10gY2hlY2tzIHdoZXRoZXIgW3hzXSBpcyBlbXB0eSBhbmQsIGlmIHNvLCByZXR1cm5zIGFuIGVtcHR5XG4gICBzZXF1ZW5jZS4gT3RoZXJ3aXNlLCBbY3ljbGUgeHNdIHByb2R1Y2VzIG9uZSBjb3B5IG9mIFt4c10gZm9sbG93ZWRcbiAgIHdpdGggdGhlIGluZmluaXRlIHNlcXVlbmNlIFtjeWNsZV9ub25lbXB0eSB4c10uIFRodXMsIHRoZSBub25lbXB0aW5lc3NcbiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBqdXN0IG9uY2UuICopXG5cbmxldCBjeWNsZSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMnKSAtPlxuICAgICAgQ29ucyAoeCwgYXBwZW5kIHhzJyAoY3ljbGVfbm9uZW1wdHkgeHMpKVxuXG4oKiBbaXRlcmF0ZTEgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW2YgeCwgZiAoZiB4KSwgLi4uXS5cbiAgIEl0IGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKGl0ZXJhdGUgZiB4KV0uXG4gICBbaXRlcmF0ZTFdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0uICopXG5cbmxldCByZWMgaXRlcmF0ZTEgZiB4ICgpID1cbiAgbGV0IHkgPSBmIHggaW5cbiAgQ29ucyAoeSwgaXRlcmF0ZTEgZiB5KVxuXG4oKiBbaXRlcmF0ZSBmIHhdIGlzIHRoZSBzZXF1ZW5jZSBbeCwgZiB4LCAuLi5dLiAqKVxuXG4oKiBUaGUgcmVhc29uIHdoeSB3ZSBnaXZlIHRoaXMgc2xpZ2h0bHkgaW5kaXJlY3QgZGVmaW5pdGlvbiBvZiBbaXRlcmF0ZV0sXG4gICBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIG5haXZlIGRlZmluaXRpb24gdGhhdCBtYXkgY29tZSB0byBtaW5kLCBpcyB0aGF0XG4gICB3ZSBhcmUgY2FyZWZ1bCB0byBhdm9pZCBldmFsdWF0aW5nIFtmIHhdIHVudGlsIHRoaXMgZnVuY3Rpb24gY2FsbCBpc1xuICAgYWN0dWFsbHkgbmVjZXNzYXJ5LiBUaGUgbmFpdmUgZGVmaW5pdGlvbiAobm90IHNob3duIGhlcmUpIGNvbXB1dGVzIHRoZVxuICAgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBzZXF1ZW5jZSwgW2YgeF0sIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzXG4gICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuICopXG5cbmxldCBpdGVyYXRlIGYgeCA9XG4gIGNvbnMgeCAoaXRlcmF0ZTEgZiB4KVxuXG5cblxubGV0IHJlYyBtYXBpX2F1eCBmIGkgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoZiBpIHgsIG1hcGlfYXV4IGYgKGkrMSkgeHMpXG5cbmxldFtAaW5saW5lXSBtYXBpIGYgeHMgPVxuICBtYXBpX2F1eCBmIDAgeHNcblxuKCogW3RhaWxfc2NhbiBmIHMgeHNdIGlzIGVxdWl2YWxlbnQgdG8gW3RhaWwgKHNjYW4gZiBzIHhzKV0uXG4gICBbdGFpbF9zY2FuXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW3NjYW5dLiAqKVxuXG4oKiBUaGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW3NjYW5dIGlzIG1lYW50IHRvIGF2b2lkIGNvbXB1dGluZ1xuICAgZWxlbWVudHMgdG9vIGVhcmx5OyBzZWUgdGhlIGFib3ZlIGNvbW1lbnQgYWJvdXQgW2l0ZXJhdGUxXSBhbmQgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIHRhaWxfc2NhbiBmIHMgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbGV0IHMgPSBmIHMgeCBpblxuICAgICAgQ29ucyAocywgdGFpbF9zY2FuIGYgcyB4cylcblxubGV0IHNjYW4gZiBzIHhzID1cbiAgY29ucyBzICh0YWlsX3NjYW4gZiBzIHhzKVxuXG4oKiBbdGFrZV0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW3Rha2UgMCB4c10gcmV0dXJucyBbZW1wdHldXG4gICBpbW1lZGlhdGVseSwgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCByZWMgdGFrZV9hdXggbiB4cyA9XG4gIGlmIG4gPSAwIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgIENvbnMgKHgsIHRha2VfYXV4IChuLTEpIHhzKVxuXG5sZXQgdGFrZSBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS50YWtlXCI7XG4gIHRha2VfYXV4IG4geHNcblxuKCogW2ZvcmNlX2Ryb3AgbiB4c10gaXMgZXF1aXZhbGVudCB0byBbZHJvcCBuIHhzICgpXS5cbiAgIFtmb3JjZV9kcm9wIG4geHNdIHJlcXVpcmVzIFtuID4gMF0uXG4gICBbZm9yY2VfZHJvcF0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtkcm9wXS4gKilcblxubGV0IHJlYyBmb3JjZV9kcm9wIG4geHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKF8sIHhzKSAtPlxuICAgICAgbGV0IG4gPSBuIC0gMSBpblxuICAgICAgaWYgbiA9IDAgdGhlblxuICAgICAgICB4cygpXG4gICAgICBlbHNlXG4gICAgICAgIGZvcmNlX2Ryb3AgbiB4c1xuXG4oKiBbZHJvcF0gaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRoYXQgW2Ryb3AgMCB4c10gcmV0dXJucyBbeHNdIGltbWVkaWF0ZWx5LFxuICAgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBtZW1vcnkuICopXG5cbmxldCBkcm9wIG4geHMgPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiU2VxLmRyb3BcIlxuICBlbHNlIGlmIG4gPSAwIHRoZW5cbiAgICB4c1xuICBlbHNlXG4gICAgZnVuICgpIC0+XG4gICAgICBmb3JjZV9kcm9wIG4geHNcblxubGV0IHJlYyB0YWtlX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgaWYgcCB4IHRoZW4gQ29ucyAoeCwgdGFrZV93aGlsZSBwIHhzKSBlbHNlIE5pbFxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIGFzIG5vZGUgLT5cbiAgICAgIGlmIHAgeCB0aGVuIGRyb3Bfd2hpbGUgcCB4cyAoKSBlbHNlIG5vZGVcblxubGV0IHJlYyBncm91cCBlcSB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBDb25zIChjb25zIHggKHRha2Vfd2hpbGUgKGVxIHgpIHhzKSwgZ3JvdXAgZXEgKGRyb3Bfd2hpbGUgKGVxIHgpIHhzKSlcblxuZXhjZXB0aW9uIEZvcmNlZF90d2ljZVxuXG5tb2R1bGUgU3VzcGVuc2lvbiA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egc3VzcGVuc2lvbiA9XG4gICAgdW5pdCAtPiAnYVxuXG4gICgqIENvbnZlcnNpb25zLiAqKVxuXG4gIGxldCB0b19sYXp5IDogJ2Egc3VzcGVuc2lvbiAtPiAnYSBMYXp5LnQgPVxuICAgIExhenkuZnJvbV9mdW5cbiAgICAoKiBmdW4gcyAtPiBsYXp5IChzKCkpICopXG5cbiAgbGV0IGZyb21fbGF6eSAocyA6ICdhIExhenkudCkgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmdW4gKCkgLT4gTGF6eS5mb3JjZSBzXG5cbiAgKCogW21lbW9pemVdIHR1cm5zIGFuIGFyYml0cmFyeSBzdXNwZW5zaW9uIGludG8gYSBwZXJzaXN0ZW50IHN1c3BlbnNpb24uICopXG5cbiAgbGV0IG1lbW9pemUgKHMgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGZyb21fbGF6eSAodG9fbGF6eSBzKVxuXG4gICgqIFtmYWlsdXJlXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBmYWlscyB3aGVuIGZvcmNlZC4gKilcblxuICBsZXQgZmFpbHVyZSA6IF8gc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBBIHN1c3BlbnNpb24gY3JlYXRlZCBieSBbb25jZV0gaGFzIGJlZW4gZm9yY2VkIHR3aWNlLiAqKVxuICAgICAgcmFpc2UgRm9yY2VkX3R3aWNlXG5cbiAgKCogSWYgW2ZdIGlzIGEgc3VzcGVuc2lvbiwgdGhlbiBbb25jZSBmXSBpcyBhIHN1c3BlbnNpb24gdGhhdCBjYW4gYmUgZm9yY2VkXG4gICAgIGF0IG1vc3Qgb25jZS4gSWYgaXQgaXMgZm9yY2VkIG1vcmUgdGhhbiBvbmNlLCB0aGVuIFtGb3JjZWRfdHdpY2VdIGlzXG4gICAgIHJhaXNlZC4gKilcblxuICBsZXQgb25jZSAoZiA6ICdhIHN1c3BlbnNpb24pIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgbGV0IGFjdGlvbiA9IEF0b21pYy5tYWtlIGYgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgICgqIEdldCB0aGUgZnVuY3Rpb24gY3VycmVudGx5IHN0b3JlZCBpbiBbYWN0aW9uXSwgYW5kIHdyaXRlIHRoZVxuICAgICAgICAgZnVuY3Rpb24gW2ZhaWx1cmVdIGluIGl0cyBwbGFjZSwgc28gdGhlIG5leHQgYWNjZXNzIHdpbGwgcmVzdWx0XG4gICAgICAgICBpbiBhIGNhbGwgdG8gW2ZhaWx1cmUoKV0uICopXG4gICAgICBsZXQgZiA9IEF0b21pYy5leGNoYW5nZSBhY3Rpb24gZmFpbHVyZSBpblxuICAgICAgZigpXG5cbmVuZCAoKiBTdXNwZW5zaW9uICopXG5cbmxldCByZWMgbWVtb2l6ZSB4cyA9XG4gIFN1c3BlbnNpb24ubWVtb2l6ZSAoZnVuICgpIC0+XG4gICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgQ29ucyAoeCwgbWVtb2l6ZSB4cylcbiAgKVxuXG5sZXQgcmVjIG9uY2UgeHMgPVxuICBTdXNwZW5zaW9uLm9uY2UgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG9uY2UgeHMpXG4gIClcblxuXG5sZXQgcmVjIHppcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKCh4LCB5KSwgemlwIHhzIHlzKVxuXG5sZXQgcmVjIG1hcDIgZiB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCB5cygpIHdpdGhcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgTmlsXG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIENvbnMgKGYgeCB5LCBtYXAyIGYgeHMgeXMpXG5cbmxldCByZWMgaW50ZXJsZWF2ZSB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgeXMoKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoeCwgaW50ZXJsZWF2ZSB5cyB4cylcblxuKCogW3NvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIChjb25zIHggeHMpIHlzXS5cblxuICAgW3NvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgIFtzb3J0ZWRfbWVyZ2UgY21wIHhzIChjb25zIHkgeXMpXS5cblxuICAgW3NvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSAoY29ucyB5IHlzKV0uXG5cbiAgIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhcyBidWlsZGluZyBibG9ja3MgaW4gdGhlIGRlZmluaXRpb25cbiAgIG9mIFtzb3J0ZWRfbWVyZ2VdLiAqKVxuXG5sZXQgcmVjIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzICgpID1cbiAgbWF0Y2ggeXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh4LCB4cylcbiAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMXIgY21wIHhzIHkgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIENvbnMgKHksIHlzKVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzXG5cbmFuZCBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXMgPVxuICBpZiBjbXAgeCB5IDw9IDAgdGhlblxuICAgIENvbnMgKHgsIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzKVxuICBlbHNlXG4gICAgQ29ucyAoeSwgc29ydGVkX21lcmdlMWwgY21wIHggeHMgeXMpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgY21wIHhzIHlzICgpID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gICAgfCBOaWwsIE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IE5pbCwgY1xuICAgIHwgYywgTmlsIC0+XG4gICAgICAgIGNcbiAgICB8IENvbnMgKHgsIHhzKSwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5cbmxldCByZWMgbWFwX2ZzdCB4eXMgKCkgPVxuICBtYXRjaCB4eXMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICgoeCwgXyksIHh5cykgLT5cbiAgICAgIENvbnMgKHgsIG1hcF9mc3QgeHlzKVxuXG5sZXQgcmVjIG1hcF9zbmQgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKF8sIHkpLCB4eXMpIC0+XG4gICAgICBDb25zICh5LCBtYXBfc25kIHh5cylcblxubGV0IHVuemlwIHh5cyA9XG4gIG1hcF9mc3QgeHlzLCBtYXBfc25kIHh5c1xuXG5sZXQgc3BsaXQgPVxuICB1bnppcFxuXG4oKiBbZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgIFtmaWx0ZXJfbWFwIEVpdGhlci5maW5kX2xlZnQgKG1hcCBmIHhzKV0uICopXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRWl0aGVyLkxlZnQgeSAtPlxuICAgICAgICAgIENvbnMgKHksIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzKVxuICAgICAgfCBFaXRoZXIuUmlnaHQgXyAtPlxuICAgICAgICAgIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpXG5cbmxldCByZWMgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMgKClcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IHogLT5cbiAgICAgICAgICBDb25zICh6LCBmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIGYgeHMpXG5cbmxldCBwYXJ0aXRpb25fbWFwIGYgeHMgPVxuICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyxcbiAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzXG5cbmxldCBwYXJ0aXRpb24gcCB4cyA9XG4gIGZpbHRlciBwIHhzLCBmaWx0ZXIgKGZ1biB4IC0+IG5vdCAocCB4KSkgeHNcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW3BlZWwgeHNzXSBpcyBhIHBhaXIgb2ZcbiAgIHRoZSBmaXJzdCBjb2x1bW4gKGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMpIGFuZCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZVxuICAgbWF0cml4IChhIHNlcXVlbmNlIG9mIHNob3J0ZXIgcm93cykuIFRoZXNlIHR3byBzZXF1ZW5jZXMgaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBUaGUgcm93cyBvZiB0aGUgbWF0cml4IFt4c3NdIGFyZSBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0aGUgc2FtZVxuICAgbGVuZ3RoLiBBbiBlbXB0eSByb3cgaXMgaWdub3JlZC4gKilcblxuKCogQmVjYXVzZSBbcGVlbF0gdXNlcyBbdW56aXBdLCBpdHMgYXJndW1lbnQgbXVzdCBiZSBwZXJzaXN0ZW50LiBUaGUgc2FtZVxuICAgcmVtYXJrIGFwcGxpZXMgdG8gW3RyYW5zcG9zZV0sIFtkaWFnb25hbHNdLCBbcHJvZHVjdF0sIGV0Yy4gKilcblxubGV0IHBlZWwgeHNzID1cbiAgdW56aXAgKGZpbHRlcl9tYXAgdW5jb25zIHhzcylcblxubGV0IHJlYyB0cmFuc3Bvc2UgeHNzICgpID1cbiAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgeHNzIGluXG4gIGlmIGlzX2VtcHR5IGhlYWRzIHRoZW4gYmVnaW5cbiAgICBhc3NlcnQgKGlzX2VtcHR5IHRhaWxzKTtcbiAgICBOaWxcbiAgZW5kXG4gIGVsc2VcbiAgICBDb25zIChoZWFkcywgdHJhbnNwb3NlIHRhaWxzKVxuXG4oKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gW2RpYWdvbmFsc10gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsIFtyZW1haW5kZXJzXSxcbiAgIHdoaWNoIGNvbnRhaW5zIHRoZSByZW1haW5kZXJzIG9mIHRoZSByb3dzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW5cbiAgIGRpc2NvdmVyZWQuICopXG5cbmxldCByZWMgZGlhZ29uYWxzIHJlbWFpbmRlcnMgeHNzICgpID1cbiAgbWF0Y2ggeHNzKCkgd2l0aFxuICB8IENvbnMgKHhzLCB4c3MpIC0+XG4gICAgICBiZWdpbiBtYXRjaCB4cygpIHdpdGhcbiAgICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgbm9uZW1wdHkgcm93IFt4IDo6IHhzXS4gVGh1cywgdGhlIG5leHQgZGlhZ29uYWxcbiAgICAgICAgICAgICBpcyBbeCA6OiBoZWFkc106IHRoaXMgZGlhZ29uYWwgYmVnaW5zIHdpdGggW3hdIGFuZCBjb250aW51ZXMgd2l0aFxuICAgICAgICAgICAgIHRoZSBmaXJzdCBlbGVtZW50IG9mIGV2ZXJ5IHJvdyBpbiBbcmVtYWluZGVyc10uIEluIHRoZSByZWN1cnNpdmVcbiAgICAgICAgICAgICBjYWxsLCB0aGUgYXJndW1lbnQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIFt4cyA6OlxuICAgICAgICAgICAgIHRhaWxzXSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3csIFt4c10sXG4gICAgICAgICAgICAgYW5kIHRoYXQgd2Uga2VlcCB0aGUgdGFpbHMgb2YgdGhlIHByZS1leGlzdGluZyByZW1haW5pbmcgcm93cy4gKilcbiAgICAgICAgICBsZXQgaGVhZHMsIHRhaWxzID0gcGVlbCByZW1haW5kZXJzIGluXG4gICAgICAgICAgQ29ucyAoY29ucyB4IGhlYWRzLCBkaWFnb25hbHMgKGNvbnMgeHMgdGFpbHMpIHhzcylcbiAgICAgIHwgTmlsIC0+XG4gICAgICAgICAgKCogV2UgZGlzY292ZXIgYSBuZXcgZW1wdHkgcm93LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlhZ29uYWwgaXNcbiAgICAgICAgICAgICBqdXN0IFtoZWFkc10sIGFuZCBbcmVtYWluZGVyc10gaXMgaW5zdGFudGlhdGVkIHdpdGgganVzdCBbdGFpbHNdLFxuICAgICAgICAgICAgIGFzIHdlIGRvIG5vdCBoYXZlIG9uZSBtb3JlIHJlbWFpbmluZyByb3cuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGhlYWRzLCBkaWFnb25hbHMgdGFpbHMgeHNzKVxuICAgICAgZW5kXG4gIHwgTmlsIC0+XG4gICAgICAoKiBUaGVyZSBhcmUgbm8gbW9yZSByb3dzIHRvIGJlIGRpc2NvdmVyZWQuIFRoZXJlIHJlbWFpbnMgdG8gZXhoYXVzdFxuICAgICAgICAgdGhlIHJlbWFpbmluZyByb3dzLiAqKVxuICAgICAgdHJhbnNwb3NlIHJlbWFpbmRlcnMgKClcblxuKCogSWYgW3hzc10gaXMgYSBtYXRyaXggKGEgc2VxdWVuY2Ugb2Ygcm93cyksIHRoZW4gW2RpYWdvbmFscyB4c3NdIGlzXG4gICB0aGUgc2VxdWVuY2Ugb2YgaXRzIGRpYWdvbmFscy5cblxuICAgVGhlIGZpcnN0IGRpYWdvbmFsIGNvbnRhaW5zIGp1c3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBmaXJzdCByb3cuIFRoZSBzZWNvbmQgZGlhZ29uYWwgY29udGFpbnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlXG4gICBzZWNvbmQgcm93IGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGZpcnN0IHJvdzsgYW5kIHNvIG9uLlxuICAgVGhpcyBraW5kIG9mIGRpYWdvbmFsIGlzIGluIGZhY3Qgc29tZXRpbWVzIGtub3duIGFzIGFuIGFudGlkaWFnb25hbC5cblxuICAgLSBFdmVyeSBkaWFnb25hbCBpcyBhIGZpbml0ZSBzZXF1ZW5jZS5cbiAgIC0gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIGlzIG5vdCByZXF1aXJlZCB0byBiZSBmaW5pdGUgKGluIGVpdGhlciBkaXJlY3Rpb24pLlxuICAgLSBUaGUgbWF0cml4IFt4c3NdIG11c3QgYmUgcGVyc2lzdGVudC4gKilcblxubGV0IGRpYWdvbmFscyB4c3MgPVxuICBkaWFnb25hbHMgZW1wdHkgeHNzXG5cbmxldCBtYXBfcHJvZHVjdCBmIHhzIHlzID1cbiAgY29uY2F0IChkaWFnb25hbHMgKFxuICAgIG1hcCAoZnVuIHggLT5cbiAgICAgIG1hcCAoZnVuIHkgLT5cbiAgICAgICAgZiB4IHlcbiAgICAgICkgeXNcbiAgICApIHhzXG4gICkpXG5cbmxldCBwcm9kdWN0IHhzIHlzID1cbiAgbWFwX3Byb2R1Y3QgKGZ1biB4IHkgLT4gKHgsIHkpKSB4cyB5c1xuXG5sZXQgb2ZfZGlzcGVuc2VyIGl0ID1cbiAgbGV0IHJlYyBjICgpID1cbiAgICBtYXRjaCBpdCgpIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgTmlsXG4gICAgfCBTb21lIHggLT5cbiAgICAgICAgQ29ucyAoeCwgYylcbiAgaW5cbiAgY1xuXG5sZXQgdG9fZGlzcGVuc2VyIHhzID1cbiAgbGV0IHMgPSByZWYgeHMgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggKCFzKSgpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOb25lXG4gICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgcyA6PSB4cztcbiAgICAgICAgU29tZSB4XG5cblxuXG5sZXQgcmVjIGludHMgaSAoKSA9XG4gIENvbnMgKGksIGludHMgKGkgKyAxKSlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfQXRvbWljIiwiQ2FtbGludGVybmFsTGF6eSIsIlN0ZGxpYiIsIlN0ZGxpYl9MYXp5IiwiZW1wdHkiLCJwYXJhbSIsInJldHVybiQiLCJ4IiwiY29ucyIsIm5leHQiLCJhcHBlbmQiLCJzZXExIiwic2VxMiIsIm1hdGNoIiwibWFwIiwic2VxIiwiZmlsdGVyX21hcCIsInkiLCJmaWx0ZXIiLCJjb25jYXQiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsIml0ZXIiLCJ1bmZvbGQiLCJ1IiwiaXNfZW1wdHkiLCJ4cyIsInVuY29ucyIsImxlbmd0aCIsImFjY3UiLCJpdGVyaSIsImkiLCJmb2xkX2xlZnRpIiwiZm9yX2FsbCIsInAiLCJleGlzdHMiLCJmaW5kIiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwicmVzdWx0IiwiZmluZF9tYXBpIiwiaXRlcjIiLCJ5cyIsImZvbGRfbGVmdDIiLCJmb3JfYWxsMiIsImV4aXN0czIiLCJlcXVhbCIsImVxIiwiY29tcGFyZSIsImNtcCIsImMiLCJpbml0X2F1eCIsImoiLCJpbml0IiwibiIsInJlcGVhdCIsImZvcmV2ZXIiLCJjeWNsZV9ub25lbXB0eSIsImN5Y2xlIiwiaXRlcmF0ZTEiLCJpdGVyYXRlIiwibWFwaV9hdXgiLCJtYXBpIiwidGFpbF9zY2FuIiwicyIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJGb3JjZWRfdHdpY2UiLCJ0b19sYXp5IiwiZmFpbHVyZSIsIm1lbW9pemUiLCJvbmNlIiwiYWN0aW9uIiwiemlwIiwibWFwMiIsImludGVybGVhdmUiLCJzb3J0ZWRfbWVyZ2UxIiwic29ydGVkX21lcmdlIiwibWFwX2ZzdCIsInh5cyIsIm1hcF9zbmQiLCJ1bnppcCIsImZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCIsImZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAiLCJ6IiwicGFydGl0aW9uX21hcCIsInBhcnRpdGlvbiIsInBlZWwiLCJ4c3MiLCJ0cmFuc3Bvc2UiLCJ0YWlscyIsImhlYWRzIiwicmVtYWluZGVycyIsIm1hcF9wcm9kdWN0IiwicHJvZHVjdCIsIm9mX2Rpc3BlbnNlciIsIml0IiwidG9fZGlzcGVuc2VyIiwiaW50cyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFB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LFNBQUFOLElBRk07QUFBQSxLQUlOO0FBQUEsSUFBVztBQUFBLElBRWpCO0FBQUEsR0FBQztBQUFBLFlBQUFpRyxhQUFBN0U7QUFBQUEsUUFBQXNDLElBR0Q7QUFBQSxJQUNBLGdCQUFBNUQ7QUFBQUEsU0FBQVEsUUFDUTtBQUFBLEtBQU0sWUFFUjtBQUFBLFNBQUFjLEtBRlEsVUFBQXBCLElBQUE7QUFBQSxLQUlSO0FBQUEsS0FDQSxjQUFNLENBTlo7QUFBQSxHQU1ZO0FBQUEsWUFBQWtHLEtBQUF6RSxHQUFBM0I7QUFBQUEsUUFBQSxJQUtIO0FBQUEsSUFBWSwwQkFBWixvQkFBWTtBQUFBLEdBQUM7QUFBQSxHRDdyQnhCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEwMzIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvb3B0aW9uLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsInNvbWUiLCJ2IiwidmFsdWUiLCJvIiwiZGVmYXVsdCQiLCJnZXQiLCJwYXJhbSIsImJpbmQiLCJqb2luIiwibWFwIiwiZm9sZCIsIm5vbmUiLCJpdGVyIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsWUFBQUMsS0FBQUMsR0NrQmEsY0FBTTtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDO0FBQUFBLElBQ0ksUUFBbUM7QUFBQSxRQUFBSCxJQUFuQztBQUFBLElBQXVCO0FBQUEsR0FBbUI7QUFBQSxZQUFBSSxJQUFBQztBQUFBQSxJQUN2RCxZQUErQiw2Q0FBNEI7QUFBQSxRQUFBTCxJQUEzRDtBQUFBLElBQW1CO0FBQUEsR0FBd0M7QUFBQSxZQUFBTSxLQUFBSixHQUFBVjtBQUFBQSxJQUN0RCxRQUFxQjtBQUFBLFFBQUFRLElBQXJCO0FBQUEsSUFBc0MsdUJBQUc7QUFBQTtBQUFBLFlBQUFPLEtBQUFGLE9BQzdDLFlBQStCLGNBQUFILElBQS9CLFVBQW1CLFNBQWdCO0FBQUEsWUFBQU0sSUFBQWhCLEdBQUFVO0FBQUFBLElBQ2hDLFFBQXFCO0FBQUEsUUFBQUYsSUFBckI7QUFBQSxJQUEyQyw0QkFBSztBQUFBO0FBQUEsWUFBQVMsS0FBQUMsTUFBQVgsTUFBQU07QUFBQUEsSUFDckQsWUFBa0Q7QUFBQSxRQUFBTCxJQUFsRDtBQUFBLElBQWlDLDBCQUFxQjtBQUFBO0FBQUEsWUFBQVcsS0FBQW5CLEdBQUFhO0FBQUFBLElBQ3RELFlBQXFDO0FBQUEsUUFBQUwsSUFBckM7QUFBQSxJQUF1Qix1QkFBZ0I7QUFBQTtBQUFBLFlBQUFZLFFBQUFQLE9BQ2xDLG9CQUF1QztBQUFBLFlBQUFRLFFBQUFSLE9BQ3ZDLG9CQUF1QztBQUFBLFlBQUFTLE1BQUFDLElBQUFDLElBQUFDO0FBQUFBLElBRWhDO0FBQUEsZ0JBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUNDLDZCQUVWO0FBQUE7QUFBQSxrQkFESTtBQUFBLElBQ1Q7QUFBQSxHQUFLO0FBQUEsWUFBQUMsUUFBQUMsS0FBQUwsSUFBQUM7QUFBQUEsSUFFWSwyQkFJTDtBQUFBLFFBQUFFLEtBSks7QUFBQSxhQUlOO0FBQUEsUUFBQUQsS0FKTTtBQUFBLElBQ0YsOEJBR0g7QUFBQTtBQUFBLFlBQUFJLFVBQUFaLE1BQUFMO0FBQUFBLElBRUwsWUFBeUI7QUFBQSxRQUFBTCxJQUF6QjtBQUFBLElBQWdEO0FBQUEsR0FBSTtBQUFBLFlBQUF1QixRQUFBbEI7QUFBQUEsSUFDcEQsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQjtBQUFBLElBQWdDO0FBQUEsR0FBRztBQUFBLFlBQUF3QixPQUFBbkI7QUFBQUEsSUFDcEMsWUFBaUI7QUFBQSxRQUFBTCxJQUFqQixjQUF1QztBQUFBLHVCRDFDcEQsZ0JDMENvRDtBQUFBLEdBQVk7QUFBQSxHRDFDaEUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTE0MCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9jaGFyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfaGFzaCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiU3RkbGliIiwiY2hyIiwibiIsImVzY2FwZWQiLCJjIiwicyIsImxvd2VyY2FzZV9hc2NpaSIsInVwcGVyY2FzZV9hc2NpaSIsImNvbXBhcmUiLCJjMSIsImMyIiwiZXF1YWwiLCJzZWVkZWRfaGFzaCIsInNlZWQiLCJ4IiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLElBQUFDO0FBQUFBLElDcUJFLHVCQUFxRDtBQUFBLElBQTVCLHVDQUF3QztBQUFBO0FBQUEsWUFBQUMsUUFBQUM7QUFBQUE7QUFBQUE7QUFBQUEsS0FPckQ7QUFBQSxtQkFFRjtBQUFBLE1BRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQU1GO0FBQUE7QUFBQSxVQUZBO0FBQUE7QUFBQSxVQURBO0FBQUE7QUFBQSxVQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFMRSxZQUNGO0FBQUE7QUFBQSxTQUFBQyxNQU9FO0FBQUEsS0FDUjtBQUFBLEtBQ0EsZ0NBUWtCO0FBQUE7QUFBQSxRQUFBQSxJQUxWO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsOEJBQWtCO0FBQUE7QUFBQSxZQUFBQyxnQkFBQUYsR0FFRix5Q0FFWjtBQUFBLFlBQUFHLGdCQUFBSCxHQUVZLHlDQUVaO0FBQUEsWUFBQUksUUFBQUMsSUFBQUMsSUFJVSxtQkFBaUI7QUFBQSxZQUFBQyxNQUFBRixJQUFBQyxJQUNJLG1DQUFJO0FBQUEsWUFBQUUsWUFBQUMsTUFBQUMsR0FJcEIsa0NBQStCO0FBQUEsWUFBQUMsS0FBQUQsR0FDM0MsK0JBQTRCO0FBQUEsR0RoRXpDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTEyMTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvdWNoYXIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJnbG9iYWxfZGF0YSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJpIiwib2ZfaW50IiwiaXNfY2hhciIsIm9mX2NoYXIiLCJjIiwidG9fY2hhciIsInVuc2FmZV90b19jaGFyIiwiZXF1YWwiLCJjb21wYXJlIiwiaGFzaCIsInV0Zl9kZWNvZGVfaXNfdmFsaWQiLCJkIiwidXRmX2RlY29kZV9sZW5ndGgiLCJ1dGZfZGVjb2RlX3VjaGFyIiwidXRmX2RlY29kZSIsIm4iLCJ1dGZfZGVjb2RlX2ludmFsaWQiLCJjc3RfdWNoYXJfbWwiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsIlN0ZGxpYl9VY2hhciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLEtBQUFDO0FBQUFBLElDaUNFO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2dCO0FBQUEseUJBQ1g7QUFBQTtBQUFBLFlBQUFDLEtBQUFEO0FBQUFBLElBR0w7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFDZ0I7QUFBQSx5QkFDWDtBQUFBO0FBQUEsWUFBQUUsU0FBQUM7QUFBQUEsUUFBQSxJQUVVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQTBEO0FBQUEsWUFBQUMsT0FBQUQ7QUFBQUEsSUFDekQsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE9BeEJFO0FBQUEsZUFBakI7QUFBQSxJQXdCZ0Q7QUFBQTtBQUFBLFlBQUFFLFFBQUFMLEdBSW5ELHVCQUFPO0FBQUEsWUFBQU0sUUFBQUMsR0FDUCxTQUFXO0FBQUEsWUFBQUMsUUFBQVI7QUFBQUEsSUFFekIsYUFDQTtBQUFBO0FBQUE7QUFBQSxPQS9CNEI7QUFBQTtBQUFBLFNBQWtEO0FBQUEsSUE4QmhDLDhCQUM3QjtBQUFBO0FBQUEsWUFBQVMsZUFBQSxHRG5EbkI7QUFBQSxZQUFBQyxNQUFBO0FBQUEsT0FBQUMsVUFBQTtBQUFBLFlBQUFDLEtBQUE7QUFBQSxZQUFBQyxvQkFBQUMsR0N3RXFDLG9DQUFxQjtBQUFBLFlBQUFDLGtCQUFBRCxHQUN2QiwwQkFBOEI7QUFBQSxZQUFBRSxpQkFBQUYsR0FDL0Isb0JBQStCO0FBQUEsWUFBQUcsV0FBQUMsR0FBQWxCLEdBQ25DLHlCQUEwQztBQUFBLFlBQUFtQixtQkFBQUQsR0FDcEMsdUJBQTJCO0FBQUE7QUFBQSxJQUFBRSxlRDVFL0Q7QUFBQTtBQUFBO0FBQUEsWUFBQUMsa0JBQUFyQjtBQUFBQSxJQytFUyxVQUFTO0FBQUEsSUFDVCxhQUFlO0FBQUEsSUFDZixjQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQSxXRHBGbkI7QUFBQSxZQUFBc0IsbUJBQUF0QjtBQUFBQSxJQ3VGUyxVQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZjtBQUFBLEtBQ0Y7QUFBQSxJQURtQjtBQUFBLEdBQ1A7QUFBQTtBQUFBLElBQUF1QjtBQUFBQSxNRDFGbkIiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMTMzMCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9saXN0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdCBpIGxhc3QgZiA9XG4gIGlmIGkgPiBsYXN0IHRoZW4gW11cbiAgZWxzZSBpZiBpID0gbGFzdCB0aGVuIFtmIGldXG4gIGVsc2VcbiAgICBsZXQgcjEgPSBmIGkgaW5cbiAgICBsZXQgcjIgPSBmIChpKzEpIGluXG4gICAgcjEgOjogcjIgOjogaW5pdCAoaSsyKSBsYXN0IGZcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGluaXQgMCAobGVuIC0gMSkgZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IFthMV0gLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgYTEgaW5cbiAgICAgIGxldCByMiA9IGYgYTIgaW5cbiAgICAgIHIxOjpyMjo6bWFwIGYgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBbYTFdIC0+XG4gICAgICBsZXQgcjEgPSBmIGkgYTEgaW5cbiAgICAgIFtyMV1cbiAgfCBhMTo6YTI6OmwgLT5cbiAgICAgIGxldCByMSA9IGYgaSBhMSBpblxuICAgICAgbGV0IHIyID0gZiAoaSsxKSBhMiBpblxuICAgICAgcjE6OnIyOjptYXBpIChpKzIpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChbYTFdLCBbYjFdKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgW3IxXVxuICB8IChhMTo6YTI6OmwxLCBiMTo6YjI6OmwyKSAtPlxuICAgICAgbGV0IHIxID0gZiBhMSBiMSBpblxuICAgICAgbGV0IHIyID0gZiBhMiBiMiBpblxuICAgICAgcjE6OnIyOjptYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IGZpbmRfaW5kZXggcCA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgcCBhIHRoZW4gU29tZSBpIGVsc2UgYXV4IChpKzEpIGwgaW5cbiAgYXV4IDBcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX21hcGkgZiA9XG4gIGxldCByZWMgYXV4IGkgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiBpIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gYXV4IChpKzEpIGxcbiAgICAgZW5kIGluXG4gIGF1eCAwXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbmRfYWxsIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggOjogZmluZF9hbGwgcCBsIGVsc2UgZmluZF9hbGwgcCBsXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJpIHAgaSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4OjpsIC0+XG4gICAgICBsZXQgaScgPSBpICsgMSBpblxuICAgICAgaWYgcCBpIHggdGhlbiB4IDo6IGZpbHRlcmkgcCBpJyBsIGVsc2UgZmlsdGVyaSBwIGknIGxcblxubGV0IGZpbHRlcmkgcCBsID0gZmlsdGVyaSBwIDAgbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBsXG4gICAgICB8IFNvbWUgdiAtPiB2IDo6IGZpbHRlcl9tYXAgZiBsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbmNhdF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCB4Ojp4cyAtPiBwcmVwZW5kX2NvbmNhdF9tYXAgKGYgeCkgZiB4c1xuYW5kW0B0YWlsX21vZF9jb25zXSBwcmVwZW5kX2NvbmNhdF9tYXAgeXMgZiB4cyA9XG4gIG1hdGNoIHlzIHdpdGhcbiAgfCBbXSAtPiBjb25jYXRfbWFwIGYgeHNcbiAgfCB5IDo6IHlzIC0+IHkgOjogcHJlcGVuZF9jb25jYXRfbWFwIHlzIGYgeHNcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSB2ZXJ5IGxvbmcgbGlzdCAobGVuZ3RoIG92ZXIgYWJvdXQgMTAwMDAwKSwgaXQgdXNlZCB0byBiZVxuICAgZmFzdGVyIHRvIGNvbnZlcnQgdGhlIGxpc3QgdG8gYW4gYXJyYXksIHNvcnQgdGhlIGFycmF5LCBhbmQgY29udmVydFxuICAgYmFjaywgdHJ1bmNhdGluZyB0aGUgYXJyYXkgb2JqZWN0IGFmdGVyIHByZXBlbmRpbmcgZWFjaCB0aG91c2FuZFxuICAgZW50cmllcyB0byB0aGUgcmVzdWx0aW5nIGxpc3QuIEltcG9zc2libGUgbm93IHRoYXQgT2JqLnRydW5jYXRlIGhhc1xuICAgYmVlbiByZW1vdmVkLiAqKVxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9zZXEgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IFtdXG4gIHwgU2VxLkNvbnMgKHgxLCBzZXEpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFt4MV1cbiAgICAgIHwgU2VxLkNvbnMgKHgyLCBzZXEpIC0+IHgxIDo6IHgyIDo6IG9mX3NlcSBzZXFcbiAgICAgIGVuZFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiU3RkbGliIiwibGVuZ3RoIiwibCIsImxlbiIsInBhcmFtIiwiY29ucyIsImEiLCJoZCIsInRsIiwiY3N0X0xpc3RfbnRoIiwibnRoIiwibiIsIm50aF9vcHQiLCJhcHBlbmQiLCJyZXZfYXBwZW5kIiwibDEiLCJsMiIsInJldiIsImluaXQiLCJsYXN0IiwiaSIsInIxIiwicjIiLCJibG9jayIsImRzdCIsIm9mZnNldCIsImZsYXR0ZW4iLCJyIiwibWFwIiwibWF0Y2giLCJtYXBpIiwicmV2X21hcCIsImFjY3UiLCJpdGVyIiwiaXRlcmkiLCJmb2xkX2xlZnQiLCJmb2xkX3JpZ2h0IiwibWFwMiIsImNzdF9MaXN0X21hcDIiLCJiMiIsImIxIiwicmV2X21hcDIiLCJpdGVyMiIsImZvbGRfbGVmdDIiLCJmb2xkX3JpZ2h0MiIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZm9yX2FsbDIiLCJleGlzdHMyIiwibWVtIiwieCIsIm1lbXEiLCJhc3NvYyIsImIiLCJhc3NvY19vcHQiLCJhc3NxIiwiYXNzcV9vcHQiLCJtZW1fYXNzb2MiLCJtZW1fYXNzcSIsInJlbW92ZV9hc3NvYyIsInBhaXIiLCJyZW1vdmVfYXNzcSIsImZpbmQiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsInJlc3VsdCIsImZpbmRfbWFwaSIsImZpbmRfYWxsIiwiZmlsdGVyaSIsImZpbHRlcl9tYXAiLCJ2IiwiY29uY2F0X21hcCIsInhzIiwieXMiLCJ5IiwiZm9sZF9sZWZ0X21hcCIsImxfYWNjdSIsInBhcnRpdGlvbiIsInllcyIsIm5vIiwicGFydGl0aW9uX21hcCIsImxlZnQiLCJyaWdodCIsInNwbGl0IiwicnkiLCJyeCIsImNvbWJpbmUiLCJtZXJnZSIsImNtcCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic3RhYmxlX3NvcnQiLCJzb3J0IiwieDIiLCJ4MSIsInMiLCJ4MyIsIm4xIiwibjIiLCJzMSIsInMyIiwicmV2X3NvcnQiLCJzb3J0X3VuaXEiLCJjIiwiY29tcGFyZV9sZW5ndGhzIiwiY29tcGFyZV9sZW5ndGhfd2l0aCIsImlzX2VtcHR5IiwiZXF1YWwiLCJlcSIsImNvbXBhcmUiLCJ0b19zZXEiLCJhdXgiLCJ0YWlsIiwib2Zfc2VxIiwic2VxIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdB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LEtBQWY7QUFBQTtBQUFBO0FBQUEsR0FDc0I7QUFBQSxZQUFBTyxPQUFBaEg7QUFBQUEsYUFBQWlILElBQUFqSCxHQUFBRTtBQUFBQSxLQUtMLFFBQ1Q7QUFBQSxTQUFBZ0gsT0FEUyxNQUFBakUsSUFBQTtBQUFBLEtBRW1CLDBCQUFSLHNCQUFRO0FBQUEsSUFBQztBQUFBLElBRXZDO0FBQUEsR0FBSztBQUFBLFlBQUFrRSxPQUFBQztBQUFBQSxRQUFBekYsUUFHQztBQUFBLElBQU0sWUFDQztBQUFBLFFBQUF5RixRQURELFVBQUFwQixLQUFBLFVBQUFyRSxVQUdJO0FBQUEsSUFBTSxjQUNMO0FBQUE7QUFBQSxLQUFBeUYsUUFESztBQUFBLEtBQUFyQixLQUFBO0FBQUEsS0FBQTFFLFFBRU07QUFBQSxLQUFBQyxNQUFZO0FBQUEsS0FBQUMsU0FBQTtBQUFBLEtBQUE2RixRQUFBO0FBQUE7QUFBQSxTQUFBekYsVUFMbEM7QUFBQSxLQUFNO0FBQUE7QUFBQSxPQUFBeUYsUUFBQTtBQUFBLE9BQUFwQixPQUFBO0FBQUEsT0FBQXJFLFVBR0k7QUFBQSxNQUFNO0FBQUEsV0FBQXlGLFFBQUEsWUFBQXJCLE9BQUEsWUFBQXpFLFFBRU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQURYO0FBQUE7QUFBQTtBQUFBLE1BSEo7QUFBQSxLQUlxQztBQUFBO0FBQUEsR0FDM0M7QUFBQSxHRHprQlQiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxMjY3NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaGFzaCIsImFicyIsIngiLCJsb2dub3QiLCJlcXVhbCIsImNvbXBhcmUiLCJtaW4iLCJ5IiwibWF4IiwidG9fc3RyaW5nIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEseUJBQUFDLFlBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQzRCWSwyQkFBd0I7QUFBQSxZQUFBQyxPQUFBRCxHQU1yQixjQUFhO0FBQUEsWUFBQUUsTUFBQSxNRGxDNUI7QUFBQSxPQUFBQyxVQUFBO0FBQUEsWUFBQUMsSUFBQUosR0FBQUssR0N3Q2tCLHFCQUF1QjtBQUFBLFlBQUFDLElBQUFOLEdBQUFLLEdBQ3ZCLHFCQUF1QjtBQUFBLFlBQUFFLFVBQUFQLEdBVU47QUFBQSxZQUFBUSxZQUFBQyxNQUFBVCxHQUlWLGtDQUErQjtBQUFBLFlBQUFVLEtBQUFWLEdBQzNDLCtCQUE0QjtBQUFBLEdEeER6QyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjEyNzE0LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J5dGVzLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCB1bnNhZmVfZXNjYXBlIHMgPVxuICAoKiBXZSBwZXJmb3JtIHR3byBwYXNzZXMgb24gdGhlIGlucHV0IHNlcXVlbmNlLCBvbmUgdG8gY29tcHV0ZSB0aGVcbiAgICAgcmVzdWx0IHNpemUgYW5kIG9uZSB0byB3cml0ZSB0aGUgcmVzdWx0LlxuXG4gICAgICMxMTUwOCwgIzExNTA5OiBUaGlzIGxvZ2ljIHdvdWxkIGJlIGluY29ycmVjdCBpbiBwcmVzZW5jZSBvZlxuICAgICBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiB0byB0aGUgaW5wdXQsIG1ha2luZyB0aGUgdXNlIG9mXG4gICAgIFt1bnNhZmVfc2V0XSBiZWxvdyBtZW1vcnktdW5zYWZlLlxuXG4gICAgIFByZWNvbmRpdGlvbjogVGhpcyBmdW5jdGlvbiBtYXkgYmUgc2FmZWx5IGNhbGxlZCBvbjpcbiAgICAgLSBhbiBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZVxuICAgICAtIGEgdW5pcXVlbHktb3duZWQgYnl0ZSBzZXF1ZW5jZSAodGhlIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcClcblxuICAgICBJbiBlaXRoZXIgY2FzZSB3ZSByZXR1cm4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlLlxuICAqKVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIHNcbiAgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBlc2NhcGVkIGIgPVxuICBsZXQgYiA9IGNvcHkgYiBpblxuICAoKiBXZSBjb3B5IG91ciBpbnB1dCB0byBvYnRhaW4gYSB1bmlxdWVseS1vd25lZCBieXRlIHNlcXVlbmNlIFtiXVxuICAgICB0byBzYXRpc2Z5IFt1bnNhZmVfZXNjYXBlXSdzIHByZWNvbmRpdGlvbiAqKVxuICB1bnNhZmVfZXNjYXBlIGJcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9ieXRlcyIsImNhbWxfYnN3YXAxNiIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfYnl0ZXNfZ2V0MzIiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJkdW1teSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1VjaGFyIiwiQXNzZXJ0X2ZhaWx1cmUiLCJTdGRsaWJfU3lzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TZXEiLCJTdGRsaWJfQ2hhciIsIm1ha2UiLCJuIiwiYyIsInMiLCJpbml0IiwiaSIsImVtcHR5IiwiY29weSIsImxlbiIsInIiLCJ0b19zdHJpbmciLCJiIiwib2Zfc3RyaW5nIiwic3ViIiwib2ZzIiwic3ViX3N0cmluZyIsInN5bWJvbCIsImEiLCJtYXRjaCIsImV4dGVuZCIsImxlZnQiLCJyaWdodCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsImZpbGwiLCJibGl0IiwiczEiLCJvZnMxIiwiczIiLCJvZnMyIiwiYmxpdF9zdHJpbmciLCJpdGVyIiwiaXRlcmkiLCJjb25jYXQiLCJzZXAiLCJsIiwic2VwbGVuIiwiYWNjIiwicGFyYW0iLCJwb3MiLCJoZCIsInRsIiwieCIsImRzdCIsImNhdCIsImwxIiwibDIiLCJpc19zcGFjZSIsInRyaW0iLCJqIiwidW5zYWZlX2VzY2FwZSIsImVzY2FwZWQiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiYXBwbHkxIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpbmRleCIsImluZGV4X3JlY19vcHQiLCJpbmRleF9vcHQiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfcmVjIiwicmluZGV4IiwicmluZGV4X2Zyb20iLCJyaW5kZXhfcmVjX29wdCIsInJpbmRleF9vcHQiLCJyaW5kZXhfZnJvbV9vcHQiLCJjb250YWluc19mcm9tIiwiZXhuIiwiY29udGFpbnMiLCJyY29udGFpbnNfZnJvbSIsImNvbXBhcmUiLCJzcGxpdF9vbl9jaGFyIiwidG9fc2VxIiwiYXV4IiwidG9fc2VxaSIsIm9mX3NlcSIsImJ1ZiIsIm5ld19sZW4iLCJuZXdfYnVmIiwidW5zYWZlX2dldF91aW50MTZfbGUiLCJ1bnNhZmVfZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQ4IiwiZ2V0X3VpbnQxNl9sZSIsImdldF91aW50MTZfYmUiLCJnZXRfaW50MTZfbmUiLCJnZXRfaW50MTZfbGUiLCJnZXRfaW50MTZfYmUiLCJnZXRfaW50MzJfbGUiLCJnZXRfaW50MzJfYmUiLCJnZXRfaW50NjRfbGUiLCJnZXRfaW50NjRfYmUiLCJ1bnNhZmVfc2V0X3VpbnQxNl9sZSIsInVuc2FmZV9zZXRfdWludDE2X2JlIiwic2V0X2ludDE2X2xlIiwic2V0X2ludDE2X2JlIiwic2V0X2ludDMyX2xlIiwic2V0X2ludDMyX2JlIiwic2V0X2ludDY0X2xlIiwic2V0X2ludDY0X2JlIiwiZGVjX2ludmFsaWQiLCJkZWNfcmV0IiwidSIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiZ2V0X3V0Zl84X3VjaGFyIiwibWF4IiwiY3N0X2J5dGVzX21sIiwic2V0X3V0Zl84X3VjaGFyIiwic2V0IiwibGFzdCIsImlzX3ZhbGlkX3V0Zl84IiwiY3N0X2luZGV4X291dF9vZl9ib3VuZHMiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJoaSIsImxvIiwic2V0X3V0Zl8xNmJlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2YmUiLCJnZXRfdXRmXzE2bGVfdWNoYXIiLCJzZXRfdXRmXzE2bGVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZsZSIsIlN0ZGxpYl9CeXRlcyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEs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cCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvc3RyaW5nLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBiID0gYm9zIHMgaW5cbiAgKCogV2Ugc2F0aXNmeSBbdW5zYWZlX2VzY2FwZV0ncyBwcmVjb25kaXRpb24gYnkgcGFzc2luZyBhblxuICAgICBpbW11dGFibGUgYnl0ZSBzZXF1ZW5jZSBbYl0uICopXG4gIGJ0cyAoQi51bnNhZmVfZXNjYXBlIGIpXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2ggOiBpbnQgLT4gc3RyaW5nIC0+IGludCA9IFwiY2FtbF9zdHJpbmdfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2ggMCB4XG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGl0X3N0cmluZyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfaGFzaCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX0J5dGVzIiwiYnRzIiwiYm9zIiwibWFrZSIsIm4iLCJjIiwiaW5pdCIsIm9mX2J5dGVzIiwidG9fYnl0ZXMiLCJzdWIiLCJzIiwib2ZzIiwibGVuIiwiYmxpdCIsImNzdCIsImNvbmNhdCIsInNlcCIsImwiLCJzZXBsZW4iLCJhY2MiLCJwYXJhbSIsInBvcyIsImhkIiwidGwiLCJ4IiwiZHN0IiwiY2F0IiwiaXRlciIsImkiLCJpdGVyaSIsIm1hcCIsIm1hcGkiLCJmb2xkX3JpZ2h0IiwiYSIsImZvbGRfbGVmdCIsImV4aXN0cyIsImZvcl9hbGwiLCJpc19zcGFjZSIsInRyaW0iLCJlc2NhcGVkIiwiYiIsImluZGV4X3JlYyIsImxpbSIsImluZGV4IiwiaW5kZXhfcmVjX29wdCIsImluZGV4X29wdCIsImluZGV4X2Zyb20iLCJpbmRleF9mcm9tX29wdCIsInJpbmRleF9yZWMiLCJyaW5kZXgiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9yZWNfb3B0IiwicmluZGV4X29wdCIsInJpbmRleF9mcm9tX29wdCIsImNvbnRhaW5zX2Zyb20iLCJleG4iLCJjb250YWlucyIsInJjb250YWluc19mcm9tIiwidXBwZXJjYXNlX2FzY2lpIiwibG93ZXJjYXNlX2FzY2lpIiwiY2FwaXRhbGl6ZV9hc2NpaSIsInVuY2FwaXRhbGl6ZV9hc2NpaSIsInN0YXJ0c193aXRoIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwiZW5kc193aXRoIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJoYXNoIiwic3BsaXRfb25fY2hhciIsImoiLCJyIiwiY29tcGFyZSIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnIiwiZ2V0X3V0Zl84X3VjaGFyIiwiaXNfdmFsaWRfdXRmXzgiLCJnZXRfdXRmXzE2YmVfdWNoYXIiLCJpc192YWxpZF91dGZfMTZiZSIsImdldF91dGZfMTZsZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmxlIiwiZ2V0X2ludDgiLCJnZXRfdWludDE2X2xlIiwiZ2V0X3VpbnQxNl9iZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQzMl9iZSIsImdldF9pbnQ2NF9sZSIsImdldF9pbnQ2NF9iZSIsIlN0ZGxpYl9TdHJpbmciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHlCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsTUFBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBQyxHQ21DRSxPQUFVLElBQVYsaUNBQWlCO0FBQUEsWUFBQUMsS0FBQUYsR0FBQVYsR0FFakIsT0FBVSxJQUFWLGlDQUFpQjtBQUFBLE9BQUFhLFdEckNuQixpQkFBQUMs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O0FBQUFBLFFBQUEsSUFDQztBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUEyRCxjQUFBN0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE0RCxhQUFBOUUsR0FBQWtCO0FBQUFBLFFBQUEsSUFDWDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE2RCxhQUFBL0UsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUE4RCxhQUFBaEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUErRCxhQUFBakYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFnRSxhQUFBbEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFpRSxhQUFBbkYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBLFlBQUFrRSxhQUFBcEYsR0FBQWtCO0FBQUFBLFFBQUEsSUFDVDtBQUFBLElBQU8sd0NBQUU7QUFBQTtBQUFBO0FBQUEsSUFBQW1FO0FBQUFBLE1EblIvQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE0MzY5LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2FycmF5Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBtdXN0IG5vdCBldmFsdWF0ZSBbZiAwXSB3aGVuIFtsIDw9IDBdLlxuICAgICBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkubWFrZV9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICAgIGRvbmU7XG4gIGVuZDtcbiAgcmVzXG5cbmxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgKCogV2UgcmFpc2UgZXZlbiBpZiBbc3ggPSAwICYmIHN5IDwgMF06ICopXG4gIGlmIHN5IDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdF9tYXRyaXhcIjtcbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gICgqIFdlIG11c3Qgbm90IGV2YWx1YXRlIFtmIHggMF0gd2hlbiBbc3kgPD0gMF06ICopXG4gIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgKGYgeCAwKSBpblxuICAgICAgZm9yIHkgPSAxIHRvIHByZWQgc3kgZG9cbiAgICAgICAgdW5zYWZlX3NldCByb3cgeSAoZiB4IHkpXG4gICAgICBkb25lO1xuICAgICAgdW5zYWZlX3NldCByZXMgeCByb3dcbiAgICBkb25lO1xuICBlbmQ7XG4gIHJlc1xuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gIGRvbmVcblxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICBkb25lXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX2luZGV4IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gU29tZSBpXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcGkgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiBpICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbmxldCBzaHVmZmxlIH5yYW5kIGEgPSAoKiBGaXNoZXItWWF0ZXMgKilcbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICBsZXQgaiA9IHJhbmQgKGkgKyAxKSBpblxuICAgIGxldCB2ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgdW5zYWZlX3NldCBhIGogdlxuICBkb25lXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9hcnJheV9zdWIiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1NlcSIsIkFzc2VydF9mYWlsdXJlIiwiU3RkbGliIiwiaW5pdCIsImwiLCJyZXMiLCJpIiwibWFrZV9tYXRyaXgiLCJzeCIsInN5IiwieCIsImluaXRfbWF0cml4Iiwicm93IiwieSIsImNvcHkiLCJhIiwiYXBwZW5kIiwiYTIiLCJsMSIsInN1YiIsIm9mcyIsImxlbiIsImZpbGwiLCJ2IiwiYmxpdCIsIm9mczEiLCJvZnMyIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcGlfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwidG9fbGlzdCIsImxpc3RfbGVuZ3RoIiwiYWNjdSIsInBhcmFtIiwidCIsIm9mX2xpc3QiLCJ0bCIsImhkIiwiZm9sZF9sZWZ0IiwiZm9sZF9sZWZ0X21hcCIsImFjYyIsImlucHV0X2FycmF5IiwibWF0Y2giLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJmb2xkX3JpZ2h0IiwiZXhpc3RzIiwicCIsIm4iLCJmb3JfYWxsIiwiZm9yX2FsbDIiLCJsMiIsIm4xIiwibjIiLCJleGlzdHMyIiwibWVtIiwibWVtcSIsImZpbmRfb3B0IiwiZmluZF9pbmRleCIsImZpbmRfbWFwIiwiZmluZF9tYXBpIiwic3BsaXQiLCJiMCIsImJpIiwiYWkiLCJjb21iaW5lIiwibmEiLCJuYiIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdCIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwiU3RkbGliX0FycmF5Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxLQUFBQyxHQUFBVDtBQUFBQSxJQytDRSxZQUFjO0FBQUEsSUFDZCxVQUFjLHlDQVNWO0FBQUEsUUFBQVUsTUFKTyxrQkFBUyx1QkFDbkI7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLE1BQ21CO0FBQUEsY0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFFeEI7QUFBQSxHQUFHO0FBQUEsWUFBQUMsWUFBQUMsSUFBQUMsSUFBQU47QUFBQUEsSUFJSixXQUFlO0FBQUEsUUFBQUUsTUFDTDtBQUFBLElBQ1Y7QUFBQSxhQUFlO0FBQUE7QUFBQSxVQUFBSyxJQUFBO0FBQUE7QUFBQSxPQUVNO0FBQUEsZUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsSUFBQXlHO0FBQUFBLE1EcGVmIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTUxMjQsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZmxvYXQubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgIE5pY29sYXMgT2plZGEgQmFyLCBMZXhpRmkgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIG5lZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgYWRkIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCBzdWIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsIG11bCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgZGl2IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCByZW0gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZtYSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2ZtYV9mbG9hdFwiIFwiY2FtbF9mbWFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5cbmxldCB6ZXJvID0gMC5cbmxldCBvbmUgPSAxLlxubGV0IG1pbnVzX29uZSA9IC0xLlxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBxdWlldF9uYW4gPSBuYW5cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgc2lnbmFsaW5nX25hbiA9IGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBpc19maW5pdGUgKHg6IGZsb2F0KSA9IHggLS4geCA9IDAuXG5sZXQgaXNfaW5maW5pdGUgKHg6IGZsb2F0KSA9IDEuIC8uIHggPSAwLlxubGV0IGlzX25hbiAoeDogZmxvYXQpID0geCA8PiB4XG5cbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgbWF4X2Zsb2F0ID0gU3RkbGliLm1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IFN0ZGxpYi5taW5fZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmdfb3B0ID0gU3RkbGliLmZsb2F0X29mX3N0cmluZ19vcHRcbmxldCB0b19zdHJpbmcgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0XG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcG93IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjYnJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2JydF9mbG9hdFwiIFwiY2FtbF9jYnJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cDIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHAyX2Zsb2F0XCIgXCJjYW1sX2V4cDJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzJfZmxvYXRcIiBcImNhbWxfbG9nMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmX2Zsb2F0XCIgXCJjYW1sX2VyZlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmZjIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXJmY19mbG9hdFwiIFwiY2FtbF9lcmZjXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRydW5jIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdHJ1bmNfZmxvYXRcIiBcImNhbWxfdHJ1bmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgcm91bmQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9yb3VuZF9mbG9hdFwiIFwiY2FtbF9yb3VuZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG5bQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgaXNfaW50ZWdlciB4ID0geCA9IHRydW5jIHggJiYgaXNfZmluaXRlIHhcblxuZXh0ZXJuYWwgbmV4dF9hZnRlciA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gID0gXCJjYW1sX25leHRhZnRlcl9mbG9hdFwiIFwiY2FtbF9uZXh0YWZ0ZXJcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuXG5sZXQgc3VjYyB4ID0gbmV4dF9hZnRlciB4IGluZmluaXR5XG5sZXQgcHJlZCB4ID0gbmV4dF9hZnRlciB4IG5lZ19pbmZpbml0eVxuXG5leHRlcm5hbCBjb3B5X3NpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpZ25fYml0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGJvb2xcbiAgPSBcImNhbWxfc2lnbmJpdF9mbG9hdFwiIFwiY2FtbF9zaWduYml0XCIgW0BAbm9hbGxvY11cblxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbnR5cGUgdCA9IGZsb2F0XG5leHRlcm5hbCBjb21wYXJlIDogZmxvYXQgLT4gZmxvYXQgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgZXF1YWwgeCB5ID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldFtAaW5saW5lXSBtaW4gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heCAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB8fCBpc19uYW4geSB0aGVuIChuYW4sIG5hbilcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgsIHkpIGVsc2UgKHksIHgpXG5cbmxldFtAaW5saW5lXSBtaW5fbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiBpc19uYW4geCB0aGVuICh5LHkpXG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiAoeCx4KVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCx5KSBlbHNlICh5LHgpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5cbm1vZHVsZSBBcnJheSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IGZsb2F0YXJyYXlcblxuICBleHRlcm5hbCBsZW5ndGggOiB0IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcblxuICBsZXQgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGZvciBpID0gb2ZzIHRvIG9mcyArIGxlbiAtIDEgZG8gdW5zYWZlX3NldCBhIGkgdiBkb25lXG5cbiAgZXh0ZXJuYWwgdW5zYWZlX2JsaXQ6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0ID1cbiAgICBcImNhbWxfZmxvYXRhcnJheV9ibGl0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBtYWtlX21hdHJpeCBzeCBzeSB2ID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1ha2VfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgcmVzIHggKG1ha2Ugc3kgdilcbiAgICAgIGRvbmU7XG4gICAgZW5kO1xuICAgIHJlc1xuXG4gIGxldCBpbml0X21hdHJpeCBzeCBzeSBmID1cbiAgICAoKiBXZSByYWlzZSBldmVuIGlmIFtzeCA9IDAgJiYgc3kgPCAwXTogKilcbiAgICBpZiBzeSA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRfbWF0cml4XCI7XG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2Ugc3ggKGNyZWF0ZSAwKSBpblxuICAgIGlmIHN5ID4gMCB0aGVuIGJlZ2luXG4gICAgICBmb3IgeCA9IDAgdG8gc3ggLSAxIGRvXG4gICAgICAgIGxldCByb3cgPSBjcmVhdGUgc3kgaW5cbiAgICAgICAgZm9yIHkgPSAwIHRvIHN5IC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgcm93IHkgKGYgeCB5KVxuICAgICAgICBkb25lO1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHJlcyB4IHJvd1xuICAgICAgZG9uZTtcbiAgICBlbmQ7XG4gICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtYXBfaW5wbGFjZSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgYSBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZVxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWFwaV9pbnBsYWNlIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCBhIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZmluZF9vcHQgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfaW5kZXggcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIFNvbWUgaVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZpbmRfbWFwIGYgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmaW5kX21hcGkgZiBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIG1hdGNoIGYgaSAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgc2h1ZmZsZSB+cmFuZCBhID0gKCogRmlzaGVyLVlhdGVzICopXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDEgZG9cbiAgICAgIGxldCBqID0gcmFuZCAoaSArIDEpIGluXG4gICAgICBsZXQgdiA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB1bnNhZmVfc2V0IGEgaiB2XG4gICAgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9oYXNoIiwiY2FtbF9tYWtlX3ZlY3QiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU2VxIiwiU3RkbGliX0xpc3QiLCJBc3NlcnRfZmFpbHVyZSIsIlN0ZGxpYiIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwiaXNfZmluaXRlIiwieCIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm9mX3N0cmluZ19vcHQiLCJ0b19zdHJpbmciLCJpc19pbnRlZ2VyIiwic3VjYyIsInByZWQiLCJlcXVhbCIsInkiLCJtaW4iLCJtYXgiLCJtaW5fbWF4IiwibWluX251bSIsIm1heF9udW0iLCJtaW5fbWF4X251bSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJ1bnNhZmVfZmlsbCIsImEiLCJvZnMiLCJsZW4iLCJ2IiwiaSIsImNoZWNrIiwibXNnIiwibWFrZSIsIm4iLCJyZXN1bHQiLCJpbml0IiwibCIsInJlcyIsIm1ha2VfbWF0cml4Iiwic3giLCJzeSIsImluaXRfbWF0cml4Iiwicm93IiwiYXBwZW5kIiwiYTIiLCJsMSIsImwyIiwiY3N0X2Zsb2F0X21sIiwiY29uY2F0IiwiYWNjIiwicGFyYW0iLCJ0bCIsImhkIiwiaGxlbiIsInN1YiIsImNvcHkiLCJmaWxsIiwiYmxpdCIsInNyYyIsInNvZnMiLCJkc3QiLCJkb2ZzIiwiY3N0X0Zsb2F0X2FycmF5X2JsaXQiLCJ0b19saXN0Iiwib2ZfbGlzdCIsInQiLCJoIiwiaXRlciIsIml0ZXIyIiwiYiIsIm1hcCIsInIiLCJtYXBfaW5wbGFjZSIsIm1hcDIiLCJsYSIsImxiIiwiaXRlcmkiLCJtYXBpIiwibWFwaV9pbnBsYWNlIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImV4aXN0cyIsInAiLCJmb3JfYWxsIiwibWVtIiwibWVtX2llZWUiLCJmaW5kX29wdCIsImZpbmRfaW5kZXgiLCJmaW5kX21hcCIsImZpbmRfbWFwaSIsIkJvdHRvbSIsInNvcnQiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJlIiwiaiIsImV4biIsImZhdGhlciIsInN0YWJsZV9zb3J0IiwibWVyZ2UiLCJzcmMxb2ZzIiwic3JjMWxlbiIsInNyYzIiLCJzcmMyb2ZzIiwic3JjMmxlbiIsImRzdG9mcyIsInNyYzFyIiwic3JjMnIiLCJzMiIsInMxIiwiaTEiLCJpMiIsImQiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwic2h1ZmZsZSIsInJhbmQiLCJ0b19zZXEiLCJhdXgiLCJ0b19zZXFpIiwib2Zfc2VxIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJTdGRsaWJfRmxvYXQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7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QUFBQTtBQUFBLFNBQUExQyxJQUFBO0FBQUE7QUFBQSxNQUNpQjtBQUFBLGNBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUUzQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFnRztBQUFBQSxNQXJrQnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkRyQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdDcUM0RDtBQUFBO0FBQUEsRURyQzVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTU5OTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaW50MzIubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50MzJdOiAzMi1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQzMiAtPiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50MzIgPSBcIiVpbnQzMl9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50MzIgLT4gaW50ID0gXCIlaW50MzJfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX3RvX2Zsb2F0XCIgXCJjYW1sX2ludDMyX3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDMyXG4gID0gXCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQzMiAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCB6ZXJvID0gMGxcbmxldCBvbmUgPSAxbFxubGV0IG1pbnVzX29uZSA9IC0xbFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFsXG5sZXQgcHJlZCBuID0gc3ViIG4gMWxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMGwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMGxcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRmxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMWwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBtYXRjaCBTeXMud29yZF9zaXplIHdpdGhcbiAgfCAzMiAtPlxuICAgICAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgICAgIGZ1biBuIC0+XG4gICAgICAgIGlmIG4gPj0gMGwgJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBpbnQzMlxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IHggPSB5XG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgdW5zaWduZWRfbHQgbiBtID1cbiAgc3ViIG4gbWluX2ludCA8IHN1YiBtIG1pbl9pbnRcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lIGJpdG5lc3MuXG4gICBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfbHQgbiBkIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9sdCByIGQgdGhlbiBxIGVsc2Ugc3VjYyBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2giLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tdWwiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWIiLCJTdGRsaWJfU3lzIiwiQXNzZXJ0X2ZhaWx1cmUiLCJzdWNjIiwibiIsInByZWQiLCJhYnMiLCJsb2dub3QiLCJtYXRjaCIsIm1heF9pbnQiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmciLCJvZl9zdHJpbmdfb3B0IiwicyIsImV4biIsImVxdWFsIiwidW5zaWduZWRfY29tcGFyZSIsIm0iLCJ5IiwieCIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwiemVybyIsIm9uZSIsInVuc2lnbmVkX2RpdiIsImQiLCJxIiwiciIsInVuc2lnbmVkX3JlbSIsInNlZWRlZF9oYXNoIiwic2VlZCIsImhhc2giLCJTdGRsaWJfSW50MzIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDK0NxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBLFlBQUFHLE9BQUFILEdBR1g7QUFBQSxPQUFBSSxRRHBEN0I7QUFBQTtBQUFBO0FBQUEsS0FBQUMsVUN5RG9CO0FBQUEsS0FBQUM7QUFBQUEsT0FDZCxTQUFBTjtBQUFBQSxRQUNLLDhCQUFXO0FBQUEsU0FDWjtBQUFBLFFBRUE7QUFBQSxPQUFJO0FBQUE7QUFBQSxJRDlEZDtBQUFBLEtDb0VNO0FBQUE7QUFBQSxRQUFBTSxrQkFGQSxTQUFBTixHQUFTLG1CQUF5QjtBQUFBO0FBQUEsWUFBQU8sVUFBQVAsR0FLdEIsdUNBQWE7QUFBQSxZQUFBUSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTUQ1RVg7QUFBQSw4QkM2RW9CO0FBQUEsS0Q3RXBCO0FBQUE7QUFBQSxHQzZFd0I7QUFBQSxPQUFBQyxRRDdFeEI7QUFBQSxZQUFBQyxpQkFBQVosR0FBQWE7QUFBQUEsUUFBQUMsSUNxRjBCLG9CQUFBQyxJQUFoQjtBQUFBLElBSmtCLDZCQUlhO0FBQUE7QUFBQSxZQUFBQyxZQUFBaEIsR0FBQWE7QUFBQUEsSUFHdkMsNERBQTZCO0FBQUE7QUFBQSxZQUFBSSxJQUFBRixHQUFBRCxHQUVWLG1DQUFvQjtBQUFBLFlBQUFJLElBQUFILEdBQUFELEdBQ3BCLHNDQUFvQjtBQUFBLE9BQUFLLE9EM0Z6QyxHQUFBQyxNQUFBO0FBQUEsWUFBQUMsYUFBQXJCLEdBQUFzQjtBQUFBQSxJQ2lHSyx3QkFDRSxxQ0FJa0M7QUFBQSxRQUFBQyxJQUZsQix1Q0FBQUMsSUFDTDtBQUFBLElBQ1gsd0NBQWtDO0FBQUE7QUFBQSxZQUFBQyxhQUFBekIsR0FBQXNCO0FBQUFBLElBRzVCLFdBQUwsU0FBSywwQkFBcUI7QUFBQTtBQUFBLFlBQUFJLFlBQUFDLE1BQUFaLEdBSVQsa0NBQStCO0FBQUEsWUFBQWEsS0FBQWIsR0FDM0MsK0JBQTRCO0FBQUE7QUFBQSxJQUFBYztBQUFBQSxNRDlHekMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjA5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbnQ2NC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQ2NF06IDY0LWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQ2NCAtPiBpbnQgPSBcIiVpbnQ2NF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQ2NFxuICA9IFwiY2FtbF9pbnQ2NF9vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfdG9fZmxvYXRcIiBcImNhbWxfaW50NjRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMiA6IGludDMyIC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzIgOiBpbnQ2NCAtPiBpbnQzMiA9IFwiJWludDY0X3RvX2ludDMyXCJcbmV4dGVybmFsIG9mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiBpbnQ2NCA9IFwiJWludDY0X29mX25hdGl2ZWludFwiXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBpbnQ2NCAtPiBuYXRpdmVpbnQgPSBcIiVpbnQ2NF90b19uYXRpdmVpbnRcIlxuXG5sZXQgemVybyA9IDBMXG5sZXQgb25lID0gMUxcbmxldCBtaW51c19vbmUgPSAtMUxcbmxldCBzdWNjIG4gPSBhZGQgbiAxTFxubGV0IHByZWQgbiA9IHN1YiBuIDFMXG5sZXQgYWJzIG4gPSBpZiBuID49IDBMIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgbWluX2ludCA9IDB4ODAwMDAwMDAwMDAwMDAwMExcbmxldCBtYXhfaW50ID0gMHg3RkZGRkZGRkZGRkZGRkZGTFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xTClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgbiA+PSAwTCAmJiBuIDw9IG1heF9pbnQgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0geCA9IHlcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCB1bnNpZ25lZF9sdCBuIG0gPVxuICBzdWIgbiBtaW5faW50IDwgc3ViIG0gbWluX2ludFxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWUgYml0bmVzcy5cbiAgIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9sdCBuIGQgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2x0IHIgZCB0aGVuIHEgZWxzZSBzdWNjIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2dyZWF0ZXJlcXVhbCIsImNhbWxfaGFzaCIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X211bCIsImNhbWxfaW50NjRfc3ViIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJtaW5faW50IiwibWF4X2ludCIsIlN0ZGxpYiIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiY29tcGFyZSIsIngiLCJ5IiwiZXF1YWwiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsInVuc2lnbmVkX2x0IiwibWluIiwibWF4IiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsNkJBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQTtBQUFBLElBQUFDLE9BQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDNkNhLDJCQUFRO0FBQUEsWUFBQUMsS0FBQUQsR0FDUiwyQkFBUTtBQUFBLFlBQUFFLElBQUFGO0FBQUFBLElBQ04scUNBQW9CLHlCQUFLO0FBQUE7QUFBQSxZQUFBRyxPQUFBSCxHQUd6QixtQ0FBYztBQUFBO0FBQUEsSUFBQUgsWUFHYjtBQUFBLFFBQ2Q7QUFBQSxZQUFBTyxnQkFBQUo7QUFBQUEsSUFDSyw4QkFBVztBQUFBLEtBQ1o7QUFBQSxJQUVBO0FBQUEsR0FBSTtBQUFBLFlBQUFLLFVBQUFMLEdBR1EseUNBQWE7QUFBQSxZQUFBTSxjQUFBQztBQUFBQSxJQUs3QixZQUFTO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsTURsRVg7QUFBQSw4QkNtRW9CO0FBQUEsS0RuRXBCO0FBQUE7QUFBQSxHQ21Fd0I7QUFBQSxZQUFBQyxRQUFBQyxHQUFBQyxHQVdJLCtCQUFrQjtBQUFBLE9BQUFDLFFBeEI1QztBQUFBLFlBQUFDLGlCQUFBYixHQUFBYztBQUFBQSxRQUFBSCxJQTRCd0IsNEJBQUFELElBQWhCO0FBQUEsSUFKa0IsK0JBSWE7QUFBQTtBQUFBLFlBQUFLLFlBQUFmLEdBQUFjO0FBQUFBLElBR3ZDO0FBQUEseUNBQWdCLDJCQUFhO0FBQUE7QUFBQSxZQUFBRSxJQUFBTixHQUFBQyxHQUVWLG1DQUFvQjtBQUFBLFlBQUFNLElBQUFQLEdBQUFDLEdBQ3BCLHNDQUFvQjtBQUFBLFlBQUFPLGFBQUFsQixHQUFBbUI7QUFBQUEsSUFNcEMsMkJBQ0UscUNBSWtDO0FBQUE7QUFBQSxLQUFBQztBQUFBQSxPQUY3QjtBQUFBLFNBQVc7QUFBQSxXQUFLO0FBQUE7QUFBQSxLQUFBQyxJQUNoQixrQkFBTTtBQUFBLElBQ1gsK0JBdERNLG9CQXNENEI7QUFBQTtBQUFBLFlBQUFDLGFBQUF0QixHQUFBbUI7QUFBQUEsSUFHNUIsT0FBWCxrQkFBTSxlQUFLLHVCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWQsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZSxLQUFBZixHQUMzQywrQkFBNEI7QUFBQSxHQXJEdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEdERGIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTYxOTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIG4gPj0gMG4gJiYgbiA8PSBtYXhfaW50IHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IHVuc2lnbmVkX2x0IG4gbSA9XG4gIHN1YiBuIG1pbl9pbnQgPCBzdWIgbSBtaW5faW50XG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZSBiaXRuZXNzLlxuICAgU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2x0IG4gZCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfbHQgciBkIHRoZW4gcSBlbHNlIHN1Y2MgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9oYXNoIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbXVsIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImdsb2JhbF9kYXRhIiwiU3RkbGliIiwiU3RkbGliX1N5cyIsInN1Y2MiLCJuIiwicHJlZCIsImFicyIsInNpemUiLCJtaW5faW50IiwibWF4X2ludCIsImxvZ25vdCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJzIiwiZXhuIiwiZXF1YWwiLCJ4IiwieSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfbHQiLCJtaW4iLCJtYXgiLCJ6ZXJvIiwib25lIiwidW5zaWduZWRfZGl2IiwiZCIsInEiLCJyIiwidW5zaWduZWRfcmVtIiwic2VlZGVkX2hhc2giLCJzZWVkIiwiaGFzaCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLFlBQUFDLEtBQUFDLEdDMkNxQjtBQUFBLFlBQUFDLEtBQUFELEdBQ0E7QUFBQSxZQUFBRSxJQUFBRixHQUNOLDRDQUF5QjtBQUFBO0FBQUEsSUFBQUcsT0Q3Q3hDO0FBQUEsSUFBQUMsVUMrQ2M7QUFBQSxJQUFBQyxVQUNBO0FBQUEsWUFBQUMsT0FBQU4sR0FDZTtBQUFBLE9BQUFLLFlBR2I7QUFBQSxZQUFBRSxnQkFBQVA7QUFBQUEsSUFFVCw4QkFBVyw4QkFDWjtBQUFBLElBRUE7QUFBQSxHQUFJO0FBQUEsWUFBQVEsVUFBQVIsR0FHUSx1Q0FBYTtBQUFBLFlBQUFTLGNBQUFDO0FBQUFBLElBSzdCLFlBQVM7QUFBQSxVQUFBQztBQUFBQSxTQUFBQSxNRGpFWDtBQUFBLDhCQ2tFb0I7QUFBQSxLRGxFcEI7QUFBQTtBQUFBLEdDa0V3QjtBQUFBLFlBQUFDLE1BQUFDLEdBQUFDLEdBSUksMkNBQ1MsQ0FBSTtBQUFBLFlBQUFDLGlCQUFBZixHQUFBZ0I7QUFBQUEsUUFBQUYsSUFHZixpQkFBQUQsSUFBaEI7QUFBQSxJQUprQiw2QkFJYTtBQUFBO0FBQUEsWUFBQUksWUFBQWpCLEdBQUFnQjtBQUFBQSxJQUd2QyxzREFBNkI7QUFBQTtBQUFBLFlBQUFFLElBQUFMLEdBQUFDLEdBRVYsbUNBQW9CO0FBQUEsWUFBQUssSUFBQU4sR0FBQUMsR0FDcEIsc0NBQW9CO0FBQUEsT0FBQU0sT0RoRnpDLEdBQUFDLE1BQUE7QUFBQSxZQUFBQyxhQUFBdEIsR0FBQXVCO0FBQUFBLElDc0ZLLHdCQUNFLHFDQUlrQztBQUFBLFFBQUFDLElBRmxCLHVDQUFBQyxJQUNMO0FBQUEsSUFDWCx3Q0FBa0M7QUFBQTtBQUFBLFlBQUFDLGFBQUExQixHQUFBdUI7QUFBQUEsSUFHNUIsV0FBTCxTQUFLLDBCQUFxQjtBQUFBO0FBQUEsWUFBQUksWUFBQUMsTUFBQWYsR0FJVCxrQ0FBK0I7QUFBQSxZQUFBZ0IsS0FBQWhCLEdBQzNDLCtCQUE0QjtBQUFBLEdBOUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFRHJERiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjE2MjkwLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2J1ZmZlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbigqIFRoZSBbaW5uZXJfYnVmZmVyXSB0eXBlIGVuc3VyZXMgdGhhdCB0aGUgW2xlbmd0aF0gYW5kIFtidWZmZXJdIGZpZWxkcyBhcmVcbiAgIGFsd2F5cyBzeW5jaHJvbml6ZWQsIFtsZW5ndGggPSBCeXRlcy5sZW5ndGggYnVmZmVyXSwgZXZlbiBpbiBwcmVzZW5jZVxuICAgb2YgZGF0YSByYWNlcy5cbiopXG50eXBlIGlubmVyX2J1ZmZlciA9IHtcbiAgYnVmZmVyOiBieXRlcztcbiAgbGVuZ3RoOiBpbnQ7XG59XG5cbnR5cGUgdCA9XG4ge211dGFibGUgaW5uZXIgOiBpbm5lcl9idWZmZXI7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIGluaXRpYWxfYnVmZmVyIDogYnl0ZXN9XG4oKiBJbnZhcmlhbnRzOiBhbGwgcGFydHMgb2YgdGhlIGNvZGUgcHJlc2VydmUgdGhlIGludmFyaWFudHMgdGhhdDpcbiAgIC0gW2lubmVyLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBpbm5lci5idWZmZXJdXG4gICBJbiBhYnNlbmNlIG9mIGRhdGEgcmFjZXMsIHdlIGFsc28gaGF2ZVxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIuaW5uZXIubGVuZ3RoXVxuXG4gICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBbYi5wb3NpdGlvbiA9IGIuaW5uZXIubGVuZ3RoXSBpcyBsZWdhbCxcbiAgIGl0IG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWRcbiAgIGJlZm9yZSBhbnkgZnVydGhlciBhZGRpdGlvbi4gKilcblxubGV0IGNyZWF0ZSBuID1cbiBsZXQgbiA9IGlmIG4gPCAxIHRoZW4gMSBlbHNlIG4gaW5cbiBsZXQgbiA9IGlmIG4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBTeXMubWF4X3N0cmluZ19sZW5ndGggZWxzZSBuIGluXG4gbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuIHsgaW5uZXIgPSB7IGJ1ZmZlciA9IHM7IGxlbmd0aCA9IG59OyBwb3NpdGlvbiA9IDA7IGluaXRpYWxfYnVmZmVyID0gc31cblxubGV0IGNvbnRlbnRzIGIgPSBCeXRlcy5zdWJfc3RyaW5nIGIuaW5uZXIuYnVmZmVyIDAgYi5wb3NpdGlvblxubGV0IHRvX2J5dGVzIGIgPSBCeXRlcy5zdWIgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBzdWIgYiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGIucG9zaXRpb24gLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5zdWJcIlxuICBlbHNlIEJ5dGVzLnN1Yl9zdHJpbmcgYi5pbm5lci5idWZmZXIgb2ZzIGxlblxuXG5cbmxldCBibGl0IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IHNyY29mZiA8IDAgfHwgc3Jjb2ZmID4gc3JjLnBvc2l0aW9uIC0gbGVuXG4gICAgICAgICAgICAgfHwgZHN0b2ZmIDwgMCB8fCBkc3RvZmYgPiAoQnl0ZXMubGVuZ3RoIGRzdCkgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5ibGl0XCJcbiAgZWxzZVxuICAgIEJ5dGVzLmJsaXQgc3JjLmlubmVyLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjtsZW5ndGh9ID0gYi5pbm5lciBpblxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBwb3NpdGlvbiB8fCBwb3NpdGlvbiA+IGxlbmd0aCB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYnVmZmVyIG9mc1xuXG5cbmxldCBsZW5ndGggYiA9IGIucG9zaXRpb25cblxubGV0IGNsZWFyIGIgPSBiLnBvc2l0aW9uIDwtIDBcblxubGV0IHJlc2V0IGIgPVxuICBiLnBvc2l0aW9uIDwtIDA7XG4gIGxldCBpbm5lciA9XG4gICAgeyBidWZmZXIgPSBiLmluaXRpYWxfYnVmZmVyOyBsZW5ndGggPSBCeXRlcy5sZW5ndGggYi5pbml0aWFsX2J1ZmZlciB9XG4gIGluXG4gIGIuaW5uZXIgPC0gaW5uZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5pbm5lci5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuaW5uZXJdIGlmIG5lY2Vzc2FyeSAtLSBhbmQgdGh1c1xuICAgaW5jcmVhc2luZyBbYi5pbm5lci5sZW5ndGhdLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5pbm5lci5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuaW5uZXIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuaW5uZXIgPC0geyBidWZmZXIgPSBuZXdfYnVmZmVyOyBsZW5ndGggPSAhbmV3X2xlbiB9XG5cbigqIE5vdGU6XG4gICAgU29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGhhdmUgYSBmYXN0IHBhdGggd2hlbiB0aGUgaW5uZXJcbiAgYnVmZmVyIGRvZXNuJ3QgbmVlZCB0byBiZSBleHRlbmRlZC5cbiAgICBJbiB0aGlzIGNhc2UsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB1bnNhZmUgYWNjZXNzZXMgb24gdGhlXG4gIGNvbnRlbnRzIG9mIHRoZSBbaW5uZXJdIGZpZWxkIHNpbmNlIGl0cyBmaWVsZHMgYXJlIGltbXV0YWJsZS5cbiAgSW4gcHJlc2VuY2Ugb2YgZGF0YSByYWNlcywgd2UgbWF5IGFjY2VzcyB0aGUgd3JvbmcgaW5uZXIgYnVmZmVyLCBidXQgd2VcbiAgd2lsbCB1c2UgdGhpcyBidWZmZXIgc2FmZWx5LlxuICBBcyBzb29uIGFzIHdlIG5lZWQgdG8gcmVzaXplIHRoZSBidWZmZXIsIHdlIGZhbGwgYmFjayB0byBzYWZlIGFjY2Vzc2VzLlxuKilcblxubGV0IGFkZF9jaGFyIGIgYyA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7YnVmZmVyO2xlbmd0aH0gPSBiLmlubmVyIGluXG4gIGlmIHBvcyA+PSBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgMTtcbiAgICBCeXRlcy5zZXQgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiBjXG4gICkgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5pbm5lci5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmlubmVyLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmlubmVyLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuaW5uZXIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjtsZW5ndGh9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gbGVuZ3RoIHRoZW4gKFxuICAgIHJlc2l6ZSBiIGxlbjtcbiAgICBCeXRlcy5ibGl0X3N0cmluZyBzIG9mZnNldCBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGxlblxuICApIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYnVmZmVyIHBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2J1ZmZlcjsgbGVuZ3RofSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiBsZW47XG4gICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICApIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGJ1ZmZlciBwb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5pbm5lci5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIuaW5uZXIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmlubmVyLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICBiLnBvc2l0aW9uIDwtIGIucG9zaXRpb24gKyBuO1xuICBuXG5cbmxldCBhZGRfY2hhbm5lbCBiIGljIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gICAoKiBQUiM1MDA0ICopXG4gICAgaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX2NoYW5uZWxcIjtcbiAgbGV0IG4gPSB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gaW5cbiAgKCogSXQgaXMgaW50ZW50aW9uYWwgdGhhdCBhIGNvbnN1bWVyIGNhdGNoaW5nIEVuZF9vZl9maWxlXG4gICAgIHdpbGwgc2VlIHRoZSBkYXRhIHdyaXR0ZW4gKHNlZSAjNjcxOSwgIzcxMzYpLiAqKVxuICBpZiBuIDwgbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICgpXG5cbmxldCBvdXRwdXRfYnVmZmVyIG9jIGIgPVxuICBvdXRwdXQgb2MgYi5pbm5lci5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBjbG9zaW5nID0gZnVuY3Rpb25cbiAgfCAnKCcgLT4gJyknXG4gIHwgJ3snIC0+ICd9J1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIG9wZW5pbmcgYW5kIGNsb3Npbmc6IG9wZW4gYW5kIGNsb3NlIGNoYXJhY3RlcnMsIHR5cGljYWxseSAoIGFuZCApXG4gICBrOiBiYWxhbmNlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcnNcbiAgIHM6IHRoZSBzdHJpbmcgd2hlcmUgd2UgYXJlIHNlYXJjaGluZ1xuICAgc3RhcnQ6IHRoZSBpbmRleCB3aGVyZSB3ZSBzdGFydCB0aGUgc2VhcmNoLiAqKVxubGV0IGFkdmFuY2VfdG9fY2xvc2luZyBvcGVuaW5nIGNsb3NpbmcgayBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGsgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgICBpZiBzLltpXSA9IG9wZW5pbmcgdGhlbiBhZHZhbmNlIChrICsgMSkgKGkgKyAxKSBsaW0gZWxzZVxuICAgIGlmIHMuW2ldID0gY2xvc2luZyB0aGVuXG4gICAgICBpZiBrID0gMCB0aGVuIGkgZWxzZSBhZHZhbmNlIChrIC0gMSkgKGkgKyAxKSBsaW1cbiAgICBlbHNlIGFkdmFuY2UgayAoaSArIDEpIGxpbSBpblxuICBhZHZhbmNlIGsgc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxubGV0IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gbGltIGVsc2VcbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScgfCAnXycgLT4gYWR2YW5jZSAoaSArIDEpIGxpbVxuICAgIHwgXyAtPiBpIGluXG4gIGFkdmFuY2Ugc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxuKCogV2UgYXJlIGp1c3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpZGVudCBpbiBzLCBzdGFydGluZyBhdCBzdGFydC4gKilcbmxldCBmaW5kX2lkZW50IHMgc3RhcnQgbGltID1cbiAgaWYgc3RhcnQgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgbWF0Y2ggcy5bc3RhcnRdIHdpdGhcbiAgKCogUGFyZW50aGVzaXplZCBpZGVudCA/ICopXG4gIHwgJygnIHwgJ3snIGFzIGMgLT5cbiAgICAgbGV0IG5ld19zdGFydCA9IHN0YXJ0ICsgMSBpblxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fY2xvc2luZyBjIChjbG9zaW5nIGMpIDAgcyBuZXdfc3RhcnQgaW5cbiAgICAgU3RyaW5nLnN1YiBzIG5ld19zdGFydCAoc3RvcCAtIHN0YXJ0IC0gMSksIHN0b3AgKyAxXG4gICgqIFJlZ3VsYXIgaWRlbnQgKilcbiAgfCBfIC0+XG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCBpblxuICAgICBpZiBzdG9wID0gc3RhcnQgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgICBTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCksIHN0b3BcblxuKCogU3Vic3RpdHV0ZSAkaWRlbnQsICQoaWRlbnQpLCBvciAke2lkZW50fSBpbiBzLFxuICAgIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gbWFwcGluZyBmLiAqKVxubGV0IGFkZF9zdWJzdGl0dXRlIGIgZiBzID1cbiAgbGV0IGxpbSA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcmVjIHN1YnN0IHByZXZpb3VzIGkgPVxuICAgIGlmIGkgPCBsaW0gdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnJCcgYXMgY3VycmVudCB3aGVuIHByZXZpb3VzID0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnJCcgLT5cbiAgICAgICAgIGxldCBqID0gaSArIDEgaW5cbiAgICAgICAgIGJlZ2luIG1hdGNoIGZpbmRfaWRlbnQgcyBqIGxpbSB3aXRoXG4gICAgICAgICB8IGlkZW50LCBuZXh0X2kgLT5cbiAgICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgICAgc3Vic3QgJyAnIG5leHRfaVxuICAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+XG4gICAgICAgICAgIGFkZF9jaGFyIGIgJyQnO1xuICAgICAgICAgICBzdWJzdCAnICcgalxuICAgICAgICAgZW5kXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cztcbiAgICAgICAgIGlmIGN1cnJlbnQgPD4gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgZW5kIGVsc2VcbiAgICBpZiBwcmV2aW91cyA9ICdcXFxcJyB0aGVuIGFkZF9jaGFyIGIgcHJldmlvdXMgaW5cbiAgc3Vic3QgJyAnIDBcblxubGV0IHRydW5jYXRlIGIgbGVuID1cbiAgICBpZiBsZW4gPCAwIHx8IGxlbiA+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLnRydW5jYXRlXCJcbiAgICBlbHNlXG4gICAgICBiLnBvc2l0aW9uIDwtIGxlblxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMuZ2V0IGIuaW5uZXIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMuZ2V0IGIuaW5uZXIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5cbmxldCBhZGRfaW50OCBiIHggPVxuICBsZXQgcG9zaXRpb24gPSBiLnBvc2l0aW9uIGluXG4gIGxldCB7bGVuZ3RoOyBidWZmZXJ9ID0gYi5pbm5lciBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gcG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGxlbmd0aCB0aGVuIChcbiAgICByZXNpemUgYiAxO1xuICAgIHNldF9pbnQ4IGIuaW5uZXIuYnVmZmVyIGIucG9zaXRpb24geFxuICApIGVsc2VcbiAgICB1bnNhZmVfc2V0X2ludDggYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgMiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgMjtcbiAgICBzZXRfaW50MTYgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50MTYgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgNCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgNDtcbiAgICBzZXRfaW50MzIgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50MzIgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IHBvc2l0aW9uID0gYi5wb3NpdGlvbiBpblxuICBsZXQge2xlbmd0aDsgYnVmZmVyfSA9IGIuaW5uZXIgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IHBvc2l0aW9uICsgOCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBsZW5ndGggdGhlbiAoXG4gICAgcmVzaXplIGIgODtcbiAgICBzZXRfaW50NjQgYi5pbm5lci5idWZmZXIgYi5wb3NpdGlvbiB4XG4gICkgZWxzZVxuICAgIHVuc2FmZV9zZXRfaW50NjQgYnVmZmVyIHBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JsaXRfc3RyaW5nIiwiY2FtbF9ic3dhcDE2IiwiY2FtbF9ieXRlc19nZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDMyIiwiY2FtbF9ieXRlc19zZXQ2NCIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9pbnQzMl9ic3dhcCIsImNhbWxfaW50NjRfYnN3YXAiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfU3lzIiwiU3RkbGliX1NlcSIsIlN0ZGxpYiIsIlN0ZGxpYl9TdHJpbmciLCJBc3NlcnRfZmFpbHVyZSIsImR1bW15IiwiY3JlYXRlIiwibiIsInMiLCJjb250ZW50cyIsImIiLCJ0b19ieXRlcyIsInN1YiIsIm9mcyIsImxlbiIsImJsaXQiLCJzcmMiLCJzcmNvZmYiLCJkc3QiLCJkc3RvZmYiLCJudGgiLCJwb3NpdGlvbiIsIm1hdGNoIiwibGVuZ3RoIiwiYnVmZmVyIiwiY2xlYXIiLCJyZXNldCIsImlubmVyIiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImMiLCJwb3MiLCJhZGRfdXRmXzhfdWNoYXIiLCJ1IiwidWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4IiwidWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heCIsImFkZF91dGZfMTZiZV91Y2hhciIsImFkZF91dGZfMTZsZV91Y2hhciIsImFkZF9zdWJzdHJpbmciLCJvZmZzZXQiLCJuZXdfcG9zaXRpb24iLCJhZGRfc3ViYnl0ZXMiLCJhZGRfc3RyaW5nIiwiYWRkX2J5dGVzIiwiYWRkX2J1ZmZlciIsImJzIiwiYWRkX2NoYW5uZWwiLCJpYyIsInRvX3JlYWQiLCJidWYiLCJhbHJlYWR5X3JlYWQiLCJyIiwib3V0cHV0X2J1ZmZlciIsIm9jIiwiYWRkX3N1YnN0aXR1dGUiLCJsaW0iLCJwcmV2aW91cyIsImkiLCJzdGFydCIsIm9wZW5pbmciLCJzdG9wIiwidmFsIiwibmV3X3N0YXJ0IiwiY2xvc2luZyIsImsiLCJleG4iLCJuZXh0X2kiLCJpZGVudCIsInRydW5jYXRlIiwidG9fc2VxIiwiYXV4IiwicGFyYW0iLCJ4IiwidG9fc2VxaSIsImFkZF9zZXEiLCJzZXEiLCJvZl9zZXEiLCJhZGRfaW50OCIsImFkZF9pbnQxNl9uZSIsImFkZF9pbnQzMl9uZSIsImFkZF9pbnQ2NF9uZSIsImFkZF9pbnQxNl9sZSIsImFkZF9pbnQxNl9iZSIsImFkZF9pbnQzMl9sZSIsImFkZF9pbnQzMl9iZSIsImFkZF9pbnQ2NF9sZSIsImFkZF9pbnQ2NF9iZSJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHVCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFD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IjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvbXV0ZXgubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBQYXNjYWwgQ3VvcSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk1IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdFxuZXh0ZXJuYWwgY3JlYXRlOiB1bml0IC0+IHQgPSBcImNhbWxfbWxfbXV0ZXhfbmV3XCJcbmV4dGVybmFsIGxvY2s6IHQgLT4gdW5pdCA9IFwiY2FtbF9tbF9tdXRleF9sb2NrXCJcbmV4dGVybmFsIHRyeV9sb2NrOiB0IC0+IGJvb2wgPSBcImNhbWxfbWxfbXV0ZXhfdHJ5X2xvY2tcIlxuZXh0ZXJuYWwgdW5sb2NrOiB0IC0+IHVuaXQgPSBcImNhbWxfbWxfbXV0ZXhfdW5sb2NrXCJcblxuKCogcHJpdmF0ZSByZS1leHBvcnQgKilcbmV4dGVybmFsIHJlcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyZXJhaXNlXCJcblxuKCogY2Fubm90IGlubGluZSwgb3RoZXJ3aXNlIGZsYW1iZGEgbWlnaHQgbW92ZSBjb2RlIGFyb3VuZC4gKilcbmxldFtAaW5saW5lIG5ldmVyXSBwcm90ZWN0IG0gZiA9XG4gIGxvY2sgbTtcbiAgbWF0Y2ggZigpIHdpdGhcbiAgfCB4IC0+XG4gICAgdW5sb2NrIG07IHhcbiAgfCBleGNlcHRpb24gZSAtPlxuICAgICgqIE5PVEU6IFt1bmxvY2tdIGRvZXMgbm90IHBvbGwgZm9yIGFzeW5jaHJvbm91cyBleGNlcHRpb25zICopXG4gICAgdW5sb2NrIG07XG4gICAgcmVyYWlzZSBlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfbXV0ZXhfbG9jayIsImNhbWxfbWxfbXV0ZXhfdW5sb2NrIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJwcm90ZWN0IiwibSIsIngiLCJlIiwiU3RkbGliX011dGV4Il0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyx1QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFFBQUFDLEdBQUFIO0FBQUFBLElDMEJFO0FBQUEsSUFBTSxRQUFBSSxJQUNBO0FBQUEsVUFBQUM7QUFBQUEsU0FBQUEsSUQzQlI7QUFBQSxLQ2dDSTtBQUFBLEtBQVE7QUFBQTtBQUFBLElBSFI7QUFBQSxJQUFRO0FBQUEsR0FJQztBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTURqQ2IiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoxNjgxNywiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSJdLCJuYW1lcyI6WyJydW50aW1lIiwiU3RkbGliX0NvbmRpdGlvbiJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTY4MzUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvZG9tYWluLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICBLQyBTaXZhcmFtYWtyaXNobmFuLCBJbmRpYW4gSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIE1hZHJhcyAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFN0ZXBoZW4gRG9sYW4sIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgVG9tIEtlbGx5LCBPQ2FtbCBMYWJzIENvbnN1bHRhbmN5ICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOSBJbmRpYW4gSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIE1hZHJhcyAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBPQ2FtbCBMYWJzIENvbnN1bHRhbmN5IEx0ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gICgqIExvdy1sZXZlbCBwcmltaXRpdmVzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lICopXG4gIHR5cGUgdCA9IHByaXZhdGUgaW50XG5cbiAgKCogVGhlIGxheW91dHMgb2YgW3N0YXRlXSBhbmQgW3Rlcm1fc3luY10gYXJlIGhhcmQtY29kZWQgaW5cbiAgICAgW3J1bnRpbWUvZG9tYWluLmNdICopXG5cbiAgdHlwZSAnYSBzdGF0ZSA9XG4gICAgfCBSdW5uaW5nXG4gICAgfCBGaW5pc2hlZCBvZiAoJ2EsIGV4bikgcmVzdWx0IFtAd2FybmluZyBcIi11bnVzZWQtY29uc3RydWN0b3JcIl1cblxuICB0eXBlICdhIHRlcm1fc3luYyA9IHtcbiAgICAoKiBwcm90ZWN0ZWQgYnkgW211dF0gKilcbiAgICBtdXRhYmxlIHN0YXRlIDogJ2Egc3RhdGUgW0B3YXJuaW5nIFwiLXVudXNlZC1maWVsZFwiXSA7XG4gICAgbXV0IDogTXV0ZXgudCA7XG4gICAgY29uZCA6IENvbmRpdGlvbi50IDtcbiAgfVxuXG4gIGV4dGVybmFsIHNwYXduIDogKHVuaXQgLT4gJ2EpIC0+ICdhIHRlcm1fc3luYyAtPiB0XG4gICAgPSBcImNhbWxfZG9tYWluX3NwYXduXCJcbiAgZXh0ZXJuYWwgc2VsZiA6IHVuaXQgLT4gdFxuICAgID0gXCJjYW1sX21sX2RvbWFpbl9pZFwiIFtAQG5vYWxsb2NdXG4gIGV4dGVybmFsIGNwdV9yZWxheCA6IHVuaXQgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2RvbWFpbl9jcHVfcmVsYXhcIlxuICBleHRlcm5hbCBnZXRfcmVjb21tZW5kZWRfZG9tYWluX2NvdW50OiB1bml0IC0+IGludFxuICAgID0gXCJjYW1sX3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFwiIFtAQG5vYWxsb2NdXG5lbmRcblxubGV0IGNwdV9yZWxheCAoKSA9IFJhdy5jcHVfcmVsYXggKClcblxudHlwZSBpZCA9IFJhdy50XG5cbnR5cGUgJ2EgdCA9IHtcbiAgZG9tYWluIDogUmF3LnQ7XG4gIHRlcm1fc3luYyA6ICdhIFJhdy50ZXJtX3N5bmM7XG59XG5cbm1vZHVsZSBETFMgPSBzdHJ1Y3RcblxuICBtb2R1bGUgT2JqX29wdCA6IHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBub25lIDogdFxuICAgIHZhbCBzb21lIDogJ2EgLT4gdFxuICAgIHZhbCBpc19zb21lIDogdCAtPiBib29sXG5cbiAgICAoKiogW3Vuc2FmZV9nZXQgb2JqXSBtYXkgb25seSBiZSBjYWxsZWQgc2FmZWx5XG4gICAgICAgIGlmIFtpc19zb21lXSBpcyB0cnVlLlxuXG4gICAgICAgIFt1bnNhZmVfZ2V0IChzb21lIHYpXSBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIFtPYmoub2JqIChPYmoucmVwciB2KV0uICopXG4gICAgdmFsIHVuc2FmZV9nZXQgOiB0IC0+ICdhXG4gIGVuZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IE9iai50XG4gICAgbGV0IG5vbmUgPSBPYmoucmVwciAocmVmIDApXG4gICAgbGV0IHNvbWUgdiA9IE9iai5yZXByIHZcbiAgICBsZXQgaXNfc29tZSBvYmogPSAob2JqICE9IG5vbmUpXG4gICAgbGV0IHVuc2FmZV9nZXQgb2JqID0gT2JqLm9iaiBvYmpcbiAgZW5kXG5cbiAgdHlwZSBkbHNfc3RhdGUgPSBPYmpfb3B0LnQgYXJyYXlcblxuICBleHRlcm5hbCBnZXRfZGxzX3N0YXRlIDogdW5pdCAtPiBkbHNfc3RhdGUgPSBcIiVkbHNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXRfZGxzX3N0YXRlIDogZGxzX3N0YXRlIC0+IHVuaXQgPVxuICAgIFwiY2FtbF9kb21haW5fZGxzX3NldFwiIFtAQG5vYWxsb2NdXG5cbiAgZXh0ZXJuYWwgY29tcGFyZV9hbmRfc2V0X2Rsc19zdGF0ZSA6IGRsc19zdGF0ZSAtPiBkbHNfc3RhdGUgLT4gYm9vbCA9XG4gICAgXCJjYW1sX2RvbWFpbl9kbHNfY29tcGFyZV9hbmRfc2V0XCIgW0BAbm9hbGxvY11cblxuICBsZXQgY3JlYXRlX2RscyAoKSA9XG4gICAgbGV0IHN0ID0gQXJyYXkubWFrZSA4IE9ial9vcHQubm9uZSBpblxuICAgIHNldF9kbHNfc3RhdGUgc3RcblxuICBsZXQgXyA9IGNyZWF0ZV9kbHMgKClcblxuICB0eXBlICdhIGtleSA9IGludCAqICh1bml0IC0+ICdhKVxuXG4gIGxldCBrZXlfY291bnRlciA9IEF0b21pYy5tYWtlIDBcblxuICB0eXBlIGtleV9pbml0aWFsaXplciA9XG4gICAgS0k6ICdhIGtleSAqICgnYSAtPiAnYSkgLT4ga2V5X2luaXRpYWxpemVyXG5cbiAgbGV0IHBhcmVudF9rZXlzID0gQXRvbWljLm1ha2UgKFtdIDoga2V5X2luaXRpYWxpemVyIGxpc3QpXG5cbiAgbGV0IHJlYyBhZGRfcGFyZW50X2tleSBraSA9XG4gICAgbGV0IGwgPSBBdG9taWMuZ2V0IHBhcmVudF9rZXlzIGluXG4gICAgaWYgbm90IChBdG9taWMuY29tcGFyZV9hbmRfc2V0IHBhcmVudF9rZXlzIGwgKGtpIDo6IGwpKVxuICAgIHRoZW4gYWRkX3BhcmVudF9rZXkga2lcblxuICBsZXQgbmV3X2tleSA/c3BsaXRfZnJvbV9wYXJlbnQgaW5pdF9vcnBoYW4gPVxuICAgIGxldCBpZHggPSBBdG9taWMuZmV0Y2hfYW5kX2FkZCBrZXlfY291bnRlciAxIGluXG4gICAgbGV0IGsgPSAoaWR4LCBpbml0X29ycGhhbikgaW5cbiAgICBiZWdpbiBtYXRjaCBzcGxpdF9mcm9tX3BhcmVudCB3aXRoXG4gICAgfCBOb25lIC0+ICgpXG4gICAgfCBTb21lIHNwbGl0IC0+IGFkZF9wYXJlbnRfa2V5IChLSShrLCBzcGxpdCkpXG4gICAgZW5kO1xuICAgIGtcblxuICAoKiBJZiBuZWNlc3NhcnksIGdyb3cgdGhlIGN1cnJlbnQgZG9tYWluJ3MgbG9jYWwgc3RhdGUgYXJyYXkgc3VjaCB0aGF0IFtpZHhdXG4gICAqIGlzIGEgdmFsaWQgaW5kZXggaW4gdGhlIGFycmF5LiAqKVxuICBsZXQgcmVjIG1heWJlX2dyb3cgaWR4ID1cbiAgICBsZXQgc3QgPSBnZXRfZGxzX3N0YXRlICgpIGluXG4gICAgbGV0IHN6ID0gQXJyYXkubGVuZ3RoIHN0IGluXG4gICAgaWYgaWR4IDwgc3ogdGhlbiBzdFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByZWMgY29tcHV0ZV9uZXdfc2l6ZSBzID1cbiAgICAgICAgaWYgaWR4IDwgcyB0aGVuIHMgZWxzZSBjb21wdXRlX25ld19zaXplICgyICogcylcbiAgICAgIGluXG4gICAgICBsZXQgbmV3X3N6ID0gY29tcHV0ZV9uZXdfc2l6ZSBzeiBpblxuICAgICAgbGV0IG5ld19zdCA9IEFycmF5Lm1ha2UgbmV3X3N6IE9ial9vcHQubm9uZSBpblxuICAgICAgQXJyYXkuYmxpdCBzdCAwIG5ld19zdCAwIHN6O1xuICAgICAgKCogV2Ugd2FudCBhIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG9cbiAgICAgICAgIHNpbmdsZS1kb21haW4gbXVsdGktdGhyZWFkaW5nOiByZXRyeSBpZiB0aGUgRExTIHN0YXRlIGhhc1xuICAgICAgICAgY2hhbmdlZCB1bmRlciBvdXIgZmVldC5cbiAgICAgICAgIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHJldHJpZXMgd2lsbCBiZSB2ZXJ5IHNtYWxsIGluXG4gICAgICAgICBjb250ZW5kZWQgc2NlbmFyaW9zLCBhcyB0aGUgYXJyYXkgb25seSBncm93cywgd2l0aFxuICAgICAgICAgZXhwb25lbnRpYWwgcmVzaXppbmcuICopXG4gICAgICBpZiBjb21wYXJlX2FuZF9zZXRfZGxzX3N0YXRlIHN0IG5ld19zdFxuICAgICAgdGhlbiBuZXdfc3RcbiAgICAgIGVsc2UgbWF5YmVfZ3JvdyBpZHhcbiAgICBlbmRcblxuICBsZXQgc2V0ICh0eXBlIGEpIChpZHgsIF9pbml0KSAoeCA6IGEpID1cbiAgICBsZXQgc3QgPSBtYXliZV9ncm93IGlkeCBpblxuICAgICgqIFtTeXMub3BhcXVlX2lkZW50aXR5XSBlbnN1cmVzIHRoYXQgZmxhbWJkYSBkb2VzIG5vdCBsb29rIGF0IHRoZSB0eXBlIG9mXG4gICAgICogW3hdLCB3aGljaCBtYXkgYmUgYSBbZmxvYXRdIGFuZCBjb25jbHVkZSB0aGF0IHRoZSBbc3RdIGlzIGEgZmxvYXQgYXJyYXkuXG4gICAgICogV2UgZG8gbm90IHdhbnQgT0NhbWwncyBmbG9hdCBhcnJheSBvcHRpbWlzYXRpb24ga2lja2luZyBpbiBoZXJlLiAqKVxuICAgIHN0LihpZHgpIDwtIE9ial9vcHQuc29tZSAoU3lzLm9wYXF1ZV9pZGVudGl0eSB4KVxuXG5cbiAgbGV0W0BpbmxpbmUgbmV2ZXJdIGFycmF5X2NvbXBhcmVfYW5kX3NldCBhIGkgb2xkdmFsIG5ld3ZhbCA9XG4gICAgKCogTm90ZTogd2UgY2Fubm90IHVzZSBbQHBvbGwgZXJyb3JdIGR1ZSB0byB0aGVcbiAgICAgICBhbGxvY2F0aW9ucyBvbiBhLihpKSBpbiB0aGUgRG91YmxlX2FycmF5IGNhc2UuICopXG4gICAgbGV0IGN1cnZhbCA9IGEuKGkpIGluXG4gICAgaWYgY3VydmFsID09IG9sZHZhbCB0aGVuIChcbiAgICAgIEFycmF5LnVuc2FmZV9zZXQgYSBpIG5ld3ZhbDtcbiAgICAgIHRydWVcbiAgICApIGVsc2UgZmFsc2VcblxuICBsZXQgZ2V0ICh0eXBlIGEpICgoaWR4LCBpbml0KSA6IGEga2V5KSA6IGEgPVxuICAgIGxldCBzdCA9IG1heWJlX2dyb3cgaWR4IGluXG4gICAgbGV0IG9iaiA9IHN0LihpZHgpIGluXG4gICAgaWYgT2JqX29wdC5pc19zb21lIG9ialxuICAgIHRoZW4gKE9ial9vcHQudW5zYWZlX2dldCBvYmogOiBhKVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCB2IDogYSA9IGluaXQgKCkgaW5cbiAgICAgIGxldCBuZXdfb2JqID0gT2JqX29wdC5zb21lIChTeXMub3BhcXVlX2lkZW50aXR5IHYpIGluXG4gICAgICAoKiBBdCB0aGlzIHBvaW50LCBbc3RdIG9yIFtzdC4oaWR4KV0gbWF5IGhhdmUgYmVlbiBjaGFuZ2VkXG4gICAgICAgICBieSBhbm90aGVyIHRocmVhZCBvbiB0aGUgc2FtZSBkb21haW4uXG5cbiAgICAgICAgIElmIFtzdF0gY2hhbmdlZCwgaXQgd2FzIHJlc2l6ZWQgaW50byBhIGxhcmdlciB2YWx1ZSxcbiAgICAgICAgIHdlIGNhbiBqdXN0IHJldXNlIHRoZSBuZXcgdmFsdWUuXG5cbiAgICAgICAgIElmIFtzdC4oaWR4KV0gY2hhbmdlZCwgd2UgZHJvcCB0aGUgY3VycmVudCB2YWx1ZSB0byBhdm9pZFxuICAgICAgICAgbGV0dGluZyBvdGhlciB0aHJlYWRzIG9ic2VydmUgYSAncmV2ZXJ0JyB0aGF0IGZvcmdldHNcbiAgICAgICAgIHByZXZpb3VzIG1vZGlmaWNhdGlvbnMuICopXG4gICAgICBsZXQgc3QgPSBnZXRfZGxzX3N0YXRlICgpIGluXG4gICAgICBpZiBhcnJheV9jb21wYXJlX2FuZF9zZXQgc3QgaWR4IG9iaiBuZXdfb2JqXG4gICAgICB0aGVuIHZcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgKCogaWYgc3QuKGlkeCkgY2hhbmdlZCwgc29tZW9uZSBtdXN0IGhhdmUgaW5pdGlhbGl6ZWRcbiAgICAgICAgICAgdGhlIGtleSBpbiB0aGUgbWVhbnRpbWUuICopXG4gICAgICAgIGxldCB1cGRhdGVkX29iaiA9IHN0LihpZHgpIGluXG4gICAgICAgIGlmIE9ial9vcHQuaXNfc29tZSB1cGRhdGVkX29ialxuICAgICAgICB0aGVuIChPYmpfb3B0LnVuc2FmZV9nZXQgdXBkYXRlZF9vYmogOiBhKVxuICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgdHlwZSBrZXlfdmFsdWUgPSBLViA6ICdhIGtleSAqICdhIC0+IGtleV92YWx1ZVxuXG4gIGxldCBnZXRfaW5pdGlhbF9rZXlzICgpIDoga2V5X3ZhbHVlIGxpc3QgPVxuICAgIExpc3QubWFwXG4gICAgICAoZnVuIChLSSAoaywgc3BsaXQpKSAtPiBLViAoaywgKHNwbGl0IChnZXQgaykpKSlcbiAgICAgIChBdG9taWMuZ2V0IHBhcmVudF9rZXlzKVxuXG4gIGxldCBzZXRfaW5pdGlhbF9rZXlzIChsOiBrZXlfdmFsdWUgbGlzdCkgPVxuICAgIExpc3QuaXRlciAoZnVuIChLViAoaywgdikpIC0+IHNldCBrIHYpIGxcbmVuZFxuXG4oKioqKioqKiogSWRlbnRpdHkgKioqKioqKioqKilcblxubGV0IGdldF9pZCB7IGRvbWFpbjsgXyB9ID0gZG9tYWluXG5cbmxldCBzZWxmICgpID0gUmF3LnNlbGYgKClcblxubGV0IGlzX21haW5fZG9tYWluICgpID0gKHNlbGYgKCkgOj4gaW50KSA9IDBcblxuKCoqKioqKioqIENhbGxiYWNrcyAqKioqKioqKioqKVxuXG4oKiBmaXJzdCBzcGF3biwgZG9tYWluIHN0YXJ0dXAgYW5kIGF0IGV4aXQgZnVuY3Rpb25hbGl0eSAqKVxubGV0IGZpcnN0X2RvbWFpbl9zcGF3bmVkID0gQXRvbWljLm1ha2UgZmFsc2VcblxubGV0IGZpcnN0X3NwYXduX2Z1bmN0aW9uID0gcmVmIChmdW4gKCkgLT4gKCkpXG5cbmxldCBiZWZvcmVfZmlyc3Rfc3Bhd24gZiA9XG4gIGlmIEF0b21pYy5nZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiZmlyc3QgZG9tYWluIGFscmVhZHkgc3Bhd25lZFwiKVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IG9sZF9mID0gIWZpcnN0X3NwYXduX2Z1bmN0aW9uIGluXG4gICAgbGV0IG5ld19mICgpID0gb2xkX2YgKCk7IGYgKCkgaW5cbiAgICBmaXJzdF9zcGF3bl9mdW5jdGlvbiA6PSBuZXdfZlxuICBlbmRcblxubGV0IGRvX2JlZm9yZV9maXJzdF9zcGF3biAoKSA9XG4gIGlmIG5vdCAoQXRvbWljLmdldCBmaXJzdF9kb21haW5fc3Bhd25lZCkgdGhlbiBiZWdpblxuICAgIEF0b21pYy5zZXQgZmlyc3RfZG9tYWluX3NwYXduZWQgdHJ1ZTtcbiAgICAhZmlyc3Rfc3Bhd25fZnVuY3Rpb24oKTtcbiAgICAoKiBSZWxlYXNlIHRoZSBvbGQgZnVuY3Rpb24gKilcbiAgICBmaXJzdF9zcGF3bl9mdW5jdGlvbiA6PSAoZnVuICgpIC0+ICgpKVxuICBlbmRcblxubGV0IGF0X2V4aXRfa2V5ID0gRExTLm5ld19rZXkgKGZ1biAoKSAtPiAoZnVuICgpIC0+ICgpKSlcblxubGV0IGF0X2V4aXQgZiA9XG4gIGxldCBvbGRfZXhpdCA6IHVuaXQgLT4gdW5pdCA9IERMUy5nZXQgYXRfZXhpdF9rZXkgaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBmICgpOyBvbGRfZXhpdCAoKVxuICBpblxuICBETFMuc2V0IGF0X2V4aXRfa2V5IG5ld19leGl0XG5cbmxldCBkb19hdF9leGl0ICgpID1cbiAgbGV0IGYgOiB1bml0IC0+IHVuaXQgPSBETFMuZ2V0IGF0X2V4aXRfa2V5IGluXG4gIGYgKClcblxubGV0IF8gPSBTdGRsaWIuZG9fZG9tYWluX2xvY2FsX2F0X2V4aXQgOj0gZG9fYXRfZXhpdFxuXG4oKioqKioqKiBDcmVhdGlvbiBhbmQgVGVybWluYXRpb24gKioqKioqKiopXG5cbmxldCBzcGF3biBmID1cbiAgZG9fYmVmb3JlX2ZpcnN0X3NwYXduICgpO1xuICBsZXQgcGsgPSBETFMuZ2V0X2luaXRpYWxfa2V5cyAoKSBpblxuXG4gICgqIFt0ZXJtX3N5bmNdIGlzIHVzZWQgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgam9pbmluZyBkb21haW5zICopXG4gIGxldCB0ZXJtX3N5bmMgPVxuICAgIFJhdy57IHN0YXRlID0gUnVubmluZyA7XG4gICAgICAgICAgbXV0ID0gTXV0ZXguY3JlYXRlICgpIDtcbiAgICAgICAgICBjb25kID0gQ29uZGl0aW9uLmNyZWF0ZSAoKSB9XG4gIGluXG5cbiAgbGV0IGJvZHkgKCkgPVxuICAgIG1hdGNoXG4gICAgICBETFMuY3JlYXRlX2RscyAoKTtcbiAgICAgIERMUy5zZXRfaW5pdGlhbF9rZXlzIHBrO1xuICAgICAgbGV0IHJlcyA9IGYgKCkgaW5cbiAgICAgIHJlc1xuICAgIHdpdGhcbiAgICAoKiBSdW4gdGhlIFthdF9leGl0XSBjYWxsYmFja3Mgd2hlbiB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIGVpdGhlclxuICAgICAgIHRlcm1pbmF0ZXMgbm9ybWFsbHkgb3IgZXhjZXB0aW9uYWxseS4gKilcbiAgICB8IHJlcyAtPlxuICAgICAgICAoKiBJZiB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIHRlcm1pbmF0ZWQgbm9ybWFsbHksIGJ1dCB0aGVcbiAgICAgICAgICAgW2F0X2V4aXRdIGNhbGxiYWNrcyByYWlzZWQgYW4gZXhjZXB0aW9uLCB0aGVuIHJldHVybiB0aGVcbiAgICAgICAgICAgZXhjZXB0aW9uLiAqKVxuICAgICAgICBkb19hdF9leGl0ICgpO1xuICAgICAgICByZXNcbiAgICB8IGV4Y2VwdGlvbiBleG4gLT5cbiAgICAgICAgKCogSWYgYm90aCB0aGUgZG9tYWluIGNvbXB1dGF0aW9uIGFuZCB0aGUgW2F0X2V4aXRdIGNhbGxiYWNrc1xuICAgICAgICAgICByYWlzZSBleGNlcHRpb25zLCB0aGVuIGlnbm9yZSB0aGUgZXhjZXB0aW9uIGZyb20gdGhlXG4gICAgICAgICAgIFthdF9leGl0XSBjYWxsYmFja3MgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLiAqKVxuICAgICAgICAodHJ5IGRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICAgICAgcmFpc2UgZXhuXG4gIGluXG4gIGxldCBkb21haW4gPSBSYXcuc3Bhd24gYm9keSB0ZXJtX3N5bmMgaW5cbiAgeyBkb21haW4gOyB0ZXJtX3N5bmMgfVxuXG5sZXQgam9pbiB7IHRlcm1fc3luYyA7IF8gfSA9XG4gIGxldCBvcGVuIFJhdyBpblxuICBsZXQgcmVjIGxvb3AgKCkgPVxuICAgIG1hdGNoIHRlcm1fc3luYy5zdGF0ZSB3aXRoXG4gICAgfCBSdW5uaW5nIC0+XG4gICAgICAgIENvbmRpdGlvbi53YWl0IHRlcm1fc3luYy5jb25kIHRlcm1fc3luYy5tdXQ7XG4gICAgICAgIGxvb3AgKClcbiAgICB8IEZpbmlzaGVkIHJlcyAtPlxuICAgICAgICByZXNcbiAgaW5cbiAgbWF0Y2ggTXV0ZXgucHJvdGVjdCB0ZXJtX3N5bmMubXV0IGxvb3Agd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGV4IC0+IHJhaXNlIGV4XG5cbmxldCByZWNvbW1lbmRlZF9kb21haW5fY291bnQgPSBSYXcuZ2V0X3JlY29tbWVuZGVkX2RvbWFpbl9jb3VudFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NoZWNrX2JvdW5kIiwiY2FtbF9kb21haW5fZGxzX2dldCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9kb21haW5faWQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQ29uZGl0aW9uIiwiU3RkbGliX011dGV4IiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9MaXN0IiwiQXNzZXJ0X2ZhaWx1cmUiLCJjcHVfcmVsYXgiLCJwYXJhbSIsIm5vbmUiLCJjcmVhdGVfZGxzIiwic3QiLCJrZXlfY291bnRlciIsInBhcmVudF9rZXlzIiwibmV3X2tleSIsInNwbGl0X2Zyb21fcGFyZW50IiwiaW5pdF9vcnBoYW4iLCJpZHgiLCJrIiwic3BsaXQiLCJraSIsImwiLCJtYXliZV9ncm93Iiwic3oiLCJuZXdfc3oiLCJuZXdfc3QiLCJzIiwic2V0IiwieCIsImdldCIsImluaXQiLCJvbGR2YWwiLCJuZXdfb2JqIiwiY3VydmFsIiwidXBkYXRlZF9vYmoiLCJzZXRfaW5pdGlhbF9rZXlzIiwidiIsImdldF9pZCIsImRvbWFpbiIsInNlbGYiLCJpc19tYWluX2RvbWFpbiIsImZpcnN0X2RvbWFpbl9zcGF3bmVkIiwiZmlyc3Rfc3Bhd25fZnVuY3Rpb24iLCJiZWZvcmVfZmlyc3Rfc3Bhd24iLCJvbGRfZiIsIm5ld19mIiwiYXRfZXhpdF9rZXkiLCJhdF9leGl0Iiwib2xkX2V4aXQiLCJuZXdfZXhpdCIsImRvX2F0X2V4aXQiLCJzcGF3biIsInBrIiwidGVybV9zeW5jIiwiYm9keSIsInJlcyIsImV4biIsImpvaW4iLCJsb29wIiwibWF0Y2giLCJleCIsInJlY29tbWVuZGVkX2RvbWFpbl9jb3VudCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtB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bUMsWUFERDtBQUFBLGFBQUFDLEtBQUE5QztBQUFBQSxLQUtaLElBQ0UsZUFDQSwwQkFBQStDLE1BQ1U7QUFBQSxXQUFBQztBQUFBQSxVQUFBQSxNRHRRaEI7QUFBQSxVQ3FSYSxxQkFBQUE7QUFBQUEsTUFDTDtBQUFBO0FBQUEsS0FQQTtBQUFBLEtBQWE7QUFBQSxJQU9KO0FBQUEsUUFBQWxCLFNBRUY7QUFBQSxJQUNiO0FBQUEsR0FBc0I7QUFBQSxZQUFBbUIsS0FBQWpEO0FBQUFBLFFBQUE2QyxZQUVmO0FBQUEsYUFBQUssS0FBQWxEO0FBQUFBLEtBR0w7QUFBQSxVQUFBbUQsUUFBQTtBQUFBLG9CQUFBSixNQUFBLFVBS0k7QUFBQSxNQUhBO0FBQUE7QUFBQSxJQUdHO0FBQUEsUUFBQUksUUFFSDtBQUFBLElBQWdDLHVCQUFBL0IsSUFBQSxVQUM1QjtBQUFBLFFBQUFnQyxLQUQ0QjtBQUFBO0FBQUEsR0FFaEI7QUFBQSxPQUFBQywyQkFqRWdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR0T3hEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MTcwMzEsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAoKiBUb29scyB0byBtYW5pcHVsYXRlIHNjYW5uaW5nIHNldCBvZiBjaGFycyAoc2VlICVbLi4uXSkgKilcblxudHlwZSBtdXRhYmxlX2NoYXJfc2V0ID0gYnl0ZXNcblxuKCogQ3JlYXRlIGEgZnJlc2gsIGVtcHR5LCBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGNyZWF0ZV9jaGFyX3NldCAoKSA9IEJ5dGVzLm1ha2UgMzIgJ1xcMDAwJ1xuXG4oKiBBZGQgYSBjaGFyIGluIGEgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICBCeXRlcy5zZXQgY2hhcl9zZXQgc3RyX2luZFxuICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKEJ5dGVzLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsb3IgbWFzaykpXG5cbmxldCBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBCeXRlcy50b19zdHJpbmcgY2hhcl9zZXRcblxuKCogQ29tcHV0ZSB0aGUgY29tcGxlbWVudCBvZiBhIGNoYXIgc2V0LiAqKVxubGV0IHJldl9jaGFyX3NldCBjaGFyX3NldCA9XG4gIGxldCBjaGFyX3NldCcgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgZm9yIGkgPSAwIHRvIDMxIGRvXG4gICAgQnl0ZXMuc2V0IGNoYXJfc2V0JyBpXG4gICAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IGkpIGx4b3IgMHhGRikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGNoYXJfc2V0J1xuXG4oKiBSZXR1cm4gdHJ1ZSBpZiBhIGBjJyBpcyBpbiBgY2hhcl9zZXQnLiAqKVxubGV0IGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxhbmQgbWFzaykgPD4gMFxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogSWdub3JlZCBwYXJhbSBjb252ZXJzaW9uICopXG5cbigqIEdBRFQgdXNlZCB0byBhYnN0cmFjdCBhbiBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlci4gKilcbigqIFNlZSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiID0gUGFyYW1fZm9ybWF0X0VCQiA6XG4gICAgKCd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiXG5cbigqIENvbXB1dGUgYSBwYWRkaW5nIGFzc29jaWF0ZWQgdG8gYSBwYWRfb3B0aW9uIChzZWUgXCIlXzQyZFwiKS4gKilcbmxldCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wYWRkaW5nXG4gIHwgU29tZSB3aWR0aCAtPiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuXG4oKiBDb21wdXRlIGEgcHJlY2lzaW9uIGFzc29jaWF0ZWQgdG8gYSBwcmVjX29wdGlvbiAoc2VlIFwiJV8uNDJmXCIpLiAqKVxubGV0IHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQgPSBtYXRjaCBwcmVjX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wcmVjaXNpb25cbiAgfCBTb21lIG5kZWMgLT4gTGl0X3ByZWNpc2lvbiBuZGVjXG5cbigqIFR1cm4gYW4gaWdub3JlZCBwYXJhbSBpbnRvIGl0cyBlcXVpdmFsZW50IG5vdC1pZ25vcmVkIGZvcm1hdCBub2RlLiAqKVxuKCogVXNlZCBmb3IgZm9ybWF0IHByZXR0eS1wcmludGluZyBhbmQgU2NhbmYuICopXG5sZXQgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+ICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYXJhbV9mb3JtYXRfZWJiID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2hhciBmbXQpXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX2NoYXIgZm10KVxuICB8IElnbm9yZWRfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDMyIChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50MzIgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChOYXRpdmVpbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQ2NCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDY0IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfZmxvYXQgKHBhZF9vcHQsIHByZWNfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGbG9hdCAoKEZsb2F0X2ZsYWdfLCBGbG9hdF9mKSxcbiAgICAgICAgICAgICAgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Jvb2wgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEJvb2wgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChSZWFkZXIgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10KVxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlcyAqKVxuXG50eXBlICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlbiA9XG4gIHwgQWNjX29wZW5fdGFnIG9mICgnYiwgJ2MpIGFjY1xuICB8IEFjY19vcGVuX2JveCBvZiAoJ2IsICdjKSBhY2NcblxuKCogUmV2ZXJzZWQgbGlzdCBvZiBwcmludGluZyBhdG9tcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBwcmludGYgYXJndW1lbnRzLiAqKVxuYW5kICgnYiwgJ2MpIGFjYyA9XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IG9mICgnYiwgJ2MpIGFjYyAqIGZvcm1hdHRpbmdfbGl0XG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gb2YgKCdiLCAnYykgYWNjICogKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuXG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBMaXRlcmFsIHN0cmluZyAqKVxuICB8IEFjY19jaGFyX2xpdGVyYWwgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIExpdGVyYWwgY2hhciAqKVxuICB8IEFjY19kYXRhX3N0cmluZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIEdlbmVyYXRlZCBzdHJpbmcgKilcbiAgfCBBY2NfZGF0YV9jaGFyICAgICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBHZW5lcmF0ZWQgY2hhciAqKVxuICB8IEFjY19kZWxheSAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IgLT4gJ2MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBEZWxheWVkIHByaW50aW5nICglYSwgJXQpICopXG4gIHwgQWNjX2ZsdXNoICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAgICAgICAgICAgICAgKCogRmx1c2ggKilcbiAgfCBBY2NfaW52YWxpZF9hcmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nXG4gICAgICAoKiBSYWlzZSBJbnZhbGlkX2FyZ3VtZW50IG1zZyAqKVxuICB8IEVuZF9vZl9hY2NcblxuKCogTGlzdCBvZiBoZXRlcm9nZW5lb3VzIHZhbHVlcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBzY2FuZiBjYWxsYmFjayBhcmd1bWVudHMuICopXG50eXBlICgnYSwgJ2IpIGhldGVyX2xpc3QgPVxuICB8IENvbnMgOiAnYyAqICgnYSwgJ2IpIGhldGVyX2xpc3QgLT4gKCdjIC0+ICdhLCAnYikgaGV0ZXJfbGlzdFxuICB8IE5pbCA6ICgnYiwgJ2IpIGhldGVyX2xpc3RcblxuKCogRXhpc3RlbnRpYWwgQmxhY2sgQm94ZXMuICopXG4oKiBVc2VkIHRvIGFic3RyYWN0IHNvbWUgZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRkaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmIgPSBQYWRkaW5nX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRwcmVjIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmIgPSBQYWRwcmVjX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICd6KSBwcmVjaXNpb24gKiAoJ3osICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZGRpbmdfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiID0gUGFkZGluZ19mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwYWRkaW5nICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wcmVjaXNpb25fZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmIgPSBQcmVjaXNpb25fZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkcHJlY19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmIgPSBQYWRwcmVjX2ZtdF9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAncCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgdGhlICdhIGFuZCAnZCBwYXJhbWV0ZXJzIG9mIGFuIGZtdC4gKilcbigqIE91dHB1dCB0eXBlIG9mIHRoZSBmb3JtYXQgcGFyc2luZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiID0gRm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2Zvcm1hdF9nZW4gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiID0gRm10X2ZtdHR5X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXQgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYiA9IEZtdHR5X2ZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10dHkgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10X2ZtdHR5X2ViYiAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgZm10dHkgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIGZvcm1hdCB0eXBlcy4gKilcbnR5cGUgZm10dHlfZWJiID0gRm10dHlfRUJCIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+IGZtdHR5X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcGFkZGluZyB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcGFkZGluZ3MuICopXG50eXBlIHBhZGRpbmdfZWJiID0gUGFkZGluZ19FQkIgOiAoJ2EsICdiKSBwYWRkaW5nIC0+IHBhZGRpbmdfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwcmVjaXNpb24gdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHByZWNpc2lvbnMuICopXG50eXBlIHByZWNpc2lvbl9lYmIgPSBQcmVjaXNpb25fRUJCIDogKCdhLCAnYikgcHJlY2lzaW9uIC0+IHByZWNpc2lvbl9lYmJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb25zdGFudHMgKilcblxuKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IHByaW50aW5nLiAqKVxubGV0IGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252ID1cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyB8IEZsb2F0X2ggfCBGbG9hdF9IXG4gIHwgRmxvYXRfQ0YgLT4gLTZcbiAgKCogRm9yICVoICVIIGFuZCAlI0YgZm9ybWF0cywgYSBuZWdhdGl2ZSBwcmVjaXNpb24gbWVhbnMgXCJhcyBtYW55IGRpZ2l0cyBhc1xuICAgICBuZWNlc3NhcnlcIi4gIEZvciB0aGUgb3RoZXIgRlAgZm9ybWF0cywgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgb2YgdGhlIHByZWNpc2lvbiwgaGVuY2UgNiBkaWdpdHMgYnkgZGVmYXVsdC4gKilcbiAgfCBGbG9hdF9GIC0+IDEyXG4gICgqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBPQ2FtbCBmbG9hdCBwcmludGluZyAoJUYpLiAqKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEV4dGVybmFscyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQ6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDMyOiBzdHJpbmcgLT4gaW50MzIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDMyX2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfbmF0aXZlaW50OiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ2NDogc3RyaW5nIC0+IGludDY0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQ2NF9mb3JtYXRcIlxuZXh0ZXJuYWwgaGV4c3RyaW5nX29mX2Zsb2F0OiBmbG9hdCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0XCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICgqIFRvb2xzIHRvIHByZXR0eS1wcmludCBmb3JtYXRzICopXG5cbigqIFR5cGUgb2YgZXh0ZW5zaWJsZSBjaGFyYWN0ZXIgYnVmZmVycy4gKilcbnR5cGUgYnVmZmVyID0ge1xuICBtdXRhYmxlIGluZCA6IGludDtcbiAgbXV0YWJsZSBieXRlcyA6IGJ5dGVzO1xufVxuXG4oKiBDcmVhdGUgYSBmcmVzaCBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NyZWF0ZSBpbml0X3NpemUgPSB7IGluZCA9IDA7IGJ5dGVzID0gQnl0ZXMuY3JlYXRlIGluaXRfc2l6ZSB9XG5cbigqIENoZWNrIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgZ3JvdyBpdCBpZiBuZWVkZWQuICopXG5sZXQgYnVmZmVyX2NoZWNrX3NpemUgYnVmIG92ZXJoZWFkID1cbiAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBidWYuYnl0ZXMgaW5cbiAgbGV0IG1pbl9sZW4gPSBidWYuaW5kICsgb3ZlcmhlYWQgaW5cbiAgaWYgbWluX2xlbiA+IGxlbiB0aGVuIChcbiAgICBsZXQgbmV3X2xlbiA9IEludC5tYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaWduXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXRzLiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmxpdF9zdHJpbmciLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9mb3JtYXRfZmxvYXQiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImNhbWxfY2FsbDQiLCJhMyIsImNhbWxfY2FsbDUiLCJhNCIsImR1bW15IiwiZ2xvYmFsX2RhdGEiLCJBc3NlcnRfZmFpbHVyZSIsIkNhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcyIsIlN0ZGxpYiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX1N5cyIsIlN0ZGxpYl9DaGFyIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0ludCIsImNyZWF0ZV9jaGFyX3NldCIsInBhcmFtIiwiYWRkX2luX2NoYXJfc2V0IiwiY2hhcl9zZXQiLCJjIiwic3RyX2luZCIsIm1hc2siLCJmcmVlemVfY2hhcl9zZXQiLCJyZXZfY2hhcl9zZXQiLCJpIiwiaXNfaW5fY2hhcl9zZXQiLCJwYWRfb2ZfcGFkX29wdCIsInBhZF9vcHQiLCJ3aWR0aCIsInBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCIsImlnbiIsImZtdCIsImljb252IiwicHJlY19vcHQiLCJuZGVjIiwiZm10dHkiLCJ3aWR0aF9vcHQiLCJjb3VudGVyIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJmY29udiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsImJ1ZiIsIm92ZXJoZWFkIiwibGVuIiwibWluX2xlbiIsIm5ld19sZW4iLCJuZXdfc3RyIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfaWNvbnYiLCJjaGFyX29mX2Zjb252Iiwib3B0IiwiY0YiLCJicHJpbnRfY2hhcl9zZXQiLCJwcmludF9jaGFyIiwic2V0IiwiaXNfYWxvbmUiLCJhZnRlciIsImJlZm9yZSIsInN3aXRjaGVyIiwiaiIsImJwcmludF9wYWR0eSIsInBhZHR5IiwiYnByaW50X2lnbm9yZWRfZmxhZyIsImlnbl9mbGFnIiwiYnByaW50X3BhZF9vcHQiLCJicHJpbnRfcGFkZGluZyIsInBhZCIsIm4iLCJicHJpbnRfcHJlY2lzaW9uIiwicHJlYyIsImJwcmludF9pY29udl9mbGFnIiwiYnByaW50X2FsdGludF9mbXQiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyIiwiYnByaW50X2NoYXJfbGl0ZXJhbCIsImNociIsImJwcmludF9zdHJpbmdfbGl0ZXJhbCIsImNzdF9MaSIsImNzdF9pIiwiY3N0X2xpIiwiY3N0X25pIiwiYnByaW50X2ZtdHR5Iiwic3ViX2ZtdHR5IiwiaW50X29mX2N1c3RvbV9hcml0eSIsIngiLCJjc3QiLCJzdHJpbmdfb2ZfZm10IiwiZm10aXRlciIsInJlc3QiLCJmbXRpbmdfbGl0IiwiZm10aW5nX2dlbiIsImFyaXR5Iiwic3ltbSIsInR5IiwidHkyIiwidHkxIiwiZm10dHlfcmVsX2RldCIsIm1hdGNoIiwiZGUiLCJhZiIsImpkIiwiZ2EiLCJjc3RfY2FtbGludGVybmFsRm9ybWF0X21sIiwidHJhbnMiLCJyZXN0MSIsInJlc3QyIiwidHkxMiIsInR5MTEiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJmbXR0eV9vZl9mbXQiLCJ0eV9yZXN0IiwicHJlY190eSIsImZvcm1hdHRpbmdfZ2VuIiwiZm10dHlfb2ZfY3VzdG9tIiwiZm10dHlfb2ZfcGFkZGluZ19mbXR0eSIsImZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSIsIlR5cGVfbWlzbWF0Y2giLCJ0eXBlX3BhZGRpbmciLCJ3IiwidHlwZV9wYWRwcmVjIiwicCIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10dHkwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0Iiwic3ViX2ZtdHR5MSIsImZtdDEiLCJmbXR0eTIiLCJmbXQyIiwiZm10dHkzIiwiZm10MyIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1YjJfZm10dHkiLCJzdWIxX2ZtdHR5IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJyZXMiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImwiLCJmb3JtYXRfb2ZfZmNvbnYiLCJzeW1iIiwidHJhbnNmb3JtX2ludF9hbHQiLCJwb3MiLCJwdXQiLCJsZWZ0IiwiY3N0X3UiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4Iiwic2lnbiIsImNhbWxfc3BlY2lhbF92YWwiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiIsImsiLCJhY2MiLCJrYWNjIiwibmV3X2FjYyIsIm8iLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2Zyb21fZm10dHkiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2N1c3RvbSIsIm1ha2VfaXByaW50ZiIsImtvYyIsImZuX29mX2N1c3RvbV9hcml0eSIsIm91dHB1dF9hY2MiLCJtc2ciLCJidWZwdXRfYWNjIiwiYiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJ3c3RhcnQiLCJ3ZW5kIiwiYm94X25hbWUiLCJuc3RhcnQiLCJuZW5kIiwiaW5kZW50IiwiZXhuIiwiZXhwX2VuZCIsImJveF90eXBlIiwibWFrZV9wYWRkaW5nX2ZtdF9lYmIiLCJtYWtlX3BhZHByZWNfZm10X2ViYiIsImNzdF9hdF9jaGFyYWN0ZXJfbnVtYmVyIiwiY3N0X2ludmFsaWRfZm9ybWF0Iiwic3ViX2Zvcm1hdCIsImZtdF9lYmJfb2Zfc3RyaW5nIiwibGVnYWN5X2JlaGF2aW9yIiwiZmxhZyIsImludmFsaWRfZm9ybWF0X21lc3NhZ2UiLCJpbnZhbGlkX2Zvcm1hdF93aXRob3V0IiwiZXhwZWN0ZWRfY2hhcmFjdGVyIiwiZXhwZWN0ZWQiLCJyZWFkIiwiY3N0X3VuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCIsInBhcnNlIiwibGl0X3N0YXJ0IiwiZW5kX2luZCIsImNzdF8wIiwicGFyc2VfZmxhZ3MiLCJwY3RfaW5kIiwic2V0X2ZsYWciLCJ6ZXJvIiwibWludXMiLCJwbHVzIiwic3BhY2UiLCJoYXNoIiwibmV3X2luZCIsImNzdF9wcmVjaXNpb24iLCJwYXJzZV9hZnRlcl9wYWRkaW5nIiwicGFyc2VfbGl0ZXJhbCIsInBhcnNlX2FmdGVyX3ByZWNpc2lvbiIsInBhcnNlX2NvbnYiLCJwYWRwcmVjIiwicGFyc2VfY29udmVyc2lvbiIsInBsdXNfdXNlZCIsImdldF9wbHVzIiwiaGFzaF91c2VkIiwiZ2V0X2hhc2giLCJzcGFjZV91c2VkIiwiZ2V0X3NwYWNlIiwiaWduX3VzZWQiLCJnZXRfaWduIiwicGFkX3VzZWQiLCJnZXRfcGFkIiwicHJlY191c2VkIiwiZ2V0X3ByZWMiLCJnZXRfcGFkcHJlYyIsImdldF9pbnRfcGFkIiwiY2hlY2tfbm9fMCIsIm9wdF9vZl9wYWQiLCJnZXRfcGFkX29wdCIsImdldF9wYWRwcmVjX29wdCIsImZtdF9yZXN1bHQiLCJzdWJfZW5kIiwic3ViX2ZtdCIsImlnbm9yZWQiLCJuZXh0X2luZCIsImNoYXJfZm9ybWF0Iiwia2luZCIsInBhcnNlX2FmdGVyX2F0Iiwic3RyX2luZF8xIiwic3RyX2luZF8yIiwic3RyX2luZF8zIiwib2Zmc2V0Iiwic3RyX2luZF80Iiwic3RyX2luZF81Iiwic2l6ZSIsInBhcnNlX3RhZyIsImlzX29wZW5fdGFnIiwiaW5kIiwic3ViX3N0ciIsImZvcm1hdHRpbmciLCJwYXJzZV9jaGFyX3NldCIsImFkZF9yYW5nZSIsImZhaWxfc2luZ2xlX3BlcmNlbnQiLCJwYXJzZV9jaGFyX3NldF9jb250ZW50IiwicGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciIsInJldmVyc2UiLCJwYXJzZV9wb3NpdGl2ZSIsInBhcnNlX2ludGVnZXIiLCJhZGRfbGl0ZXJhbCIsInNlYXJjaF9zdWJmb3JtYXRfZW5kIiwiY29tcHV0ZV9pbnRfY29udiIsImluY29tcGF0aWJsZV9mbGFnIiwib3B0aW9uIiwic3ViZm10IiwiY3N0X2FuZCIsImNzdF9iYWRfaW5wdXRfZm9ybWF0X3R5cGVfbWlzbSIsImZvcm1hdF9vZl9zdHJpbmdfZm10dHkiLCJmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FB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MjE4ODUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvcHJpbnRmLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfQnVmZmVyIiwiQ2FtbGludGVybmFsRm9ybWF0IiwiU3RkbGliIiwia2ZwcmludGYiLCJrIiwibyIsInBhcmFtIiwiZm10IiwiYWNjIiwia2JwcmludGYiLCJiIiwiaWtmcHJpbnRmIiwib2MiLCJmcHJpbnRmIiwiYnByaW50ZiIsImlmcHJpbnRmIiwiaWJwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJidWYiLCJzcHJpbnRmIiwicyJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxZQUFBQyxTQUFBQyxHQUFBQyxHQUFBQztBQUFBQSxRQUFBQyxNQ2tCYTtBQUFBLElBQ1g7QUFBQTtBQUFBLHNCQUFBQztBQUFBQSxjQUF3QjtBQUFBLGNBQWdCLHVCQUFLO0FBQUE7QUFBQTtBQUFBLGlCQUFnQjtBQUFBO0FBQUEsWUFBQUMsU0FBQUwsR0FBQU0sR0FBQUo7QUFBQUEsUUFBQUMsTUFDbEQ7QUFBQSxJQUNYO0FBQUE7QUFBQSxzQkFBQUM7QUFBQUEsY0FBd0I7QUFBQSxjQUFnQix1QkFBSztBQUFBO0FBQUE7QUFBQSxpQkFBZ0I7QUFBQTtBQUFBLFlBQUFHLFVBQUFQLEdBQUFRLElBQUFOO0FBQUFBLFFBQUFDLE1BQ2pEO0FBQUEsSUFDWixtREFBcUI7QUFBQTtBQUFBLFlBQUFNLFFBQUFELElBQUFMO0FBQUFBLElBR0YsNEJEMUJyQixvQkMwQjJDO0FBQUE7QUFBQSxZQUFBTyxRQUFBSixHQUFBSCxLQUN2Qiw0QkQzQnBCLG1CQzJCeUM7QUFBQSxZQUFBUSxTQUFBSCxJQUFBTDtBQUFBQSxJQUNuQiw2QkQ1QnRCLG9CQzRCNkM7QUFBQTtBQUFBLFlBQUFTLFNBQUFOLEdBQUFIO0FBQUFBLElBQ3hCLDZCRDdCckIsbUJDNkIyQztBQUFBO0FBQUEsWUFBQVUsT0FBQVYsS0FDMUIsK0JBQWtCO0FBQUEsWUFBQVcsUUFBQVgsS0FDakIsK0JBQWtCO0FBQUEsWUFBQVksU0FBQWYsR0FBQUU7QUFBQUEsUUFBQUMsTUFFdkI7QUFBQSxhQUFBSCxJQUFBSTtBQUFBQSxTQUFBWSxNQUVDO0FBQUEsS0FDVjtBQUFBLEtBQ0UsT0FBcUIsY0FBckIsaUNBQXFCO0FBQUE7QUFBQSxJQUN6QixvREFBNkI7QUFBQTtBQUFBLFlBQUFDLFFBQUFkLEtBRWIseUJBQUFlLEdBQW1CLFNBQUMsT0FBSztBQUFBLEdEeEMzQyIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjIxOTcxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL3ByaW50ZXhjLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCBkZXN0cnVjdF9leHRfY29uc3RydWN0b3IgeCA9XG4gIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAoKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpLCBOb25lKVxuICBlbHNlXG4gICAgbGV0IGNvbnN0cnVjdG9yID1cbiAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgKGNvbnN0cnVjdG9yLCBTb21lIChmaWVsZHMgeCkpXG5cbmxldCBzdHJpbmdfb2ZfZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIHQgPVxuICBsZXQgY29uc3RydWN0b3IsIGZpZWxkc19vcHQgPSBkZXN0cnVjdF9leHRfY29uc3RydWN0b3IgdCBpblxuICBtYXRjaCBmaWVsZHNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IGNvbnN0cnVjdG9yXG4gIHwgU29tZSBmIC0+IGNvbnN0cnVjdG9yIF4gZlxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgc3RyaW5nX29mX2V4dGVuc2lvbl9jb25zdHJ1Y3RvciAoT2JqLnJlcHIgeClcblxubGV0IHRvX3N0cmluZyBlID1cbiAgbWF0Y2ggdXNlX3ByaW50ZXJzIGUgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiB0b19zdHJpbmdfZGVmYXVsdCBlXG5cbmxldCBwcmludCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZmx1c2ggc3RkZXJyO1xuICAgIHJhaXNlIHhcblxubGV0IGNhdGNoIGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGZsdXNoIHN0ZG91dDtcbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZXhpdCAyXG5cbnR5cGUgcmF3X2JhY2t0cmFjZV9zbG90XG50eXBlIHJhd19iYWNrdHJhY2VfZW50cnkgPSBwcml2YXRlIGludFxudHlwZSByYXdfYmFja3RyYWNlID0gcmF3X2JhY2t0cmFjZV9lbnRyeSBhcnJheVxuXG5sZXQgcmF3X2JhY2t0cmFjZV9lbnRyaWVzIGJ0ID0gYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2U6XG4gIHVuaXQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2VcIlxuXG5leHRlcm5hbCByYWlzZV93aXRoX2JhY2t0cmFjZTogZXhuIC0+IHJhd19iYWNrdHJhY2UgLT4gJ2FcbiAgPSBcIiVyYWlzZV93aXRoX2JhY2t0cmFjZVwiXG5cbigqIERpc2FibGUgd2FybmluZyAzNzogdmFsdWVzIGFyZSBjb25zdHJ1Y3RlZCBpbiB0aGUgcnVudGltZSAqKVxudHlwZVtAd2FybmluZyBcIi0zN1wiXSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgIDogc3RyaW5nO1xuICAgICAgc3RhcnRfbG51bSA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gICAgICBlbmRfb2Zmc2V0IDogaW50OyAoKiBSZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3RhcnRfbG51bSAqKVxuICAgICAgZW5kX2xudW0gICA6IGludDtcbiAgICAgIGVuZF9jaGFyICAgOiBpbnQ7ICgqIFJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiBlbmRfbG51bSBsaW5lICopXG4gICAgICBpc19pbmxpbmUgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgOiBzdHJpbmc7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGxldCBsaW5lcyA9XG4gICAgICAgIGlmIGwuc3RhcnRfbG51bSA9IGwuZW5kX2xudW0gdGhlblxuICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiICVkXCIgbC5zdGFydF9sbnVtXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBQcmludGYuc3ByaW50ZiBcInMgJWQtJWRcIiBsLnN0YXJ0X2xudW0gbC5lbmRfbG51bVxuICAgICAgaW5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSVzLCBjaGFyYWN0ZXJzICVkLSVkXCJcbiAgICAgICAgICAgICAgKGluZm8gbC5pc19yYWlzZSkgbC5kZWZuYW1lIGwuZmlsZW5hbWVcbiAgICAgICAgICAgICAgKGlmIGwuaXNfaW5saW5lIHRoZW4gXCIgKGlubGluZWQpXCIgZWxzZSBcIlwiKVxuICAgICAgICAgICAgICBsaW5lcyBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbiAgZW5kX2xpbmUgOiBpbnQ7XG4gIGVuZF9jb2wgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwuc3RhcnRfbG51bTtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9vZmZzZXQ7XG4gICAgICBlbmRfbGluZSAgICA9IGwuZW5kX2xudW07XG4gICAgICBlbmRfY29sICAgICA9IGwuZW5kX2NoYXI7XG4gICAgfVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfXG4gIHwgS25vd25fbG9jYXRpb24geyBkZWZuYW1lID0gXCJcIiB9IC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IFNvbWUgbC5kZWZuYW1lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHMgcmF3X2JhY2t0cmFjZSA9XG4gICgqIFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IFNvbWUgaXNcbiAgICAgcmV0dXJuZWQgb25seSBpZiBhIHBhcnQgb2YgdGhlIHRyYWNlIGlzIHVzYWJsZS4gVGhpcyBnaXZlcyB1c1xuICAgICBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSwgYnV0IGl0IG1ha2VzIHRoZVxuICAgICBBUEkgbW9yZSB1c2VyLWZyaWVuZGx5IC0tIG90aGVyd2lzZSBtb3N0IHVzZXJzIHdvdWxkIGhhdmUgdG9cbiAgICAgcmVpbXBsZW1lbnQgdGhlIFwiUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIHNvcnJ5XCIgbG9naWNcbiAgICAgdGhlbXNlbHZlcy4gKilcbiAgbWF0Y2ggY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2Ugd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGJhY2t0cmFjZSAtPlxuICAgICAgbGV0IHVzYWJsZV9zbG90ID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcbiAgICAgICAgfCBLbm93bl9sb2NhdGlvbiBfIC0+IHRydWUgaW5cbiAgICAgIGxldCByZWMgZXhpc3RzX3VzYWJsZSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgKC0xKSAtPiBmYWxzZVxuICAgICAgICB8IGkgLT4gdXNhYmxlX3Nsb3QgYmFja3RyYWNlLihpKSB8fCBleGlzdHNfdXNhYmxlIChpIC0gMSkgaW5cbiAgICAgIGlmIGV4aXN0c191c2FibGUgKEFycmF5Lmxlbmd0aCBiYWNrdHJhY2UgLSAxKVxuICAgICAgdGhlbiBTb21lIGJhY2t0cmFjZVxuICAgICAgZWxzZSBOb25lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IGVudHJ5ID1cbiAgYmFja3RyYWNlX3Nsb3RzIFt8IGVudHJ5IHxdXG5cbm1vZHVsZSBTbG90ID0gc3RydWN0XG4gIHR5cGUgdCA9IGJhY2t0cmFjZV9zbG90XG4gIGxldCBmb3JtYXQgPSBmb3JtYXRfYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGlzX3JhaXNlID0gYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2VcbiAgbGV0IGlzX2lubGluZSA9IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZVxuICBsZXQgbG9jYXRpb24gPSBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvblxuICBsZXQgbmFtZSA9IGJhY2t0cmFjZV9zbG90X2RlZm5hbWVcbmVuZFxuXG5sZXQgcmF3X2JhY2t0cmFjZV9sZW5ndGggYnQgPSBBcnJheS5sZW5ndGggYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2UgLT4gaW50IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QgOlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gcmF3X2JhY2t0cmFjZV9zbG90IG9wdGlvblxuICA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFwiXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOlxuICAgcmV0dXJucyB0aGUgKnN0cmluZyogY29ycmVzcG9uZGluZyB0byB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgZ2V0X2JhY2t0cmFjZSAoKSA9IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxuZXh0ZXJuYWwgcmVjb3JkX2JhY2t0cmFjZTogYm9vbCAtPiB1bml0ID0gXCJjYW1sX3JlY29yZF9iYWNrdHJhY2VcIlxuZXh0ZXJuYWwgYmFja3RyYWNlX3N0YXR1czogdW5pdCAtPiBib29sID0gXCJjYW1sX2JhY2t0cmFjZV9zdGF0dXNcIlxuXG5sZXQgcmVjIHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBsZXQgb2xkX3ByaW50ZXJzID0gQXRvbWljLmdldCBwcmludGVycyBpblxuICBsZXQgbmV3X3ByaW50ZXJzID0gZm4gOjogb2xkX3ByaW50ZXJzIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBwcmludGVycyBvbGRfcHJpbnRlcnMgbmV3X3ByaW50ZXJzIGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gcmVnaXN0ZXJfcHJpbnRlciBmblxuXG5leHRlcm5hbCBnZXRfY2FsbHN0YWNrOiBpbnQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2tcIlxuXG5sZXQgZXhuX3Nsb3QgeCA9XG4gIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICBpZiBPYmoudGFnIHggPSAwIHRoZW4gT2JqLmZpZWxkIHggMCBlbHNlIHhcblxubGV0IGV4bl9zbG90X2lkIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDEpIDogaW50KVxuXG5sZXQgZXhuX3Nsb3RfbmFtZSB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAwKSA6IHN0cmluZylcblxuZXh0ZXJuYWwgZ2V0X2RlYnVnX2luZm9fc3RhdHVzIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXNcIlxuXG4oKiBEZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiBzdGFydHVwLmguIFNlZSBhbHNvIGJhY2t0cmFjZS5jICopXG5sZXQgZXJyb3JzID0gW3wgXCJcIjtcbiAgKCogRklMRV9OT1RfRk9VTkQgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIG5vdCBmb3VuZClcIjtcbiAgKCogQkFEX0JZVEVDT0RFICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQpXCI7XG4gICgqIFdST05HX01BR0lDICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyKVwiO1xuICAoKiBOT19GRFMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQ7XFxuIFxcXG4gICAgICAtLSB0b28gbWFueSBvcGVuIGZpbGVzLiBUcnkgcnVubmluZyB3aXRoIE9DQU1MUlVOUEFSQU09Yj0yKVwiXG58XVxuXG5sZXQgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZSA9XG4gIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICBsZXQgc3RhdHVzID0gZ2V0X2RlYnVnX2luZm9fc3RhdHVzICgpIGluXG4gIGlmIHN0YXR1cyA8IDAgdGhlblxuICAgIHByZXJyX2VuZGxpbmUgZXJyb3JzLihhYnMgc3RhdHVzKTtcbiAgZmx1c2ggc3RkZXJyXG5cbmxldCB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA9IHJlZiBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyXG5cbmxldCBzZXRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZm4gPSB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA6PSBmblxuXG5sZXQgZW1wdHlfYmFja3RyYWNlIDogcmF3X2JhY2t0cmFjZSA9IFt8IHxdXG5cbmxldCB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgPVxuICB0cnlcbiAgICBnZXRfcmF3X2JhY2t0cmFjZSAoKVxuICB3aXRoIF8gKCogT3V0X29mX21lbW9yeT8gKikgLT5cbiAgICBlbXB0eV9iYWNrdHJhY2VcblxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICAoKiBHZXQgdGhlIGJhY2t0cmFjZSBub3csIGluIGNhc2Ugb25lIG9mIHRoZSBbYXRfZXhpdF0gZnVuY3Rpb25cbiAgICAgICBkZXN0cm95cyBpdC4gKilcbiAgICBsZXQgcmF3X2JhY2t0cmFjZSA9XG4gICAgICBpZiBkZWJ1Z2dlcl9pbl91c2UgKCogU2FtZSB0ZXN0IGFzIGluIFtydW50aW1lL3ByaW50ZXhjLmNdICopIHRoZW5cbiAgICAgICAgZW1wdHlfYmFja3RyYWNlXG4gICAgICBlbHNlXG4gICAgICAgIHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKVxuICAgIGluXG4gICAgKHRyeSBTdGRsaWIuZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgIHRyeVxuICAgICAgIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlXG4gICAgd2l0aCBleG4nIC0+XG4gICAgICBsZXQgcmF3X2JhY2t0cmFjZScgPSB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvciBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcjogZXhjZXB0aW9uICVzXFxuXCJcbiAgICAgICAgKHRvX3N0cmluZyBleG4nKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgZmx1c2ggc3RkZXJyXG4gIHdpdGhcbiAgICB8IE91dF9vZl9tZW1vcnkgLT5cbiAgICAgICAgcHJlcnJfZW5kbGluZVxuICAgICAgICAgIFwiRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXJcIlxuXG4oKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBbY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25dIGluXG4gICBbcnVudGltZS9wcmludGV4Yy5jXSB3aGljaCBleHBlY3RzIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICopXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZVxuICB3aXRoIF8gLT5cbiAgICAoKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqKVxuICAgICgpXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfb2JqX3RhZyIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsNSIsImEyIiwiYTMiLCJhNCIsImNhbWxfY2FsbDciLCJhNSIsImE2IiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0F0b21pYyIsIlN0ZGxpYiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfT2JqIiwicHJpbnRlcnMiLCJmaWVsZCIsIngiLCJpIiwiY3N0Iiwib3RoZXJfZmllbGRzIiwidXNlX3ByaW50ZXJzIiwicGFyYW0iLCJ0bCIsImhkIiwidmFsIiwicyIsInN0cmluZ19vZl9leHRlbnNpb25fY29uc3RydWN0byIsInQiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZmllbGRzX29wdCIsImNzdF9jaGFyYWN0ZXJzIiwibG9jZm10IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyIiwibGluZSIsImZpbGUiLCJ0b19zdHJpbmciLCJlIiwiY3N0X1VuY2F1Z2h0X2V4Y2VwdGlvbiIsImNzdF9VbmNhdWdodF9leGNlcHRpb25fcyIsInByaW50IiwiZmN0IiwiYXJnIiwiY2F0Y2gkIiwicmF3X2JhY2t0cmFjZV9lbnRyaWVzIiwiYnQiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJwb3MiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwibGluZXMiLCJjc3RfcyIsImNzdF9Qcm9ncmFtX25vdF9saW5rZWRfd2l0aF9nXyIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJvdXRjaGFuIiwicmF3X2JhY2t0cmFjZSIsImJhY2t0cmFjZSIsImEiLCJzdHIiLCJwcmludF9iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlX3RvX3N0cmluZyIsImIiLCJiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSIsImJhY2t0cmFjZV9zbG90X2lzX2lubGluZSIsImJhY2t0cmFjZV9zbG90X2xvY2F0aW9uIiwiYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSIsImJhY2t0cmFjZV9zbG90cyIsImJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkiLCJlbnRyeSIsInJhd19iYWNrdHJhY2VfbGVuZ3RoIiwiZ2V0X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsInN1Y2Nlc3MiLCJleG5fc2xvdCIsImV4bl9zbG90X2lkIiwiZXhuX3Nsb3RfbmFtZSIsImVycm9ycyIsImNzdF9GYXRhbF9lcnJvcl9leGNlcHRpb24iLCJjc3RfRmF0YWxfZXJyb3JfZXhjZXB0aW9uX3MiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJleG4iLCJzdGF0dXMiLCJ1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsInNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsImVtcHR5X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJTdGRsaWJfUHJpbnRleGMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxpQ0FBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBSixHQUFBQyxJQUFBRSxJ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QUFBQSxZQW1Cd0M7QUFBQSxPQUF0QztBQUFBLE9BQ0E7QUFBQSxlQUVFO0FBQUEsT0FERjtBQUFBLE9BRUE7QUFBQSxlQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBQTRCO0FBQUFBLFVBQUFBLE1EeldOO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0M0V1E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQUFBLEtBVUo7QUFBQSxHQUFFO0FBQUEsR0FNSjtBQUFBO0FBQUE7QUFBQSxJQUFBTztBQUFBQSxNQUMyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEN1g3QiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjIyNDUzLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2Z1bi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgY29tcG9zZSBmIGcgeCA9IGYgKGcgeClcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfUHJpbnRleGMiLCJTdGRsaWIiLCJjb25zdCQiLCJjIiwicGFyYW0iLCJjb21wb3NlIiwiZyIsIngiLCJmbGlwIiwieSIsIm5lZ2F0ZSIsInAiLCJ2IiwiRmluYWxseV9yYWlzZWQiLCJleG4iLCJkdW1teSIsInByb3RlY3QiLCJmaW5hbGx5JCIsIndvcmsiLCJmaW5hbGx5X25vX2V4biIsImUiLCJidCIsInJlc3VsdCIsIndvcmtfZXhuIiwid29ya19idCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDZCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLFlBQUFDLE9BQUFDLEdBQUFDLE9DZ0JnQixTQUFDO0FBQUEsWUFBQUMsUUFBQVYsR0FBQVcsR0FBQUMsR0FDSyxPQUFLLGNBQUwsaUJBQUs7QUFBQSxZQUFBQyxLQUFBYixHQUFBWSxHQUFBRSxHQUNWLDBCQUFLO0FBQUEsWUFBQUMsT0FBQUMsR0FBQUMsR0FDRCwyQkFBSztBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTURuQjFCO0FBQUEsR0N1QlM7QUFBQTtBQUFBLGNBQUFUO0FBQUFBLE1BQTZCLGdDQUUvQjtBQUFBLFVBQUFVLE1BRitCLGNBQ2lCO0FBQUEsTUFBMUIsNERBQWlEO0FBQUEsS0FDbkU7QUFBQSxPQUFBQyxRQUFBO0FBQUEsWUFBQUMsUUFBQUMsVUFBQUM7QUFBQUEsYUFBQUMsZUFBQWY7QUFBQUEsS0FJUCxJQUFJO0FBQUEsV0FBQWdCO0FBQUFBO0FBQUFBLE9BQUFBLElEN0JSO0FBQUEsT0FBQUMsS0M4QmU7QUFBQSxPQUFBUCxNQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBbUQ7QUFBQSxJQUV2RCxRQUFBUSxTQUFNO0FBQUEsVUFBQUM7QUFBQUE7QUFBQUEsTUFBQUEsV0RqQ1I7QUFBQSxNQUFBQyxVQ29Db0I7QUFBQSxLQUNkO0FBQUEsS0FBaUI7QUFBQTtBQUFBO0FBQUEsSUFIVDtBQUFBLElBQWlCO0FBQUEsR0FJcUI7QUFBQSxHQWJ6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUR6QlgiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMjUyNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9pbl9jaGFubmVsLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbl9jaGFubmVsXG5cbnR5cGUgb3Blbl9mbGFnID0gU3RkbGliLm9wZW5fZmxhZyA9XG4gIHwgT3Blbl9yZG9ubHlcbiAgfCBPcGVuX3dyb25seVxuICB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdFxuICB8IE9wZW5fdHJ1bmNcbiAgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeVxuICB8IE9wZW5fdGV4dFxuICB8IE9wZW5fbm9uYmxvY2tcblxubGV0IHN0ZGluID0gU3RkbGliLnN0ZGluXG5sZXQgb3Blbl9iaW4gPSBTdGRsaWIub3Blbl9pbl9iaW5cbmxldCBvcGVuX3RleHQgPSBTdGRsaWIub3Blbl9pblxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5faW5fZ2VuXG5cbmxldCB3aXRoX29wZW4gb3BlbmZ1biBzIGYgPVxuICBsZXQgaWMgPSBvcGVuZnVuIHMgaW5cbiAgRnVuLnByb3RlY3QgfmZpbmFsbHk6KGZ1biAoKSAtPiBTdGRsaWIuY2xvc2VfaW5fbm9lcnIgaWMpXG4gICAgKGZ1biAoKSAtPiBmIGljKVxuXG5sZXQgd2l0aF9vcGVuX2JpbiBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW5fYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX2luIHMgZlxuXG5sZXQgd2l0aF9vcGVuX2dlbiBmbGFncyBwZXJtIHMgZiA9XG4gIHdpdGhfb3BlbiAoU3RkbGliLm9wZW5faW5fZ2VuIGZsYWdzIHBlcm0pIHMgZlxuXG5sZXQgc2VlayA9IFN0ZGxpYi5MYXJnZUZpbGUuc2Vla19pblxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX2luXG5sZXQgbGVuZ3RoID0gU3RkbGliLkxhcmdlRmlsZS5pbl9jaGFubmVsX2xlbmd0aFxubGV0IGNsb3NlID0gU3RkbGliLmNsb3NlX2luXG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2VfaW5fbm9lcnJcblxubGV0IGlucHV0X2NoYXIgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gIHwgYyAtPiBTb21lIGNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXRfYnl0ZSBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9ieXRlIGljIHdpdGhcbiAgfCBuIC0+IFNvbWUgblxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9saW5lIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IHMgLT4gU29tZSBzXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0ID0gU3RkbGliLmlucHV0XG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dF9iaWdhcnJheSA6XG4gIHQgLT4gXyBCaWdhcnJheS5BcnJheTEudCAtPiBpbnQgLT4gaW50IC0+IGludFxuICA9IFwiY2FtbF9tbF9pbnB1dF9iaWdhcnJheVwiXG5cbmxldCBpbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBCaWdhcnJheS5BcnJheTEuZGltIGJ1ZiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRfYmlnYXJyYXlcIlxuICBlbHNlIHVuc2FmZV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dCBpYyBidWYgcG9zIGxlbiB3aXRoXG4gIHwgKCkgLT4gU29tZSAoKVxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gU29tZSAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXRfYmlnYXJyYXkgaWMgYnVmIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gTm9uZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dF9iaWdhcnJheSBpYyBidWYgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBCaWdhcnJheS5BcnJheTEuZGltIGJ1ZiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0X2JpZ2FycmF5XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0X2JpZ2FycmF5IGljIGJ1ZiBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIG1hdGNoIFN0ZGxpYi5yZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiB3aXRoXG4gIHwgcyAtPiBTb21lIHNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG4oKiBSZWFkIHVwIHRvIFtsZW5dIGJ5dGVzIGludG8gW2J1Zl0sIHN0YXJ0aW5nIGF0IFtvZnNdLiBSZXR1cm4gdG90YWwgYnl0ZXNcbiAgIHJlYWQuICopXG5sZXQgcmVhZF91cHRvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIG9mcyBsZW4gPVxuICAgIGlmIGxlbiA9IDAgdGhlbiBvZnNcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IFN0ZGxpYi5pbnB1dCBpYyBidWYgb2ZzIGxlbiBpblxuICAgICAgaWYgciA9IDAgdGhlblxuICAgICAgICBvZnNcbiAgICAgIGVsc2VcbiAgICAgICAgbG9vcCAob2ZzICsgcikgKGxlbiAtIHIpXG4gICAgZW5kXG4gIGluXG4gIGxvb3Agb2ZzIGxlbiAtIG9mc1xuXG4oKiBCZXN0IGVmZm9ydCBhdHRlbXB0IHRvIHJldHVybiBhIGJ1ZmZlciB3aXRoID49IChvZnMgKyBuKSBieXRlcyBvZiBzdG9yYWdlLFxuICAgYW5kIHN1Y2ggdGhhdCBpdCBjb2luY2lkZXMgd2l0aCBbYnVmXSBhdCBpbmRpY2VzIDwgW29mc10uXG5cbiAgIFRoZSByZXR1cm5lZCBidWZmZXIgaXMgZXF1YWwgdG8gW2J1Zl0gaXRzZWxmIGlmIGl0IGFscmVhZHkgaGFzIHN1ZmZpY2llbnRcbiAgIGZyZWUgc3BhY2UuXG5cbiAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGhhdmUgKmZld2VyKiB0aGFuIFtvZnMgKyBuXSBieXRlcyBvZiBzdG9yYWdlIGlmIHRoaXNcbiAgIG51bWJlciBpcyA+IFtTeXMubWF4X3N0cmluZ19sZW5ndGhdLiBIb3dldmVyIHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbFxuICAgKmFsd2F5cyogaGF2ZSA+IFtvZnNdIGJ5dGVzIG9mIHN0b3JhZ2UuIEluIHRoZSBsaW1pdGluZyBjYXNlIHdoZW4gW29mcyA9IGxlblxuICAgPSBTeXMubWF4X3N0cmluZ19sZW5ndGhdIChzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXNpemUgdGhlIGJ1ZmZlciBhdFxuICAgYWxsKSwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcblxubGV0IGVuc3VyZSBidWYgb2ZzIG4gPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPj0gb2ZzICsgbiB0aGVuIGJ1ZlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IG5ld19sZW4gPSByZWYgbGVuIGluXG4gICAgd2hpbGUgIW5ld19sZW4gPCBvZnMgKyBuIGRvXG4gICAgICBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiArIDFcbiAgICBkb25lO1xuICAgIGxldCBuZXdfbGVuID0gIW5ld19sZW4gaW5cbiAgICBsZXQgbmV3X2xlbiA9XG4gICAgICBpZiBuZXdfbGVuIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIG5ld19sZW5cbiAgICAgIGVsc2UgaWYgb2ZzIDwgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIGZhaWx3aXRoIFwiSW5fY2hhbm5lbC5pbnB1dF9hbGw6IGNoYW5uZWwgY29udGVudCBcXFxuICAgICAgICAgICAgICAgICAgaXMgbGFyZ2VyIHRoYW4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoXCJcbiAgICBpblxuICAgIGxldCBuZXdfYnVmID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1ZiAwIG5ld19idWYgMCBvZnM7XG4gICAgbmV3X2J1ZlxuICBlbmRcblxubGV0IGlucHV0X2FsbCBpYyA9XG4gIGxldCBjaHVua19zaXplID0gNjU1MzYgaW4gKCogSU9fQlVGRkVSX1NJWkUgKilcbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgdHJ5XG4gICAgICBTdGRsaWIuaW5fY2hhbm5lbF9sZW5ndGggaWMgLSBTdGRsaWIucG9zX2luIGljXG4gICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgLTFcbiAgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9IGlmIGluaXRpYWxfc2l6ZSA8IDAgdGhlbiBjaHVua19zaXplIGVsc2UgaW5pdGlhbF9zaXplIGluXG4gIGxldCBpbml0aWFsX3NpemUgPVxuICAgIGlmIGluaXRpYWxfc2l6ZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgaW5pdGlhbF9zaXplXG4gICAgZWxzZVxuICAgICAgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgaW5pdGlhbF9zaXplIGluXG4gIGxldCBucmVhZCA9IHJlYWRfdXB0byBpYyBidWYgMCBpbml0aWFsX3NpemUgaW5cbiAgaWYgbnJlYWQgPCBpbml0aWFsX3NpemUgdGhlbiAoKiBFT0YgcmVhY2hlZCwgYnVmZmVyIHBhcnRpYWxseSBmaWxsZWQgKilcbiAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIG5yZWFkXG4gIGVsc2UgYmVnaW4gKCogbnJlYWQgPSBpbml0aWFsX3NpemUsIG1heWJlIEVPRiByZWFjaGVkICopXG4gICAgbWF0Y2ggU3RkbGliLmlucHV0X2NoYXIgaWMgd2l0aFxuICAgIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+XG4gICAgICAgICgqIEVPRiByZWFjaGVkLCBidWZmZXIgaXMgY29tcGxldGVseSBmaWxsZWQgKilcbiAgICAgICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgICB8IGMgLT5cbiAgICAgICAgKCogRU9GIG5vdCByZWFjaGVkICopXG4gICAgICAgIGxldCByZWMgbG9vcCBidWYgb2ZzID1cbiAgICAgICAgICBsZXQgYnVmID0gZW5zdXJlIGJ1ZiBvZnMgY2h1bmtfc2l6ZSBpblxuICAgICAgICAgIGxldCByZW0gPSBCeXRlcy5sZW5ndGggYnVmIC0gb2ZzIGluXG4gICAgICAgICAgKCogW3JlbV0gY2FuIGJlIDwgW2NodW5rX3NpemVdIGlmIGJ1ZmZlciBzaXplIGNsb3NlIHRvXG4gICAgICAgICAgICAgW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKilcbiAgICAgICAgICBsZXQgciA9IHJlYWRfdXB0byBpYyBidWYgb2ZzIHJlbSBpblxuICAgICAgICAgIGlmIHIgPCByZW0gdGhlbiAoKiBFT0YgcmVhY2hlZCAqKVxuICAgICAgICAgICAgQnl0ZXMuc3ViX3N0cmluZyBidWYgMCAob2ZzICsgcilcbiAgICAgICAgICBlbHNlICgqIHIgPSByZW0gKilcbiAgICAgICAgICAgIGxvb3AgYnVmIChvZnMgKyByZW0pXG4gICAgICAgIGluXG4gICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG5yZWFkIChjaHVua19zaXplICsgMSkgaW5cbiAgICAgICAgQnl0ZXMuc2V0IGJ1ZiBucmVhZCBjO1xuICAgICAgICBsb29wIGJ1ZiAobnJlYWQgKyAxKVxuICBlbmRcblxubGV0IFtAdGFpbF9tb2RfY29uc10gcmVjIGlucHV0X2xpbmVzIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IGxpbmUgLT4gbGluZSA6OiBpbnB1dF9saW5lcyBpY1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBbXVxuXG5sZXQgcmVjIGZvbGRfbGluZXMgZiBhY2N1IGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IGxpbmUgLT4gZm9sZF9saW5lcyBmIChmIGFjY3UgbGluZSkgaWNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gYWNjdVxuXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9pblxuXG5leHRlcm5hbCBpc19iaW5hcnlfbW9kZSA6IGluX2NoYW5uZWwgLT4gYm9vbCA9IFwiY2FtbF9tbF9pc19iaW5hcnlfbW9kZVwiXG5cbmV4dGVybmFsIGlzYXR0eSA6IHQgLT4gYm9vbCA9IFwiY2FtbF9zeXNfaXNhdHR5XCJcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9iYV9kaW1fMSIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX21sX2lucHV0X2JpZ2FycmF5IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9CeXRlcyIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfRnVuIiwic3RkaW4iLCJvcGVuX2JpbiIsIm9wZW5fdGV4dCIsIm9wZW5fZ2VuIiwid2l0aF9vcGVuIiwib3BlbmZ1biIsInMiLCJpYyIsInBhcmFtIiwid2l0aF9vcGVuX2JpbiIsIndpdGhfb3Blbl90ZXh0Iiwid2l0aF9vcGVuX2dlbiIsImZsYWdzIiwicGVybSIsInNlZWsiLCJwb3MiLCJsZW5ndGgiLCJjbG9zZSIsImNsb3NlX25vZXJyIiwiaW5wdXRfY2hhciIsImMiLCJleG4iLCJpbnB1dF9ieXRlIiwibiIsImlucHV0X2xpbmUiLCJpbnB1dCIsImlucHV0X2JpZ2FycmF5IiwiYnVmIiwib2ZzIiwibGVuIiwicmVhbGx5X2lucHV0IiwicmVhbGx5X2lucHV0X2JpZ2FycmF5IiwiciIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJyZWFkX3VwdG8iLCJlbnN1cmUiLCJuZXdfbGVuIiwibmV3X2J1ZiIsImlucHV0X2FsbCIsImluaXRpYWxfc2l6ZSIsImNodW5rX3NpemUiLCJucmVhZCIsInJlbSIsImlucHV0X2xpbmVzIiwibGluZSIsImJsb2NrIiwiZHN0Iiwib2Zmc2V0IiwiZm9sZF9saW5lcyIsImFjY3UiLCJzZXRfYmluYXJ5X21vZGUiLCJTdGRsaWJfSW5fY2hhbm5lbCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FB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QUEsUUFBQXdCLFFDb01ZLGtCQUFBQyxNQUFRLE9BQUFDLFNBQUE7QUFBQTtBQUFBLEtBRGxCLFFBQUFILFNBQU07QUFBQSxXQUFBdkI7QUFBQUEsVUFBQUEsUURuTVI7QUFBQTtBQUFBLE1DcU02QjtBQUFBLE1BREs7QUFBQTtBQUFBLFNBQUF5QixRQUF0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FDbUI7QUFBQSxZQUFBRSxXQUFBekQsR0FBQTBELFFBQUExQztBQUFBQSxRQUFBMEMsT0FHN0I7QUFBQTtBQUFBLGFBQUFMLE9BQU07QUFBQSxXQUFBdkI7QUFBQUEsVUFBQUEsTUR4TVI7QUFBQSw2QkMwTTZCO0FBQUEsTUQxTTdCO0FBQUE7QUFBQSxTQUFBNEIsU0N5TXlCO0FBQUEsS0FBYTtBQUFBO0FBQUEsR0FDTDtBQUFBO0FBQUEsSUFBQUMsa0JEMU1qQztBQUFBLElBQUFDO0FBQUFBLE1BQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMjc5MSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9kaWdlc3QubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFV0aWxpdHkgZnVuY3Rpb25zICopXG5cbmxldCBoZXhfb2Zfc3RyaW5nIGQgPVxuICBsZXQgY2hhcl9oZXggbiA9XG4gICAgQ2hhci5jaHIgKGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgKyBuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIENoYXIuY29kZSAnYScgKyBuIC0gMTApIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIGQgaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAobGVuICogMikgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgc3RyaW5nX29mX2hleCBzID1cbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gaW52YWxpZF9hcmcgXCJEaWdlc3Qub2ZfaGV4XCIgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBTdHJpbmcuaW5pdCAoU3RyaW5nLmxlbmd0aCBzIC8gMikgKGZ1biBpIC0+IENoYXIuY2hyIChieXRlICgyICogaSkpKVxuXG4oKiBHZW5lcmljIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIHR5cGUgdCA9IHN0cmluZ1xuICB2YWwgaGFzaF9sZW5ndGggOiBpbnRcbiAgdmFsIGNvbXBhcmUgOiB0IC0+IHQgLT4gaW50XG4gIHZhbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCBzdHJpbmcgOiBzdHJpbmcgLT4gdFxuICB2YWwgYnl0ZXMgOiBieXRlcyAtPiB0XG4gIHZhbCBzdWJzdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0XG4gIHZhbCBzdWJieXRlcyA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdFxuICB2YWwgY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHRcbiAgdmFsIGZpbGUgOiBzdHJpbmcgLT4gdFxuICB2YWwgb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gdCAtPiB1bml0XG4gIHZhbCBpbnB1dCA6IGluX2NoYW5uZWwgLT4gdFxuICB2YWwgdG9faGV4IDogdCAtPiBzdHJpbmdcbiAgdmFsIG9mX2hleCA6IHN0cmluZyAtPiB0XG5lbmRcblxuKCogQkxBS0UyIGhhc2hpbmcsIHBhcmFtZXRlcml6ZWQgYnkgaGFzaCBzaXplICopXG5cbm1vZHVsZSBCTEFLRTIgKFg6IHNpZyB2YWwgaGFzaF9sZW5ndGggOiBpbnQgZW5kKSA6IFMgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSBzdHJpbmdcblxuICBsZXQgaGFzaF9sZW5ndGggPVxuICAgIGlmIFguaGFzaF9sZW5ndGggPCAxIHx8IFguaGFzaF9sZW5ndGggPiA2NFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuQkxBS0UyOiB3cm9uZyBoYXNoIHNpemVcIjtcbiAgICBYLmhhc2hfbGVuZ3RoXG5cbiAgbGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxuICBsZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuICB0eXBlIHN0YXRlXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2dlbjogaW50IC0+IHN0cmluZyAtPiBzdGF0ZSA9IFwiY2FtbF9ibGFrZTJfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgdXBkYXRlOiBzdGF0ZSAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2JsYWtlMl91cGRhdGVcIlxuICBleHRlcm5hbCBmaW5hbDogc3RhdGUgLT4gaW50IC0+IHQgPSBcImNhbWxfYmxha2UyX2ZpbmFsXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogaW50IC0+IHN0cmluZyAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGFrZTJfc3RyaW5nXCJcblxuICBsZXQgY3JlYXRlICgpID0gY3JlYXRlX2dlbiBoYXNoX2xlbmd0aCBcIlwiXG5cbiAgbGV0IHN0cmluZyBzdHIgPVxuICAgIHVuc2FmZV9zdHJpbmcgaGFzaF9sZW5ndGggXCJcIiBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IGJ5dGVzIGIgPVxuICAgIHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG4gIGxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCI7XG4gICAgdW5zYWZlX3N0cmluZyBoYXNoX2xlbmd0aCBcIlwiIHN0ciBvZnMgbGVuXG5cbiAgbGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9XG4gICAgc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxuICBsZXQgY2hhbm5lbCBpYyB0b3JlYWQgPVxuICAgIGxldCBidWZfc2l6ZSA9IDQwOTYgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGJ1Zl9zaXplIGluXG4gICAgbGV0IGN0eCA9IGNyZWF0ZSAoKSBpblxuICAgIGlmIHRvcmVhZCA8IDAgdGhlbiBiZWdpblxuICAgICAgbGV0IHJlYyBkb19yZWFkICgpID1cbiAgICAgICAgbGV0IG4gPSBJbl9jaGFubmVsLmlucHV0IGljIGJ1ZiAwIGJ1Zl9zaXplIGluXG4gICAgICAgIGlmIG4gPSAwXG4gICAgICAgIHRoZW4gZmluYWwgY3R4IGhhc2hfbGVuZ3RoXG4gICAgICAgIGVsc2UgKHVwZGF0ZSBjdHggKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmKSAwIG47IGRvX3JlYWQgKCkpXG4gICAgICBpbiBkb19yZWFkICgpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGxldCByZWMgZG9fcmVhZCB0b3JlYWQgPVxuICAgICAgICBpZiB0b3JlYWQgPSAwIHRoZW4gZmluYWwgY3R4IGhhc2hfbGVuZ3RoIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgbiA9IEluX2NoYW5uZWwuaW5wdXQgaWMgYnVmIDAgKEludC5taW4gYnVmX3NpemUgdG9yZWFkKSBpblxuICAgICAgICAgIGlmIG4gPSAwXG4gICAgICAgICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgIHVwZGF0ZSBjdHggKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmKSAwIG47XG4gICAgICAgICAgICBkb19yZWFkICh0b3JlYWQgLSBuKVxuICAgICAgICAgIGVuZFxuICAgICAgICBlbmRcbiAgICAgIGluIGRvX3JlYWQgdG9yZWFkXG4gICAgZW5kXG5cbiAgbGV0IGZpbGUgZmlsZW5hbWUgPVxuICAgIEluX2NoYW5uZWwud2l0aF9vcGVuX2JpbiBmaWxlbmFtZSAoZnVuIGljIC0+IGNoYW5uZWwgaWMgKC0xKSlcblxuICBsZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID0gb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG4gIGxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIGhhc2hfbGVuZ3RoXG5cbiAgbGV0IHRvX2hleCBkID1cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gaGFzaF9sZW5ndGggdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgICBoZXhfb2Zfc3RyaW5nIGRcblxuICBsZXQgb2ZfaGV4IHMgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA8PiBoYXNoX2xlbmd0aCAqIDIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5vZl9oZXhcIjtcbiAgICBzdHJpbmdfb2ZfaGV4IHNcblxuZW5kXG5cbm1vZHVsZSBCTEFLRTEyOCA9IEJMQUtFMihzdHJ1Y3QgbGV0IGhhc2hfbGVuZ3RoID0gMTYgZW5kKVxubW9kdWxlIEJMQUtFMjU2ID0gQkxBS0UyKHN0cnVjdCBsZXQgaGFzaF9sZW5ndGggPSAzMiBlbmQpXG5tb2R1bGUgQkxBS0U1MTIgPSBCTEFLRTIoc3RydWN0IGxldCBoYXNoX2xlbmd0aCA9IDY0IGVuZClcblxuKCogTUQ1IGhhc2hpbmcgKilcblxubW9kdWxlIE1ENSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHN0cmluZ1xuXG4gIGxldCBoYXNoX2xlbmd0aCA9IDE2XG5cbiAgbGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxuICBsZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuICBleHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuICBleHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxuICBsZXQgc3RyaW5nIHN0ciA9XG4gICAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxuICBsZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gICAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbiAgbGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbiAgbGV0IGZpbGUgZmlsZW5hbWUgPVxuICAgIEluX2NoYW5uZWwud2l0aF9vcGVuX2JpbiBmaWxlbmFtZSAoZnVuIGljIC0+IGNoYW5uZWwgaWMgKC0xKSlcblxuICBsZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID0gb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG4gIGxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbiAgbGV0IHRvX2hleCBkID1cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgICBoZXhfb2Zfc3RyaW5nIGRcblxuICBsZXQgb2ZfaGV4IHMgPVxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gICAgc3RyaW5nX29mX2hleCBzXG5cbmVuZFxuXG4oKiBEZWZhdWx0IGV4cG9ydGVkIGltcGxlbWVudGF0aW9uIGlzIE1ENSAqKVxuXG5pbmNsdWRlIE1ENVxuXG5sZXQgZnJvbV9oZXggPSBvZl9oZXhcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9ibGFrZTJfZmluYWwiLCJjYW1sX2JsYWtlMl9zdHJpbmciLCJjYW1sX2JsYWtlMl91cGRhdGUiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2NyZWF0ZV9ieXRlcyIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWQ1X2NoYW4iLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9Jbl9jaGFubmVsIiwiU3RkbGliX0J5dGVzIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQ2hhciIsImhleF9vZl9zdHJpbmciLCJkIiwiY2hhcl9oZXgiLCJuIiwibGVuIiwicmVzdWx0IiwiaSIsIngiLCJjc3RfRGlnZXN0X29mX2hleCIsInN0cmluZ19vZl9oZXgiLCJzIiwiZGlnaXQiLCJjIiwiY3N0X0RpZ2VzdF9zdWJzdHJpbmciLCJjc3RfRGlnZXN0X3RvX2hleCIsIkJMQUtFMiIsIlgiLCJoYXNoX2xlbmd0aCIsImNvbXBhcmUiLCJlcXVhbCIsImNzdCIsInN0cmluZyIsInN0ciIsImJ5dGVzIiwiYiIsInN1YnN0cmluZyIsIm9mcyIsInN1YmJ5dGVzIiwiY2hhbm5lbCIsImljIiwidG9yZWFkIiwiYnVmIiwiY3R4IiwiYnVmX3NpemUiLCJmaWxlIiwiZmlsZW5hbWUiLCJvdXRwdXQiLCJjaGFuIiwiZGlnZXN0IiwiaW5wdXQiLCJ0b19oZXgiLCJvZl9oZXgiLCJCTEFLRTEyOCIsIkJMQUtFMjU2IiwiQkxBS0U1MTIiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxZQUFBQyxjQUFBQztBQUFBQSxhQUFBQyxTQUFBQztBQUFBQSxTQUFBLElDbUJJO0FBQUEsd0NBQ2dEO0FBQUE7QUFBQTtBQUFBLEtBQUFDLE1BQ2xEO0FBQUEsS0FBQUMsU0FDYTtBQUFBLFNBQ2I7QUFBQTtBQUFBLFNBQUFDLElBQUE7QUFBQTtBQUFBLFVBQUFDLElBQ29CO0FBQUEsTUFDZ0MseUNBQXBCO0FBQUEsTUFDMEIsbURBQXhCO0FBQUEsY0FBd0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElB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O0FBQUFBLElBRzFDO0FBQUEsS0FBOEI7QUFBQSxJQUM5Qix1QkFBZTtBQUFBO0FBQUEsWUFBQXdDLE9BQUEvQjtBQUFBQSxJQUdmO0FBQUEsS0FBOEI7QUFBQSxJQUM5Qix1QkFBZTtBQUFBO0FBQUEsR0R0TG5CIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjMwMTYsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvYmlnYXJyYXkubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgTWFudWVsIFNlcnJhbm8gZXQgWGF2aWVyIExlcm95LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbQmlnYXJyYXldOiBsYXJnZSwgbXVsdGktZGltZW5zaW9uYWwsIG51bWVyaWNhbCBhcnJheXMgKilcblxuKCogVGhlc2UgdHlwZXMgaW4gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdGFibGVzIGluXG4gICAuLi90eXBpbmcvdHlwZW9wdC5tbCAqKVxuXG50eXBlIGZsb2F0MTZfZWx0ID0gRmxvYXQxNl9lbHRcbnR5cGUgZmxvYXQzMl9lbHQgPSBGbG9hdDMyX2VsdFxudHlwZSBmbG9hdDY0X2VsdCA9IEZsb2F0NjRfZWx0XG50eXBlIGludDhfc2lnbmVkX2VsdCA9IEludDhfc2lnbmVkX2VsdFxudHlwZSBpbnQ4X3Vuc2lnbmVkX2VsdCA9IEludDhfdW5zaWduZWRfZWx0XG50eXBlIGludDE2X3NpZ25lZF9lbHQgPSBJbnQxNl9zaWduZWRfZWx0XG50eXBlIGludDE2X3Vuc2lnbmVkX2VsdCA9IEludDE2X3Vuc2lnbmVkX2VsdFxudHlwZSBpbnQzMl9lbHQgPSBJbnQzMl9lbHRcbnR5cGUgaW50NjRfZWx0ID0gSW50NjRfZWx0XG50eXBlIGludF9lbHQgPSBJbnRfZWx0XG50eXBlIG5hdGl2ZWludF9lbHQgPSBOYXRpdmVpbnRfZWx0XG50eXBlIGNvbXBsZXgzMl9lbHQgPSBDb21wbGV4MzJfZWx0XG50eXBlIGNvbXBsZXg2NF9lbHQgPSBDb21wbGV4NjRfZWx0XG5cbigqIEtlZXAgdGhlIG9yZGVyIG9mIHRoZXNlIGNvbnN0cnVjdG9ycyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfa2luZFxuICAgZW51bWVyYXRpb24gaW4gYmlnYXJyYXkuaCAqKVxuXG50eXBlICgnYSwgJ2IpIGtpbmQgPVxuICB8IEZsb2F0MzIgOiAoZmxvYXQsIGZsb2F0MzJfZWx0KSBraW5kXG4gIHwgRmxvYXQ2NCA6IChmbG9hdCwgZmxvYXQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3NpZ25lZCA6IChpbnQsIGludDhfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDhfdW5zaWduZWQgOiAoaW50LCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3NpZ25lZCA6IChpbnQsIGludDE2X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl91bnNpZ25lZCA6IChpbnQsIGludDE2X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDMyIDogKGludDMyLCBpbnQzMl9lbHQpIGtpbmRcbiAgfCBJbnQ2NCA6IChpbnQ2NCwgaW50NjRfZWx0KSBraW5kXG4gIHwgSW50IDogKGludCwgaW50X2VsdCkga2luZFxuICB8IE5hdGl2ZWludCA6IChuYXRpdmVpbnQsIG5hdGl2ZWludF9lbHQpIGtpbmRcbiAgfCBDb21wbGV4MzIgOiAoQ29tcGxleC50LCBjb21wbGV4MzJfZWx0KSBraW5kXG4gIHwgQ29tcGxleDY0IDogKENvbXBsZXgudCwgY29tcGxleDY0X2VsdCkga2luZFxuICB8IENoYXIgOiAoY2hhciwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBGbG9hdDE2IDogKGZsb2F0LCBmbG9hdDE2X2VsdCkga2luZFxuXG50eXBlIGNfbGF5b3V0ID0gQ19sYXlvdXRfdHlwXG50eXBlIGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRfdHlwICgqKilcblxudHlwZSAnYSBsYXlvdXQgPVxuICAgIENfbGF5b3V0OiBjX2xheW91dCBsYXlvdXRcbiAgfCBGb3J0cmFuX2xheW91dDogZm9ydHJhbl9sYXlvdXQgbGF5b3V0XG5cbmxldCBmbG9hdDE2ID0gRmxvYXQxNlxubGV0IGZsb2F0MzIgPSBGbG9hdDMyXG5sZXQgZmxvYXQ2NCA9IEZsb2F0NjRcbmxldCBpbnQ4X3NpZ25lZCA9IEludDhfc2lnbmVkXG5sZXQgaW50OF91bnNpZ25lZCA9IEludDhfdW5zaWduZWRcbmxldCBpbnQxNl9zaWduZWQgPSBJbnQxNl9zaWduZWRcbmxldCBpbnQxNl91bnNpZ25lZCA9IEludDE2X3Vuc2lnbmVkXG5sZXQgaW50MzIgPSBJbnQzMlxubGV0IGludDY0ID0gSW50NjRcbmxldCBpbnQgPSBJbnRcbmxldCBuYXRpdmVpbnQgPSBOYXRpdmVpbnRcbmxldCBjb21wbGV4MzIgPSBDb21wbGV4MzJcbmxldCBjb21wbGV4NjQgPSBDb21wbGV4NjRcbmxldCBjaGFyID0gQ2hhclxuXG5sZXQga2luZF9zaXplX2luX2J5dGVzIDogdHlwZSBhIGIuIChhLCBiKSBraW5kIC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgRmxvYXQxNiAtPiAyXG4gIHwgRmxvYXQzMiAtPiA0XG4gIHwgRmxvYXQ2NCAtPiA4XG4gIHwgSW50OF9zaWduZWQgLT4gMVxuICB8IEludDhfdW5zaWduZWQgLT4gMVxuICB8IEludDE2X3NpZ25lZCAtPiAyXG4gIHwgSW50MTZfdW5zaWduZWQgLT4gMlxuICB8IEludDMyIC0+IDRcbiAgfCBJbnQ2NCAtPiA4XG4gIHwgSW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgTmF0aXZlaW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgQ29tcGxleDMyIC0+IDhcbiAgfCBDb21wbGV4NjQgLT4gMTZcbiAgfCBDaGFyIC0+IDFcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2xheW91dCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgY19sYXlvdXQgPSBDX2xheW91dFxubGV0IGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRcblxubW9kdWxlIEdlbmFycmF5ID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHRcbiAgZXh0ZXJuYWwgY3JlYXRlOiAoJ2EsICdiKSBraW5kIC0+ICdjIGxheW91dCAtPiBpbnQgYXJyYXkgLT4gKCdhLCAnYiwgJ2MpIHRcbiAgICAgPSBcImNhbWxfYmFfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgYXJyYXkgLT4gJ2FcbiAgICAgPSBcImNhbWxfYmFfZ2V0X2dlbmVyaWNcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYSAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX3NldF9nZW5lcmljXCJcblxuICBsZXQgcmVjIGNsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPSBBcnJheS5sZW5ndGggaWR4IHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAwIHRvIHByZWQgbWF4Lihjb2wpIGRvXG4gICAgICAgICAgIGlkeC4oY29sKSA8LSBqO1xuICAgICAgICAgICBjbG9vcCBhcnIgaWR4IGYgKHN1Y2MgY29sKSBtYXhcbiAgICAgICAgIGRvbmVcbiAgbGV0IHJlYyBmbG9vcCBhcnIgaWR4IGYgY29sIG1heCA9XG4gICAgaWYgY29sIDwgMCB0aGVuIHNldCBhcnIgaWR4IChmIGlkeClcbiAgICBlbHNlIGZvciBqID0gMSB0byBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGZsb29wIGFyciBpZHggZiAocHJlZCBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltcyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbXMgaW5cbiAgICBsZXQgZGxlbiA9IEFycmF5Lmxlbmd0aCBkaW1zIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDApIGYgMCBkaW1zOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDEpIGYgKHByZWQgZGxlbikgZGltczsgYXJyXG5cbiAgZXh0ZXJuYWwgbnVtX2RpbXM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiY2FtbF9iYV9udW1fZGltc1wiXG4gIGV4dGVybmFsIG50aF9kaW06ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfYmFfZGltXCJcbiAgbGV0IGRpbXMgYSA9XG4gICAgbGV0IG4gPSBudW1fZGltcyBhIGluXG4gICAgbGV0IGQgPSBBcnJheS5tYWtlIG4gMCBpblxuICAgIGZvciBpID0gMCB0byBuLTEgZG8gZC4oaSkgPC0gbnRoX2RpbSBhIGkgZG9uZTtcbiAgICBkXG5cbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChBcnJheS5mb2xkX2xlZnQgKCAqICkgMSAoZGltcyBhcnIpKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDogKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzbGljZV9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBzbGljZV9yaWdodDogKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IGFycmF5IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3NsaWNlXCJcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbmVuZFxuXG5tb2R1bGUgQXJyYXkwID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0ID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3x8XVxuICBsZXQgZ2V0IGFyciA9IEdlbmFycmF5LmdldCBhcnIgW3x8XVxuICBsZXQgc2V0IGFyciA9IEdlbmFycmF5LnNldCBhcnIgW3x8XVxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9IGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpXG5cbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcblxuICBsZXQgb2ZfdmFsdWUga2luZCBsYXlvdXQgdiA9XG4gICAgbGV0IGEgPSBjcmVhdGUga2luZCBsYXlvdXQgaW5cbiAgICBzZXQgYSB2O1xuICAgIGFcbiAgbGV0IGluaXQgPSBvZl92YWx1ZVxuZW5kXG5cbm1vZHVsZSBBcnJheTEgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW18XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzFcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMVwiXG4gIGV4dGVybmFsIGRpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKGRpbSBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsICdjKSB0ID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZSAodHlwZSB0KSAoYSA6IChfLCBfLCB0KSBHZW5hcnJheS50KSBuID1cbiAgICBtYXRjaCBsYXlvdXQgYSB3aXRoXG4gICAgfCBDX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XTogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbSBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBmb3J0cmFuX2luaXQgYXJyIGRpbSBmID1cbiAgICBmb3IgaSA9IDEgdG8gZGltIGRvIHVuc2FmZV9zZXQgYXJyIGkgKGYgaSkgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0gZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgKEFycmF5Lmxlbmd0aCBkYXRhKSBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGRhdGEgLSAxIGRvIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIGRhdGEuKGkpIGRvbmU7XG4gICAgYmFcbmVuZFxuXG5tb2R1bGUgQXJyYXkyID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMnxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzJcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWNhbWxfYmFfc2V0XzJcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzJcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMlwiXG4gIGV4dGVybmFsIGRpbTE6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzFcIlxuICBleHRlcm5hbCBkaW0yOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8yXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZV9sZWZ0IGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHQgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgY19pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGkgPSAwIHRvIHByZWQgZGltMSBkb1xuICAgICAgZm9yIGogPSAwIHRvIHByZWQgZGltMiBkb1xuICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogKGYgaSBqKVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGYgPVxuICAgIGZvciBqID0gMSB0byBkaW0yIGRvXG4gICAgICBmb3IgaSA9IDEgdG8gZGltMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogKGYgaSBqKVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBpblxuICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgfCBDX2xheW91dCAtPiBjX2luaXQgYXJyIGRpbTEgZGltMiBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gZGltMSAtIDEgZG9cbiAgICAgIGxldCByb3cgPSBkYXRhLihpKSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIHJvdyA8PiBkaW0yIHRoZW5cbiAgICAgICAgaW52YWxpZF9hcmcoXCJCaWdhcnJheS5BcnJheTIub2ZfYXJyYXk6IG5vbi1yZWN0YW5ndWxhciBkYXRhXCIpO1xuICAgICAgZm9yIGogPSAwIHRvIGRpbTIgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSByb3cuKGopXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTMgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbTE7IGRpbTI7IGRpbTN8XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfM1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfc2V0XzNcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYVxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8zXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8zXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBkaW0zOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8zXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKSAqIChkaW0zIGFycilcblxuICBleHRlcm5hbCBzdWJfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzdWJfcmlnaHQ6XG4gICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfcmlnaHRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xuOyBtfF1cbiAgbGV0IHNsaWNlX2xlZnRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF1cbiAgbGV0IHNsaWNlX3JpZ2h0XzIgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIGZvciBrID0gMCB0byBwcmVkIGRpbTMgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZiA9XG4gICAgZm9yIGsgPSAxIHRvIGRpbTMgZG9cbiAgICAgIGZvciBqID0gMSB0byBkaW0yIGRvXG4gICAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBhcnIgaSBqIGsgKGYgaSBqIGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGY7IGFyclxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGRpbTMgPSBpZiBkaW0yID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgbGV0IGNvbCA9IHJvdy4oaikgaW5cbiAgICAgICAgaWYgQXJyYXkubGVuZ3RoIGNvbCA8PiBkaW0zIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICAgIGZvciBrID0gMCB0byBkaW0zIC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSAoayArIG9mcykgY29sLihrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MDogKCdhLCAnYiwgJ2MpIEFycmF5MC50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MTogKCdhLCAnYiwgJ2MpIEFycmF5MS50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MjogKCdhLCAnYiwgJ2MpIEFycmF5Mi50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MzogKCdhLCAnYiwgJ2MpIEFycmF5My50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmxldCBhcnJheTBfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAwIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkwX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTFfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAxIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkxX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTJfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAyIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkyX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTNfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAzIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkzX29mX2dlbmFycmF5XCJcblxuZXh0ZXJuYWwgcmVzaGFwZTpcbiAgICgnYSwgJ2IsICdjKSBHZW5hcnJheS50IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcImNhbWxfYmFfcmVzaGFwZVwiXG5sZXQgcmVzaGFwZV8wIGEgPSByZXNoYXBlIGEgW3x8XVxubGV0IHJlc2hhcGVfMSBhIGRpbTEgPSByZXNoYXBlIGEgW3xkaW0xfF1cbmxldCByZXNoYXBlXzIgYSBkaW0xIGRpbTIgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTJ8XVxubGV0IHJlc2hhcGVfMyBhIGRpbTEgZGltMiBkaW0zID0gcmVzaGFwZSBhIFt8ZGltMTtkaW0yO2RpbTN8XVxuXG4oKiBGb3JjZSBjYW1sX2JhX2dldF97MSwyLDMsTn0gdG8gYmUgbGlua2VkIGluLCBzaW5jZSB3ZSBkb24ndCByZWZlclxuICAgdG8gdGhvc2UgcHJpbWl0aXZlcyBkaXJlY3RseSBpbiB0aGlzIGZpbGUgKilcblxubGV0IF8gPVxuICBsZXQgXyA9IEdlbmFycmF5LmdldCBpblxuICBsZXQgXyA9IEFycmF5MS5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTIuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkzLmdldCBpblxuICAoKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuZXh0ZXJuYWwgZ2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8xXCJcbmV4dGVybmFsIGdldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfMlwiXG5leHRlcm5hbCBnZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzNcIlxuZXh0ZXJuYWwgc2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8xXCJcbmV4dGVybmFsIHNldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfMlwiXG5leHRlcm5hbCBzZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzNcIlxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2JhX2NoYW5nZV9sYXlvdXQiLCJjYW1sX2JhX2NyZWF0ZSIsImNhbWxfYmFfZGltXzEiLCJjYW1sX2JhX2RpbV8yIiwiY2FtbF9iYV9raW5kIiwiY2FtbF9iYV9udW1fZGltcyIsImNhbWxfYmFfcmVzaGFwZSIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2JhX3NldF8yIiwiY2FtbF9iYV9zZXRfMyIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2JhX3NsaWNlIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tdWwiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiZHVtbXkiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYiIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9TeXMiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJwYXJhbSIsImNsb29wIiwiYXJyIiwiaWR4IiwiY29sIiwibWF4IiwiaiIsImZsb29wIiwiaW5pdCIsImtpbmQiLCJsYXlvdXQiLCJkaW1zIiwiZGxlbiIsImEiLCJuIiwiZCIsImkiLCJzaXplX2luX2J5dGVzIiwiY3JlYXRlIiwiZ2V0Iiwic2V0Iiwib2ZfdmFsdWUiLCJ2IiwiZGltIiwic2xpY2UiLCJvZl9hcnJheSIsImRhdGEiLCJiYSIsIm9mcyIsImRpbTEiLCJkaW0yIiwic2xpY2VfbGVmdCIsInNsaWNlX3JpZ2h0Iiwicm93IiwiZGltMyIsInNsaWNlX2xlZnRfMSIsIm0iLCJzbGljZV9yaWdodF8xIiwic2xpY2VfbGVmdF8yIiwic2xpY2VfcmlnaHRfMiIsImsiLCJjc3RfQmlnYXJyYXlfQXJyYXkzX29mX2FycmF5X24iLCJhcnJheTBfb2ZfZ2VuYXJyYXkiLCJhcnJheTFfb2ZfZ2VuYXJyYXkiLCJhcnJheTJfb2ZfZ2VuYXJyYXkiLCJhcnJheTNfb2ZfZ2VuYXJyYXkiLCJyZXNoYXBlXzAiLCJyZXNoYXBlXzEiLCJyZXNoYXBlXzIiLCJyZXNoYXBlXzMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQSxJQUFBQyxrQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGFBQUE7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Z0IsTUFBQUMsTUFBQUk7QUFBQUEsSUFDbEIsZ0RBQTRCO0FBQUE7QUFBQSxHQVUzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUQ1WkYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyMzUxNCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJzdGRsaWIuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9yYW5kb20ubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDYW1iaXVtLCBDb2xsZWdlIGRlIEZyYW5jZSBhbmQgSW5yaWEgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAqKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgb3BlbiBCaWdhcnJheVxuXG4gIHR5cGUgdCA9IChpbnQ2NCwgaW50NjRfZWx0LCBjX2xheW91dCkgQXJyYXkxLnRcblxuICBleHRlcm5hbCBuZXh0OiB0IC0+IChpbnQ2NFtAdW5ib3hlZF0pXG4gICAgICA9IFwiY2FtbF9seG1fbmV4dFwiIFwiY2FtbF9seG1fbmV4dF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuICBsZXQgY3JlYXRlICgpIDogdCA9XG4gICAgQXJyYXkxLmNyZWF0ZSBJbnQ2NCBDX2xheW91dCA0XG5cbiAgbGV0IHNldCBzIGkxIGkyIGkzIGk0ID1cbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDAgKEludDY0LmxvZ29yIGkxIDFMKTsgKCogbXVzdCBiZSBvZGQgKilcbiAgICBBcnJheTEudW5zYWZlX3NldCBzIDEgaTI7XG4gICAgQXJyYXkxLnVuc2FmZV9zZXQgcyAyIChpZiBpMyA8PiAwTCB0aGVuIGkzIGVsc2UgMUwpOyAoKiBtdXN0IG5vdCBiZSAwICopXG4gICAgQXJyYXkxLnVuc2FmZV9zZXQgcyAzIChpZiBpNCA8PiAwTCB0aGVuIGk0IGVsc2UgMkwpICgqIG11c3Qgbm90IGJlIDAgKilcblxuICBsZXQgbWsgaTEgaTIgaTMgaTQgPVxuICAgIGxldCBzID0gY3JlYXRlICgpIGluXG4gICAgc2V0IHMgaTEgaTIgaTMgaTQ7IHNcblxuICBsZXQgc2VyaWFsaXphdGlvbl9wcmVmaXggPVxuICAgIFwibHhtMTpcIlxuICAgICgqIFwibHhtXCIgZGVub3RlcyB0aGUgYWxnb3JpdGhtIGN1cnJlbnRseSBpbiB1c2UsIGFuZCAnMScgaXNcbiAgICAgICBhIHZlcnNpb24gbnVtYmVyLiBXZSBzaG91bGQgdXBkYXRlIHRoaXMgcHJlZml4IGlmIHdlIGNoYW5nZVxuICAgICAgIHRoZSBSYW5kb20gYWxnb3JpdGhtIG9yIHRoZSBzZXJpYWxpemF0aW9uIGZvcm1hdCwgc28gdGhhdCB1c2Vyc1xuICAgICAgIGdldCBhIGNsZWFuIGVycm9yIGluc3RlYWQgb2YgYmVsaWV2aW5nIHRoYXQgdGhleSBmYWl0aGZ1bGx5XG4gICAgICAgcmVwcm9kdWNlIHRoZWlyIHByZXZpb3VzIHN0YXRlIGFuZCBpbiBmYWN0IGdldCBhIGRpZmZlcmVudFxuICAgICAgIHN0cmVhbS5cblxuICAgICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBjb25zdHJhaW50IHRvIGtlZXAgdGhlIHNhbWVcbiAgICAgICBcIjxuYW1lPjx2ZXI+OjxkYXRhPlwiIGZvcm1hdCBvciBtZXNzYWdlIHNpemUgaW4gZnV0dXJlIHZlcnNpb25zLFxuICAgICAgIHdlIGNvdWxkIGNoYW5nZSB0aGUgZm9ybWF0IGNvbXBsZXRlbHkgaWYgd2Ugd2FudGVkIGFzIGxvbmdcbiAgICAgICBhcyB0aGVyZSBpcyBubyBjb25mdXNpb24gcG9zc2libGUgd2l0aCB0aGUgcHJldmlvdXMgZm9ybWF0cy4gKilcblxuICBsZXQgc2VyaWFsaXphdGlvbl9wcmVmaXhfbGVuID1cbiAgICBTdHJpbmcubGVuZ3RoIHNlcmlhbGl6YXRpb25fcHJlZml4XG5cbiAgbGV0IHRvX2JpbmFyeV9zdHJpbmcgcyA9XG4gICAgbGV0IHByZWZpeCA9IHNlcmlhbGl6YXRpb25fcHJlZml4IGluXG4gICAgbGV0IHByZWZsZW4gPSBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChwcmVmbGVuICsgNCAqIDgpIGluXG4gICAgQnl0ZXMuYmxpdF9zdHJpbmcgcHJlZml4IDAgYnVmIDAgcHJlZmxlbjtcbiAgICBmb3IgaSA9IDAgdG8gMyBkb1xuICAgICAgQnl0ZXMuc2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIGkgKiA4KSAoQXJyYXkxLmdldCBzIGkpXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuXG4gIGxldCBvZl9iaW5hcnlfc3RyaW5nIGJ1ZiA9XG4gICAgbGV0IHByZWZpeCA9IHNlcmlhbGl6YXRpb25fcHJlZml4IGluXG4gICAgbGV0IHByZWZsZW4gPSBzZXJpYWxpemF0aW9uX3ByZWZpeF9sZW4gaW5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIGJ1ZiA8PiBwcmVmbGVuICsgNCAqIDhcbiAgICAgICB8fCBub3QgKFN0cmluZy5zdGFydHNfd2l0aCB+cHJlZml4IGJ1ZilcbiAgICB0aGVuXG4gICAgICBmYWlsd2l0aFxuICAgICAgICAoXCJSYW5kb20uU3RhdGUub2ZfYmluYXJ5X3N0cmluZzogZXhwZWN0ZWQgYSBmb3JtYXQgXFxcbiAgICAgICAgICBjb21wYXRpYmxlIHdpdGggT0NhbWwgXCIgXiBTeXMub2NhbWxfdmVyc2lvbik7XG4gICAgbGV0IGkxID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAwICogOCkgaW5cbiAgICBsZXQgaTIgPSBTdHJpbmcuZ2V0X2ludDY0X2xlIGJ1ZiAocHJlZmxlbiArIDEgKiA4KSBpblxuICAgIGxldCBpMyA9IFN0cmluZy5nZXRfaW50NjRfbGUgYnVmIChwcmVmbGVuICsgMiAqIDgpIGluXG4gICAgbGV0IGk0ID0gU3RyaW5nLmdldF9pbnQ2NF9sZSBidWYgKHByZWZsZW4gKyAzICogOCkgaW5cbiAgICBtayBpMSBpMiBpMyBpNFxuXG4gIGxldCBhc3NpZ24gKGRzdDogdCkgKHNyYzogdCkgPVxuICAgIEFycmF5MS5ibGl0IHNyYyBkc3RcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcycgPSBjcmVhdGUoKSBpbiBhc3NpZ24gcycgczsgcydcblxuICAoKiBUaGUgc2VlZCBpcyBhbiBhcnJheSBvZiBpbnRlZ2Vycy4gIEl0IGNhbiBiZSBqdXN0IG9uZSBpbnRlZ2VyLFxuICAgICBidXQgaXQgY2FuIGFsc28gYmUgMTIgb3IgbW9yZSBieXRlcy4gIFRvIGhpZGUgdGhlIGRpZmZlcmVuY2UsXG4gICAgIHdlIHNlcmlhbGl6ZSB0aGUgYXJyYXkgYXMgYSBzZXF1ZW5jZSBvZiBieXRlcywgdGhlbiBoYXNoIHRoZVxuICAgICBzZXF1ZW5jZSB3aXRoIE1ENSAoRGlnZXN0LmJ5dGVzKS4gIE1ENSBnaXZlcyBvbmx5IDEyOCBiaXRzIHdoaWxlXG4gICAgIHdlIG5lZWQgMjU2IGJpdHMsIHNvIHdlIGhhc2ggdHdpY2Ugd2l0aCBkaWZmZXJlbnQgc3VmZml4ZXMuICopXG4gIGxldCByZWluaXQgcyBzZWVkID1cbiAgICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgbGV0IGIgPSBCeXRlcy5jcmVhdGUgKG4gKiA4ICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gbi0xIGRvXG4gICAgICBCeXRlcy5zZXRfaW50NjRfbGUgYiAoaSAqIDgpIChJbnQ2NC5vZl9pbnQgc2VlZC4oaSkpXG4gICAgZG9uZTtcbiAgICBCeXRlcy5zZXQgYiAobiAqIDgpICdcXHgwMSc7XG4gICAgbGV0IGQxID0gRGlnZXN0LmJ5dGVzIGIgaW5cbiAgICBCeXRlcy5zZXQgYiAobiAqIDgpICdcXHgwMic7XG4gICAgbGV0IGQyID0gRGlnZXN0LmJ5dGVzIGIgaW5cbiAgICBzZXQgcyAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMSAwKVxuICAgICAgICAgIChTdHJpbmcuZ2V0X2ludDY0X2xlIGQxIDgpXG4gICAgICAgICAgKFN0cmluZy5nZXRfaW50NjRfbGUgZDIgMClcbiAgICAgICAgICAoU3RyaW5nLmdldF9pbnQ2NF9sZSBkMiA4KVxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCBzID0gY3JlYXRlKCkgaW4gcmVpbml0IHMgc2VlZDsgc1xuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9XG4gICAgbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IG1pbl9pbnQzMSA9IC0weDQwMDBfMDAwMFxuICAgICAgKCogPSAtMnteMzB9LCB3aGljaCBpcyBbbWluX2ludF0gZm9yIDMxLWJpdCBpbnRlZ2VycyAqKVxuICBsZXQgbWF4X2ludDMxID0gMHgzRkZGX0ZGRkZcbiAgICAgICgqID0gIDJ7XjMwfS0xLCB3aGljaCBpcyBbbWF4X2ludF0gZm9yIDMxLWJpdCBpbnRlZ2VycyAqKVxuICAoKiBhdm9pZCBpbnRlZ2VyIGxpdGVyYWxzIGZvciB0aGVzZSwgMzItYml0IE9DYW1sIHdvdWxkIHJlamVjdCB0aGVtOiAqKVxuICBsZXQgbWluX2ludDMyID0gLSgxIGxzbCAzMSlcbiAgICAgICgqID0gLTB4ODAwMF8wMDAwIG9uIHBsYXRmb3JtcyB3aGVyZSBbU3lzLmludF9zaXplID49IDMyXSAqKVxuICBsZXQgbWF4X2ludDMyID0gKDEgbHNsIDMxKSAtIDFcbiAgICAgICgqID0gIDB4N0ZGRl9GRkZGIG9uIHBsYXRmb3JtcyB3aGVyZSBbU3lzLmludF9zaXplID49IDMyXSAqKVxuXG4gICgqIFJldHVybiAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDJeMzAgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgSW50NjQudG9faW50IChuZXh0IHMpIGxhbmQgbWF4X2ludDMxXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtuXSAoZXhjbHVkZWQpLlxuICAgICBbYm91bmRdIG1heSBiZSBhbnkgcG9zaXRpdmUgW2ludF0uICBbbWFza10gbXVzdCBiZSBvZiB0aGUgZm9ybSBbMnteaX0tMV1cbiAgICAgYW5kIGdyZWF0ZXIgb3IgZXF1YWwgdG8gW25dLiAgTGFyZ2VyIHZhbHVlcyBvZiBbbWFza10gbWFrZSB0aGUgZnVuY3Rpb25cbiAgICAgcnVuIGZhc3RlciAoZmV3ZXIgc2FtcGxlcyBhcmUgcmVqZWN0ZWQpLiAgU21hbGxlciB2YWx1ZXMgb2YgW21hc2tdXG4gICAgIGFyZSB1c2FibGUgb24gYSB3aWRlciByYW5nZSBvZiBPQ2FtbCBpbXBsZW1lbnRhdGlvbnMuICAqKVxuICBsZXQgcmVjIGludF9hdXggcyBuIG1hc2sgPVxuICAgICgqIFdlIHN0YXJ0IGJ5IGRyYXdpbmcgYSBub24tbmVnYXRpdmUgaW50ZWdlciBpbiB0aGUgWyBbMCwgbWFza10gXSByYW5nZSAqKVxuICAgIGxldCByID0gSW50NjQudG9faW50IChuZXh0IHMpIGxhbmQgbWFzayBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgICgqIEZvciB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcmVzdWx0IGJldHdlZW4gMCBpbmNsdWRlZCBhbmQgW25dXG4gICAgICogZXhjbHVkZWQsIHRoZSByYW5kb20gbnVtYmVyIFtyXSBtdXN0IGhhdmUgYmVlbiBkcmF3biB1bmlmb3JtbHkgaW5cbiAgICAgKiBhbiBpbnRlcnZhbCB3aG9zZSBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiBbbl0uIFRvIGFjaGlldmUgdGhpcyxcbiAgICAgKiB3ZSB1c2UgcmVqZWN0aW9uIHNhbXBsaW5nIG9uIHRoZSBncmVhdGVzdCBpbnRlcnZhbCBbIFswLCBrKm4tMV0gXVxuICAgICAqIHRoYXQgZml0cyBpbiBbIFswLCBtYXNrXSBdLiAgVGhhdCBpcywgd2UgcmVqZWN0IHRoZVxuICAgICAqIHNhbXBsZSBpZiBpdCBmYWxscyBvdXRzaWRlIG9mIHRoaXMgaW50ZXJ2YWwsIGFuZCBkcmF3IGFnYWluLlxuICAgICAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBiZWxvdyBkb2VzLCB3aGlsZSBjYXJlZnVseSBhdm9pZGluZ1xuICAgICAqIG92ZXJmbG93cyBhbmQgc3BhcmluZyBhIGRpdmlzaW9uIFttYXNrIC8gbl0uICopXG4gICAgaWYgciAtIHYgPiBtYXNrIC0gbiArIDEgdGhlbiBpbnRfYXV4IHMgbiBtYXNrIGVsc2UgdlxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gMCAoaW5jbHVkZWQpIGFuZCBbYm91bmRdIChleGNsdWRlZCkuXG4gICAgIFRoZSBib3VuZCBtdXN0IGZpdCBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLlxuICAgICBUaGlzIGZ1bmN0aW9uIHlpZWxkcyB0aGUgc2FtZSBvdXRwdXQgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZWdlciBzaXplLiAqKVxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gbWF4X2ludDMxIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRfYXV4IHMgYm91bmQgbWF4X2ludDMxXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdWRlZCkgYW5kIFtib3VuZF0gKGV4Y2x1ZGVkKS5cbiAgICAgW2JvdW5kXSBtYXkgYmUgYW55IHBvc2l0aXZlIFtpbnRdLiAqKVxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgKCogV2hlbiB0aGUgYm91bmQgZml0cyBpbiAzMS1iaXQgc2lnbmVkIGludGVnZXJzLCB3ZSB1c2UgdGhlIHNhbWUgbWFza1xuICAgICAgIGFzIGluIGZ1bmN0aW9uIFtpbnRdIHNvIGFzIHRvIHlpZWxkIHRoZSBzYW1lIG91dHB1dCBvbiBhbGwgcGxhdGZvcm1zXG4gICAgICAgc3VwcG9ydGVkIGJ5IE9DYW1sICgzMi1iaXQgT0NhbWwsIDY0LWJpdCBPQ2FtbCwgYW5kIEphdmFTY3JpcHQpLlxuICAgICAgIFdoZW4gdGhlIGJvdW5kIGZpdHMgaW4gMzItYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIFttYXhfaW50MzJdXG4gICAgICAgYXMgdGhlIG1hc2sgc28gYXMgdG8geWllbGQgdGhlIHNhbWUgb3V0cHV0IG9uIGFsbCBwbGF0Zm9ybXMgd2hlcmVcbiAgICAgICBbU3lzLmludF9zaXplID49IDMyXSAoaS5lLiBKYXZhU2NyaXB0IGFuZCA2NC1iaXQgT0NhbWwpLiAqKVxuICAgIGVsc2VcbiAgICAgIGludF9hdXggcyBib3VuZFxuICAgICAgICAoaWYgYm91bmQgPD0gbWF4X2ludDMxIHRoZW4gbWF4X2ludDMxXG4gICAgICAgICBlbHNlIGlmIGJvdW5kIDw9IG1heF9pbnQzMiB0aGVuIG1heF9pbnQzMlxuICAgICAgICAgZWxzZSBtYXhfaW50KVxuXG4gICgqIFJldHVybiBhbiBpbnRlZ2VyIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgVGhlIFtuYml0c10gcGFyYW1ldGVyIGlzIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHNpZ25lZCBpbnRlZ2Vyc1xuICAgICB3ZSBkcmF3IGZyb20gW3NdLlxuICAgICBXZSBtdXN0IGhhdmUgWy0ye15uYml0cyAtIDF9IDw9IG1pbiA8PSBtYXggPCAye15uYml0cyAtIDF9XS5cbiAgICAgTW9yZW92ZXIsIGZvciB0aGUgaXRlcmF0aW9uIHRvIGNvbnZlcmdlIHF1aWNrbHksIHRoZSBpbnRlcnZhbFxuICAgICBbW21pbiwgbWF4XV0gc2hvdWxkIGhhdmUgd2lkdGggYXQgbGVhc3QgWzJ7Xm5iaXRzIC0gMX1dLlxuICAgICBBcyB0aGUgd2lkdGggYXBwcm9hY2hlcyB0aGlzIGxvd2VyIGxpbWl0LCB0aGUgYXZlcmFnZSBudW1iZXIgb2ZcbiAgICAgZHJhd3MgYXBwcm9hY2hlcyAyLCB3aXRoIGEgcXVpdGUgaGlnaCBzdGFuZGFyZCBkZXZpYXRpb24gKDIgKyBlcHNpbG9uKS4gKilcbiAgbGV0IHJlYyBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzID1cbiAgICBsZXQgZHJvcCA9IFN5cy5pbnRfc2l6ZSAtIG5iaXRzIGluXG4gICAgKCogVGhlIGJpdHNoaWZ0cyByZXBsaWNhdGUgdGhlIFtuYml0c10tdGggYml0IChzaWduIGJpdCkgdG8gaGlnaGVyIGJpdHM6ICopXG4gICAgbGV0IHIgPSAoKEludDY0LnRvX2ludCAobmV4dCBzKSkgbHNsIGRyb3ApIGFzciBkcm9wIGluXG4gICAgaWYgciA8IG1pbiB8fCByID4gbWF4IHRoZW4gaW50X2luX2xhcmdlX3JhbmdlIHMgfm1pbiB+bWF4IH5uYml0cyBlbHNlIHJcblxuICAoKiBSZXR1cm4gYW4gaW50ZWdlciBiZXR3ZWVuIFttaW5dIChpbmNsdWRlZCkgYW5kIFttYXhdIChpbmNsdWRlZCkuXG4gICAgIFttYXNrXSBpcyBhcyBkZXNjcmliZWQgZm9yIFtpbnRfYXV4XS5cbiAgICAgW25iaXRzXSBpcyBhcyBkZXNjcmliZWQgZm9yIFtpbnRfaW5fbGFyZ2VfcmFuZ2VdLiAqKVxuICBsZXQgaW50X2luX3JhbmdlX2F1eCBzIH5taW4gfm1heCB+bWFzayB+bmJpdHMgPVxuICAgIGxldCBzcGFuID0gbWF4IC0gbWluICsgMSBpblxuICAgIGlmIHNwYW4gPD0gbWFzayAoKiBbc3Bhbl0gaXMgc21hbGwgZW5vdWdoICopXG4gICAgJiYgc3BhbiA+IDAgICAgICgqIG5vIG92ZXJmbG93IG9jY3VycmVkIHdoZW4gY29tcHV0aW5nIFtzcGFuXSAqKVxuICAgIHRoZW5cbiAgICAgICgqIEp1c3QgZHJhdyBhIG51bWJlciBpbiBbWzAsIHNwYW4pXSBhbmQgc2hpZnQgaXQgYnkgW21pbl0uICopXG4gICAgICBtaW4gKyBpbnRfYXV4IHMgc3BhbiBtYXNrXG4gICAgZWxzZVxuICAgICAgKCogU3BhbiB0b28gbGFyZ2UsIHVzZSB0aGUgYWx0ZXJuYXRpdmUgZHJhd2luZyBtZXRob2QuICopXG4gICAgICBpbnRfaW5fbGFyZ2VfcmFuZ2UgcyB+bWluIH5tYXggfm5iaXRzXG5cbiAgKCogUmV0dXJuIGFuIGludGVnZXIgYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLlxuICAgICBXZSBtdXN0IGhhdmUgW21pbiA8PSBtYXhdLiAqKVxuICBsZXQgaW50X2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50X2luX3JhbmdlXCI7XG4gICAgKCogV2hlbiBib3RoIGJvdW5kcyBmaXQgaW4gMzEtYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIHBhcmFtZXRlcnNcbiAgICAgICBbbWFza10gYW5kIFtuYml0c10gYXBwcm9wcmlhdGUgZm9yIDMxLWJpdCBpbnRlZ2Vycywgc28gYXMgdG9cbiAgICAgICB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgT0NhbWwuXG4gICAgICAgV2hlbiBib3RoIGJvdW5kcyBmaXQgaW4gMzItYml0IHNpZ25lZCBpbnRlZ2Vycywgd2UgdXNlIHBhcmFtZXRlcnNcbiAgICAgICBbbWFza10gYW5kIFtuYml0c10gYXBwcm9wcmlhdGUgZm9yIDMyLWJpdCBpbnRlZ2Vycywgc28gYXMgdG9cbiAgICAgICB5aWVsZCB0aGUgc2FtZSBvdXRwdXQgb24gSmF2YVNjcmlwdCBhbmQgb24gNjQtYml0IE9DYW1sLiAqKVxuICAgIGlmIG1pbiA+PSBtaW5faW50MzEgJiYgbWF4IDw9IG1heF9pbnQzMSB0aGVuXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQzMSB+bmJpdHM6MzFcbiAgICBlbHNlIGlmIG1pbiA+PSBtaW5faW50MzIgJiYgbWF4IDw9IG1heF9pbnQzMiB0aGVuXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQzMiB+bmJpdHM6MzJcbiAgICBlbHNlXG4gICAgICBpbnRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IH5tYXNrOm1heF9pbnQgfm5iaXRzOlN5cy5pbnRfc2l6ZVxuXG4gICgqIFJldHVybiAzMiByYW5kb20gYml0cyBhcyBhbiBbaW50MzJdICopXG4gIGxldCBiaXRzMzIgcyA9XG4gICAgSW50NjQudG9faW50MzIgKG5leHQgcylcblxuICAoKiBSZXR1cm4gYW4gW2ludDMyXSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IHIgPSBJbnQzMi5zaGlmdF9yaWdodF9sb2dpY2FsIChiaXRzMzIgcykgMSBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9hdXhdLiAqKVxuICAgIGlmIEludDMyLihzdWIgciB2ID4gYWRkIChzdWIgbWF4X2ludCBuKSAxbClcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG4gICgqIFJldHVybiBhbiBbaW50MzJdIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgV2UgbXVzdCBoYXZlIFttaW4gPD0gbWF4XS4gKilcbiAgbGV0IHJlYyBpbnQzMl9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggPVxuICAgIGxldCByID0gSW50NjQudG9faW50MzIgKG5leHQgcykgaW5cbiAgICBpZiByIDwgbWluIHx8IHIgPiBtYXggdGhlbiBpbnQzMl9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggZWxzZSByXG5cbiAgbGV0IGludDMyX2luX3JhbmdlIHMgfm1pbiB+bWF4ID1cbiAgICBpZiBtaW4gPiBtYXggdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJfaW5fcmFuZ2VcIlxuICAgIGVsc2VcbiAgICAgIGxldCBzcGFuID0gSW50MzIuc3VjYyAoSW50MzIuc3ViIG1heCBtaW4pIGluXG4gICAgICAoKiBFeHBsYW5hdGlvbiBvZiB0aGlzIHRlc3Q6IHNlZSBjb21tZW50IGluIFtpbnRfaW5fcmFuZ2VfYXV4XS4gKilcbiAgICAgIGlmIHNwYW4gPD0gSW50MzIuemVybyB0aGVuXG4gICAgICAgIGludDMyX2luX3JhbmdlX2F1eCBzIH5taW4gfm1heFxuICAgICAgZWxzZVxuICAgICAgICBJbnQzMi5hZGQgbWluIChpbnQzMmF1eCBzIHNwYW4pXG5cbiAgKCogUmV0dXJuIDY0IHJhbmRvbSBiaXRzIGFzIGFuIFtpbnQ2NF0gKilcbiAgbGV0IGJpdHM2NCBzID1cbiAgICBuZXh0IHNcblxuICAoKiBSZXR1cm4gYW4gW2ludDY0XSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIChiaXRzNjQgcykgMSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgICgqIEV4cGxhbmF0aW9uIG9mIHRoaXMgdGVzdDogc2VlIGNvbW1lbnQgaW4gW2ludF9hdXhdLiAqKVxuICAgIGlmIEludDY0LihzdWIgciB2ID4gYWRkIChzdWIgbWF4X2ludCBuKSAxTClcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG4gICgqIFJldHVybiBhbiBbaW50NjRdIGJldHdlZW4gW21pbl0gKGluY2x1ZGVkKSBhbmQgW21heF0gKGluY2x1ZGVkKS5cbiAgICAgV2UgbXVzdCBoYXZlIFttaW4gPD0gbWF4XS4gKilcbiAgbGV0IHJlYyBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXggPVxuICAgIGxldCByID0gbmV4dCBzIGluXG4gICAgaWYgciA8IG1pbiB8fCByID4gbWF4IHRoZW4gaW50NjRfaW5fcmFuZ2VfYXV4IHMgfm1pbiB+bWF4IGVsc2UgclxuXG4gIGxldCBpbnQ2NF9pbl9yYW5nZSBzIH5taW4gfm1heCA9XG4gICAgaWYgbWluID4gbWF4IHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0X2luX3JhbmdlXCJcbiAgICBlbHNlXG4gICAgICBsZXQgc3BhbiA9IEludDY0LnN1Y2MgKEludDY0LnN1YiBtYXggbWluKSBpblxuICAgICAgKCogRXhwbGFuYXRpb24gb2YgdGhpcyB0ZXN0OiBzZWUgY29tbWVudCBpbiBbaW50X2luX3JhbmdlX2F1eF0uICopXG4gICAgICBpZiBzcGFuIDw9IEludDY0Lnplcm8gdGhlblxuICAgICAgICBpbnQ2NF9pbl9yYW5nZV9hdXggcyB+bWluIH5tYXhcbiAgICAgIGVsc2VcbiAgICAgICAgSW50NjQuYWRkIG1pbiAoaW50NjRhdXggcyBzcGFuKVxuXG4gICgqIFJldHVybiAzMiBvciA2NCByYW5kb20gYml0cyBhcyBhIFtuYXRpdmVpbnRdICopXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuICAoKiBSZXR1cm4gYSBbbmF0aXZlaW50XSBiZXR3ZWVuIDAgKGluY2x1ZGVkKSBhbmQgW2JvdW5kXSAoZXhjbHVkZWQpLiAqKVxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cbiAgKCogUmV0dXJuIGEgW25hdGl2ZWludF0gYmV0d2VlbiBbbWluXSAoaW5jbHVkZWQpIGFuZCBbbWF4XSAoaW5jbHVkZWQpLiAqKVxuICBsZXQgbmF0aXZlaW50X2luX3JhbmdlID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyB+bWluIH5tYXggLT5cbiAgICAgIE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzJfaW5fcmFuZ2Ugc1xuICAgICAgICB+bWluOihOYXRpdmVpbnQudG9faW50MzIgbWluKSB+bWF4OihOYXRpdmVpbnQudG9faW50MzIgbWF4KSlcbiAgICBlbHNlIGZ1biBzIH5taW4gfm1heCAtPlxuICAgICAgSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NF9pbl9yYW5nZSBzXG4gICAgICAgIH5taW46KEludDY0Lm9mX25hdGl2ZWludCBtaW4pIH5tYXg6KEludDY0Lm9mX25hdGl2ZWludCBtYXgpKVxuXG4gICgqIFJldHVybiBhIGZsb2F0IDAgPCB4IDwgMSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYW1vbmcgdGhlXG4gICAgIG11bHRpcGxlcyBvZiAyXi01MyAqKVxuICBsZXQgcmVjIHJhd2Zsb2F0IHMgPVxuICAgIGxldCBiID0gbmV4dCBzIGluXG4gICAgbGV0IG4gPSBJbnQ2NC5zaGlmdF9yaWdodF9sb2dpY2FsIGIgMTEgaW5cbiAgICBpZiBuIDw+IDBMIHRoZW4gSW50NjQudG9fZmxvYXQgbiAqLiAweDEucC01MyBlbHNlIHJhd2Zsb2F0IHNcblxuICAoKiBSZXR1cm4gYSBmbG9hdCBiZXR3ZWVuIDAgYW5kIFtib3VuZF0gKilcbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgKCogUmV0dXJuIGEgcmFuZG9tIEJvb2xlYW4gKilcbiAgbGV0IGJvb2wgcyA9IG5leHQgcyA8IDBMXG5cbiAgKCogU3BsaXQgYSBuZXcgUFJORyBvZmYgdGhlIGdpdmVuIFBSTkcgKilcbiAgbGV0IHNwbGl0IHMgPVxuICAgIGxldCBpMSA9IGJpdHM2NCBzIGluIGxldCBpMiA9IGJpdHM2NCBzIGluXG4gICAgbGV0IGkzID0gYml0czY0IHMgaW4gbGV0IGk0ID0gYml0czY0IHMgaW5cbiAgICBtayBpMSBpMiBpMyBpNFxuZW5kXG5cbmxldCBta19kZWZhdWx0ICgpID1cbiAgKCogVGhpcyBpcyB0aGUgc3RhdGUgb2J0YWluZWQgd2l0aCBbU3RhdGUubWFrZSBbfCAzMTQxNTkyNjUgfF1dLiAqKVxuICBTdGF0ZS5tayAoLTYxOTY4NzQyODk1Njc3MDUwOTdMKVxuICAgICAgICAgICA1ODY1NzMyNDk4MzM3MTMxODlMXG4gICAgICAgICAgICgtODU5MTI2ODgwMzg2NTA0MzQwN0wpXG4gICAgICAgICAgIDYzODg2MTM1OTU4NDk3NzIwNDRMXG5cbmxldCByYW5kb21fa2V5ID1cbiAgRG9tYWluLkRMUy5uZXdfa2V5IH5zcGxpdF9mcm9tX3BhcmVudDpTdGF0ZS5zcGxpdCBta19kZWZhdWx0XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBpbnRfaW5fcmFuZ2Ugfm1pbiB+bWF4ID1cbiAgU3RhdGUuaW50X2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBib3VuZFxubGV0IGludDMyX2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLmludDMyX2luX3JhbmdlIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSB+bWluIH5tYXhcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIGJvdW5kXG5sZXQgbmF0aXZlaW50X2luX3JhbmdlIH5taW4gfm1heCA9XG4gIFN0YXRlLm5hdGl2ZWludF9pbl9yYW5nZSAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgfm1pbiB+bWF4XG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgYm91bmRcbmxldCBpbnQ2NF9pbl9yYW5nZSB+bWluIH5tYXggPVxuICBTdGF0ZS5pbnQ2NF9pbl9yYW5nZSAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgfm1pbiB+bWF4XG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSkgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCAoRG9tYWluLkRMUy5nZXQgcmFuZG9tX2tleSlcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpXG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IG5hdGl2ZWJpdHMgKCkgPSBTdGF0ZS5uYXRpdmViaXRzIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5yZWluaXQgKERvbWFpbi5ETFMuZ2V0IHJhbmRvbV9rZXkpIHNlZWRcbmxldCBpbml0IHNlZWQgPSBmdWxsX2luaXQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogU3BsaXR0aW5nICopXG5cbmxldCBzcGxpdCAoKSA9IFN0YXRlLnNwbGl0IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IChEb21haW4uRExTLmdldCByYW5kb21fa2V5KVxubGV0IHNldF9zdGF0ZSBzID0gU3RhdGUuYXNzaWduIChEb21haW4uRExTLmdldCByYW5kb21fa2V5KSBzXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfYmFfYmxpdCIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9ncmVhdGVydGhhbiIsImNhbWxfaW50NjRfYWRkIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9seG1fbmV4dCIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDMiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9TeXMiLCJTdGRsaWJfSW50MzIiLCJTdGRsaWJfSW50NjQiLCJTdGRsaWIiLCJTdGRsaWJfQnl0ZXMiLCJTdGRsaWJfRGlnZXN0IiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9CaWdhcnJheSIsIlN0ZGxpYl9OYXRpdmVpbnQiLCJjcmVhdGUiLCJwYXJhbSIsInNldCIsInMiLCJpMSIsImkyIiwiaTMiLCJpNCIsIm1rIiwic2VyaWFsaXphdGlvbl9wcmVmaXgiLCJ0b19iaW5hcnlfc3RyaW5nIiwiYnVmIiwiaSIsIm9mX2JpbmFyeV9zdHJpbmciLCJjb3B5Iiwic3JjIiwiZHN0IiwicmVpbml0Iiwic2VlZCIsIm4iLCJiIiwiZDEiLCJkMiIsIm1ha2UiLCJtYWtlX3NlbGZfaW5pdCIsImJpdHMiLCJpbnRfYXV4IiwibWFzayIsInIiLCJ2IiwibWF4X2ludDMxIiwiaW50IiwiYm91bmQiLCJtYXhfaW50MzIiLCJmdWxsX2ludCIsImludF9pbl9yYW5nZV9hdXgiLCJtaW4iLCJtYXgiLCJuYml0cyIsInNwYW4iLCJkcm9wIiwiaW50X2luX3JhbmdlIiwiYml0czMyIiwiaW50MzJhdXgiLCJpbnQzMiIsImludDMyX2luX3JhbmdlIiwiaW50NjRhdXgiLCJpbnQ2NCIsImludDY0X2luX3JhbmdlIiwibmF0aXZlYml0cyIsIm5hdGl2ZWludCIsIm5hdGl2ZWludF9pbl9yYW5nZSIsImZsb2F0IiwiYm9vbCIsInNwbGl0IiwibWtfZGVmYXVsdCIsInJhbmRvbV9rZXkiLCJzY2FsZSIsImJpdHM2NCIsImZ1bGxfaW5pdCIsImluaXQiLCJzZWxmX2luaXQiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxvQkFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw2QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsbUJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsT0FBQUMsT0M4Qkksa0RB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURwVjlEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjM5MDgsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvb2NhbWwvaGFzaHRibC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiB0aGUgbG9hZCBmYWN0b3IgYmVjb21lcyB0b28gaGlnaC4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gQXRvbWljLm1ha2UgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSBBdG9taWMuc2V0IHJhbmRvbWl6ZWQgdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSBBdG9taWMuZ2V0IHJhbmRvbWl6ZWRcblxubGV0IHBybmdfa2V5ID0gRG9tYWluLkRMUy5uZXdfa2V5IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdFxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gQXRvbWljLmdldCByYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoRG9tYWluLkRMUy5nZXQgcHJuZ19rZXkpIGVsc2UgMFxuICBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc2VlZGVkX2hhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5zZWVkZWRfaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBrZXkgbmV4dFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBtZW1faW5fYnVja2V0IGtleSBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBzZWVkZWRfaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IHJlYyBtZW1faW5fYnVja2V0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQga2V5IG5leHRcblxubGV0IG1lbSBoIGtleSA9XG4gIG1lbV9pbl9idWNrZXQga2V5IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gQXRvbWljLmdldCByYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKERvbWFpbi5ETFMuZ2V0IHBybmdfa2V5KVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfY29tcGFyZSIsImNhbWxfaGFzaCIsImNhbWxfbWFrZV92ZWN0IiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9TeXMiLCJTdGRsaWIiLCJTdGRsaWJfQXRvbWljIiwiU3RkbGliX0RvbWFpbiIsIlN0ZGxpYl9SYW5kb20iLCJTdGRsaWJfU2VxIiwiU3RkbGliX0ludCIsIlN0ZGxpYl9BcnJheSIsIlN0ZGxpYl9TdHJpbmciLCJvbmdvaW5nX3RyYXZlcnNhbCIsImgiLCJmbGlwX29uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwiZXhuIiwicmFuZG9taXplZF9kZWZhdWx0IiwicmFuZG9taXplZCIsInJhbmRvbWl6ZSIsInBhcmFtIiwiaXNfcmFuZG9taXplZCIsInBybmdfa2V5IiwicG93ZXJfMl9hYm92ZSIsIngiLCJuIiwiY3JlYXRlIiwib3B0IiwiaW5pdGlhbF9zaXplIiwicmFuZG9tIiwicyIsInNlZWQiLCJjbGVhciIsInJlc2V0IiwibGVuIiwiY29weV9idWNrZXRsaXN0Iiwia2V5IiwiZGF0YSIsIm5leHQiLCJwcmVjIiwiY29weSIsImxlbmd0aCIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpIiwiY2VsbCIsIm5pZHgiLCJtYXRjaCIsInJlc2l6ZSIsIm9zaXplIiwiaXRlciIsIm9sZF90cmF2IiwiZCIsImZpbHRlcl9tYXBfaW5wbGFjZSIsInNsb3QiLCJmb2xkIiwiaW5pdCIsImFjY3UiLCJiIiwiYnVja2V0X2xlbmd0aCIsInN0YXRzIiwibWJsIiwibSIsImhpc3RvIiwibCIsInRvX3NlcSIsInRibCIsInRibF9kYXRhIiwiYXV4IiwiYnVjayIsInRvX3NlcV9rZXlzIiwidG9fc2VxX3ZhbHVlcyIsIk1ha2VTZWVkZWQiLCJIIiwia2V5X2luZGV4IiwiYWRkIiwiYnVja2V0IiwicmVtb3ZlIiwiayIsImZpbmQiLCJrMSIsImQxIiwibmV4dDEiLCJrMiIsImQyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX29wdCIsImZpbmRfYWxsIiwiYmxvY2siLCJkc3QiLCJvZmZzZXQiLCJyZXBsYWNlIiwibWVtIiwiYWRkX3NlcSIsInYiLCJyZXBsYWNlX3NlcSIsIm9mX3NlcSIsIk1ha2UiLCJlcXVhbCIsInNlZWRlZF9oYXNoIiwiaW5jbHVkZSIsInN6IiwiaGFzaCIsImhhc2hfcGFyYW0iLCJuMSIsIm4yIiwicmVidWlsZCJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFD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QUFBO0FBQUEsU0FFUDtBQUFBLEtBQUFsQixNQUVTO0FBQUEsSUFJVDtBQUFBLGtCQUFtQjtBQUFBLElBQW1DO0FBQUEsR0FDcEQ7QUFBQSxHQTlqQnlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEM0Q3RCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjI0NzIyLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6InN0ZGxpYi5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3Jvb3QvLm9wYW0vNS4yLjAvbGliL29jYW1sL2NhbGxiYWNrLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJTdGRsaWJfT2JqIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwibmFtZSIsImV4biIsInNsb3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsNEJBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsWUFBQUMsbUJBQUFDLE1BQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUN5QmdCO0FBQUEsS0FBQUMsT0FBQTtBQUFBLElBQ2QsNENBQThCO0FBQUE7QUFBQSxHRDFCaEMiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNDc0NSwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfdHlwZXMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogQ29yZSB0eXBlcyBmb3IgdGhlIFNYIGxhbmd1YWdlLlxuXG4gICAgVGhlIFt2YWx1ZV0gc3VtIHR5cGUgcmVwcmVzZW50cyBldmVyeSBwb3NzaWJsZSBTWCBydW50aW1lIHZhbHVlLlxuICAgIE9DYW1sJ3MgYWxnZWJyYWljIHR5cGVzIG1ha2UgdGhlIENFSyBtYWNoaW5lJ3MgZnJhbWUgZGlzcGF0Y2ggYVxuICAgIHBhdHRlcm4gbWF0Y2gg4oCUIGV4YWN0bHkgd2hhdCB0aGUgc3BlYyBkZXNjcmliZXMuICopXG5cbigqKiB7MSBTeW1ib2wgaW50ZXJuaW5nfSAqKVxuXG4oKiogTWFwIHN5bWJvbCBuYW1lcyB0byBzbWFsbCBpbnRlZ2VycyBmb3IgTygxKSBlbnYgbG9va3Vwcy5cbiAgICBUaGUgaW50ZXJuIHRhYmxlIGlzIHBvcHVsYXRlZCBvbmNlIHBlciB1bmlxdWUgc3ltYm9sIG5hbWU7XG4gICAgYWxsIHN1YnNlcXVlbnQgZW52IG9wZXJhdGlvbnMgdXNlIHRoZSBpbnRlZ2VyIGtleS4gKilcblxubGV0IHN5bV90b19pZCA6IChzdHJpbmcsIGludCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNTEyXG5sZXQgaWRfdG9fc3ltIDogKGludCwgc3RyaW5nKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA1MTJcbmxldCBzeW1fbmV4dCAgPSByZWYgMFxuXG5sZXQgaW50ZXJuIHMgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN5bV90b19pZCBzIHdpdGhcbiAgfCBTb21lIGlkIC0+IGlkXG4gIHwgTm9uZSAtPlxuICAgIGxldCBpZCA9ICFzeW1fbmV4dCBpblxuICAgIGluY3Igc3ltX25leHQ7XG4gICAgSGFzaHRibC5yZXBsYWNlIHN5bV90b19pZCBzIGlkO1xuICAgIEhhc2h0YmwucmVwbGFjZSBpZF90b19zeW0gaWQgcztcbiAgICBpZFxuXG5sZXQgdW5pbnRlcm4gaWQgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGlkX3RvX3N5bSBpZCB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IFwiPHN5bTpcIiBeIHN0cmluZ19vZl9pbnQgaWQgXiBcIj5cIlxuXG5cbigqKiB7MSBFbnZpcm9ubWVudH0gKilcblxuKCoqIExleGljYWwgc2NvcGUgY2hhaW4uICBFYWNoIGZyYW1lIGhvbGRzIGEgbXV0YWJsZSBiaW5kaW5nIHRhYmxlXG4gICAga2V5ZWQgYnkgaW50ZXJuZWQgc3ltYm9sIElEcyBmb3IgZmFzdCBsb29rdXAuICopXG50eXBlIGVudiA9IHtcbiAgYmluZGluZ3MgOiAoaW50LCB2YWx1ZSkgSGFzaHRibC50O1xuICBwYXJlbnQgICA6IGVudiBvcHRpb247XG59XG5cbigqKiB7MSBWYWx1ZXN9ICopXG5cbmFuZCB2YWx1ZSA9XG4gIHwgTmlsXG4gIHwgQm9vbCAgIG9mIGJvb2xcbiAgfCBOdW1iZXIgb2YgZmxvYXRcbiAgfCBTdHJpbmcgb2Ygc3RyaW5nXG4gIHwgU3ltYm9sIG9mIHN0cmluZ1xuICB8IEtleXdvcmQgb2Ygc3RyaW5nXG4gIHwgTGlzdCAgIG9mIHZhbHVlIGxpc3RcbiAgfCBEaWN0ICAgb2YgZGljdFxuICB8IExhbWJkYSBvZiBsYW1iZGFcbiAgfCBDb21wb25lbnQgb2YgY29tcG9uZW50XG4gIHwgSXNsYW5kIG9mIGlzbGFuZFxuICB8IE1hY3JvICBvZiBtYWNyb1xuICB8IFRodW5rICBvZiB2YWx1ZSAqIGVudlxuICB8IENvbnRpbnVhdGlvbiBvZiAodmFsdWUgLT4gdmFsdWUpICogZGljdCBvcHRpb25cbiAgfCBOYXRpdmVGbiBvZiBzdHJpbmcgKiAodmFsdWUgbGlzdCAtPiB2YWx1ZSlcbiAgfCBTaWduYWwgb2Ygc2lnbmFsXG4gIHwgUmF3SFRNTCBvZiBzdHJpbmdcbiAgfCBTcHJlYWQgb2YgKHN0cmluZyAqIHZhbHVlKSBsaXN0XG4gIHwgU3hFeHByIG9mIHN0cmluZyAgKCoqIE9wYXF1ZSBTWCB3aXJlLWZvcm1hdCBzdHJpbmcg4oCUIGFzZXIgb3V0cHV0LiAqKVxuICB8IEVudiBvZiBlbnYgICgqKiBGaXJzdC1jbGFzcyBlbnZpcm9ubWVudCDigJQgdXNlZCBieSBDRUsgbWFjaGluZSBzdGF0ZSBkaWN0cy4gKilcbiAgfCBMaXN0UmVmIG9mIHZhbHVlIGxpc3QgcmVmICAoKiogTXV0YWJsZSBsaXN0IOKAlCBKUy1zdHlsZSBhcnJheSBmb3IgYXBwZW5kISAqKVxuICB8IENla1N0YXRlIG9mIGNla19zdGF0ZSAgKCoqIE9wdGltaXplZCBDRUsgbWFjaGluZSBzdGF0ZSDigJQgYXZvaWRzIERpY3QgYWxsb2NhdGlvbi4gKilcbiAgfCBDZWtGcmFtZSBvZiBjZWtfZnJhbWUgICgqKiBPcHRpbWl6ZWQgQ0VLIGNvbnRpbnVhdGlvbiBmcmFtZS4gKilcbiAgfCBWbUNsb3N1cmUgb2Ygdm1fY2xvc3VyZSAgKCoqIFZNLWNvbXBpbGVkIGNsb3N1cmUg4oCUIGNhbGxhYmxlIHdpdGhpbiB0aGUgVk0gd2l0aG91dCBhbGxvY2F0aW5nIGEgbmV3IFZNLiAqKVxuXG4oKiogQ0VLIG1hY2hpbmUgc3RhdGUg4oCUIHJlY29yZCBpbnN0ZWFkIG9mIERpY3QgZm9yIHBlcmZvcm1hbmNlLlxuICAgIDUgZmllbGRzIMOXIDU1SyBzdGVwcy9zZWMgPSAyNzVLIEhhc2h0YmwgYWxsb2NhdGlvbnMvc2VjIGVsaW1pbmF0ZWQuICopXG5hbmQgY2VrX3N0YXRlID0ge1xuICBjc19jb250cm9sIDogdmFsdWU7XG4gIGNzX2VudiAgICAgOiB2YWx1ZTtcbiAgY3Nfa29udCAgICA6IHZhbHVlO1xuICBjc19waGFzZSAgIDogc3RyaW5nO1xuICBjc192YWx1ZSAgIDogdmFsdWU7XG59XG5cbigqKiBDRUsgY29udGludWF0aW9uIGZyYW1lIOKAlCB0YWdnZWQgcmVjb3JkIGNvdmVyaW5nIGFsbCAyOSBmcmFtZSB0eXBlcy5cbiAgICBGaWVsZHMgYXJlIG5hbWVkIGdlbmVyaWNhbGx5OyBub3QgYWxsIGFyZSB1c2VkIGJ5IGV2ZXJ5IGZyYW1lIHR5cGUuXG4gICAgRWxpbWluYXRlcyB+MTAwSyBIYXNodGJsIGFsbG9jYXRpb25zIHBlciBwYWdlIHJlbmRlci4gKilcbmFuZCBjZWtfZnJhbWUgPSB7XG4gIGNmX3R5cGUgICAgICA6IHN0cmluZzsgICAgICAgICgqIGZyYW1lIHR5cGUgdGFnOiBcImlmXCIsIFwibGV0XCIsIFwiY2FsbFwiLCBldGMuICopXG4gIGNmX2VudiAgICAgICA6IHZhbHVlOyAgICAgICAgICgqIGVudmlyb25tZW50IOKAlCBldmVyeSBmcmFtZSBoYXMgdGhpcyAqKVxuICBjZl9uYW1lICAgICAgOiB2YWx1ZTsgICAgICAgICAoKiBsZXQvZGVmaW5lL3NldC9zY29wZTogYmluZGluZyBuYW1lICopXG4gIGNmX2JvZHkgICAgICA6IHZhbHVlOyAgICAgICAgICgqIHdoZW4vbGV0OiBib2R5IGV4cHIgKilcbiAgY2ZfcmVtYWluaW5nIDogdmFsdWU7ICAgICAgICAgKCogYmVnaW4vY29uZC9tYXAvZXRjOiByZW1haW5pbmcgZXhwcnMgKilcbiAgY2ZfZiAgICAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbC9tYXAvZmlsdGVyL2V0YzogZnVuY3Rpb24gKilcbiAgY2ZfYXJncyAgICAgIDogdmFsdWU7ICAgICAgICAgKCogY2FsbDogcmF3IGFyZ3M7IGFyZzogZXZhbGVkIGFyZ3MgKilcbiAgY2ZfcmVzdWx0cyAgIDogdmFsdWU7ICAgICAgICAgKCogbWFwL2ZpbHRlci9kaWN0OiBhY2N1bXVsYXRlZCByZXN1bHRzICopXG4gIGNmX2V4dHJhICAgICA6IHZhbHVlOyAgICAgICAgICgqIGV4dHJhIGZpZWxkOiBzY2hlbWUsIGluZGV4ZWQsIHZhbHVlLCBwaGFzZSwgZXRjLiAqKVxuICBjZl9leHRyYTIgICAgOiB2YWx1ZTsgICAgICAgICAoKiBzZWNvbmQgZXh0cmE6IGVtaXR0ZWQsIGV0Yy4gKilcbn1cblxuKCoqIE11dGFibGUgc3RyaW5nLWtleWVkIHRhYmxlIChTWCBkaWN0cyBzdXBwb3J0IFtkaWN0LXNldCFdKS4gKilcbmFuZCBkaWN0ID0gKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudFxuXG5hbmQgbGFtYmRhID0ge1xuICBsX3BhcmFtcyAgOiBzdHJpbmcgbGlzdDtcbiAgbF9ib2R5ICAgIDogdmFsdWU7XG4gIGxfY2xvc3VyZSA6IGVudjtcbiAgbXV0YWJsZSBsX25hbWUgOiBzdHJpbmcgb3B0aW9uO1xuICBtdXRhYmxlIGxfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxufVxuXG5hbmQgY29tcG9uZW50ID0ge1xuICBjX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgY19wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgY19oYXNfY2hpbGRyZW4gOiBib29sO1xuICBjX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBjX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgY19hZmZpbml0eSAgICAgOiBzdHJpbmc7ICAoKiogXCJhdXRvXCIgfCBcImNsaWVudFwiIHwgXCJzZXJ2ZXJcIiAqKVxuICBtdXRhYmxlIGNfZmlsZSA6IHN0cmluZyBvcHRpb247ICAoKiogU291cmNlIGZpbGUgcGF0aCAqKVxuICBtdXRhYmxlIGNfY29tcGlsZWQgOiB2bV9jbG9zdXJlIG9wdGlvbjsgICgqKiBMYXp5IEpJVCBjYWNoZSAqKVxufVxuXG5hbmQgaXNsYW5kID0ge1xuICBpX25hbWUgICAgICAgICA6IHN0cmluZztcbiAgaV9wYXJhbXMgICAgICAgOiBzdHJpbmcgbGlzdDtcbiAgaV9oYXNfY2hpbGRyZW4gOiBib29sO1xuICBpX2JvZHkgICAgICAgICA6IHZhbHVlO1xuICBpX2Nsb3N1cmUgICAgICA6IGVudjtcbiAgbXV0YWJsZSBpX2ZpbGUgOiBzdHJpbmcgb3B0aW9uOyAgKCoqIFNvdXJjZSBmaWxlIHBhdGggKilcbn1cblxuYW5kIG1hY3JvID0ge1xuICBtX3BhcmFtcyAgICAgOiBzdHJpbmcgbGlzdDtcbiAgbV9yZXN0X3BhcmFtIDogc3RyaW5nIG9wdGlvbjtcbiAgbV9ib2R5ICAgICAgIDogdmFsdWU7XG4gIG1fY2xvc3VyZSAgICA6IGVudjtcbiAgbV9uYW1lICAgICAgIDogc3RyaW5nIG9wdGlvbjtcbn1cblxuYW5kIHNpZ25hbCA9IHtcbiAgbXV0YWJsZSBzX3ZhbHVlICAgICAgIDogdmFsdWU7XG4gIG11dGFibGUgc19zdWJzY3JpYmVycyA6ICh1bml0IC0+IHVuaXQpIGxpc3Q7XG4gIG11dGFibGUgc19kZXBzICAgICAgICA6IHNpZ25hbCBsaXN0O1xufVxuXG4oKiogezEgQnl0ZWNvZGUgVk0gdHlwZXN9XG5cbiAgICBEZWZpbmVkIGhlcmUgKG5vdCBpbiBzeF92bS5tbCkgYmVjYXVzZSBbdm1fY29kZS5jb25zdGFudHNdIHJlZmVyZW5jZXNcbiAgICBbdmFsdWVdIGFuZCBbbGFtYmRhLmxfY29tcGlsZWRdIHJlZmVyZW5jZXMgW3ZtX2Nsb3N1cmVdIOKAlCBtdXR1YWxcbiAgICByZWN1cnNpb24gcmVxdWlyZXMgYWxsIHR5cGVzIGluIG9uZSBbYW5kXSBjaGFpbi4gKilcblxuKCoqIENvbXBpbGVkIGZ1bmN0aW9uIGJvZHkg4oCUIGJ5dGVjb2RlICsgY29uc3RhbnQgcG9vbC4gKilcbmFuZCB2bV9jb2RlID0ge1xuICB2Y19hcml0eSAgICAgOiBpbnQ7XG4gIHZjX2xvY2FscyAgICA6IGludDtcbiAgdmNfYnl0ZWNvZGUgIDogaW50IGFycmF5O1xuICB2Y19jb25zdGFudHMgOiB2YWx1ZSBhcnJheTtcbn1cblxuKCoqIFVwdmFsdWUgY2VsbCDigJQgc2hhcmVkIG11dGFibGUgcmVmZXJlbmNlIHRvIGEgY2FwdHVyZWQgdmFyaWFibGUuICopXG5hbmQgdm1fdXB2YWx1ZV9jZWxsID0ge1xuICBtdXRhYmxlIHV2X3ZhbHVlIDogdmFsdWU7XG59XG5cbigqKiBDbG9zdXJlIOKAlCBjb21waWxlZCBjb2RlICsgY2FwdHVyZWQgdXB2YWx1ZXMgKyBsaXZlIGVudiByZWZlcmVuY2UuICopXG5hbmQgdm1fY2xvc3VyZSA9IHtcbiAgdm1fY29kZSAgICAgOiB2bV9jb2RlO1xuICB2bV91cHZhbHVlcyA6IHZtX3VwdmFsdWVfY2VsbCBhcnJheTtcbiAgdm1fbmFtZSAgICAgOiBzdHJpbmcgb3B0aW9uO1xuICB2bV9lbnZfcmVmICA6IChzdHJpbmcsIHZhbHVlKSBIYXNodGJsLnQ7XG4gIHZtX2Nsb3N1cmVfZW52IDogZW52IG9wdGlvbjsgICgqKiBPcmlnaW5hbCBjbG9zdXJlIGVudiBmb3IgaW5uZXIgZnVuY3Rpb25zICopXG59XG5cblxuKCoqIHsxIEZvcndhcmQgcmVmIGZvciBjYWxsaW5nIFZNIGNsb3N1cmVzIGZyb20gb3V0c2lkZSB0aGUgVk19ICopXG5cbmxldCBfdm1fY2FsbF9jbG9zdXJlX3JlZiA6ICh2bV9jbG9zdXJlIC0+IHZhbHVlIGxpc3QgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIF8gXyAtPiByYWlzZSAoRmFpbHVyZSBcIlZNIGNhbGxfY2xvc3VyZSBub3QgaW5pdGlhbGl6ZWRcIikpXG5cblxuKCoqIHsxIEVycm9yc30gKilcblxuZXhjZXB0aW9uIEV2YWxfZXJyb3Igb2Ygc3RyaW5nXG5leGNlcHRpb24gUGFyc2VfZXJyb3Igb2Ygc3RyaW5nXG5cblxuKCoqIHsxIEVudmlyb25tZW50IG9wZXJhdGlvbnN9ICopXG5cbmxldCBtYWtlX2VudiAoKSA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gTm9uZSB9XG5cbmxldCBlbnZfZXh0ZW5kIHBhcmVudCA9XG4gIHsgYmluZGluZ3MgPSBIYXNodGJsLmNyZWF0ZSAxNjsgcGFyZW50ID0gU29tZSBwYXJlbnQgfVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgZXZlcnkgZW52X2JpbmQgd2l0aCAoZW52LCBuYW1lLCB2YWx1ZSkuXG4gICBVc2VkIGJ5IGJyb3dzZXIga2VybmVsIHRvIHN5bmMgVk0gZ2xvYmFscyB0YWJsZS4gKilcbmxldCBfZW52X2JpbmRfaG9vayA6IChlbnYgLT4gc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBPcHRpb25hbCBob29rOiBjYWxsZWQgYWZ0ZXIgVk0gR0xPQkFMX1NFVCB3cml0ZXMgdG8gdm0uZ2xvYmFscy5cbiAgIFVzZWQgYnkgYnJvd3NlciBrZXJuZWwgdG8gc3luYyBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LiAqKVxubGV0IF92bV9nbG9iYWxfc2V0X2hvb2sgOiAoc3RyaW5nIC0+IHZhbHVlIC0+IHVuaXQpIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgZW52X2JpbmQgZW52IG5hbWUgdiA9XG4gIEhhc2h0YmwucmVwbGFjZSBlbnYuYmluZGluZ3MgKGludGVybiBuYW1lKSB2O1xuICAobWF0Y2ggIV9lbnZfYmluZF9ob29rIHdpdGggU29tZSBmIC0+IGYgZW52IG5hbWUgdiB8IE5vbmUgLT4gKCkpO1xuICBOaWxcblxuKCogSW50ZXJuYWw6IHNjb3BlLWNoYWluIGxvb2t1cCB3aXRoIHByZS1pbnRlcm5lZCBJRCAqKVxubGV0IHJlYyBlbnZfaGFzX2lkIGVudiBpZCA9XG4gIEhhc2h0YmwubWVtIGVudi5iaW5kaW5ncyBpZCB8fFxuICBtYXRjaCBlbnYucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9oYXNfaWQgcCBpZCB8IE5vbmUgLT4gZmFsc2VcblxubGV0IGVudl9oYXMgZW52IG5hbWUgPSBlbnZfaGFzX2lkIGVudiAoaW50ZXJuIG5hbWUpXG5cbmxldCByZWMgZW52X2dldF9pZCBlbnYgaWQgbmFtZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZW52LmJpbmRpbmdzIGlkIHdpdGhcbiAgfCBTb21lIHYgLT4gdlxuICB8IE5vbmUgLT5cbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfZ2V0X2lkIHAgaWQgbmFtZVxuICAgIHwgTm9uZSAtPlxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5kZWZpbmVkIHN5bWJvbDogXCIgXiBuYW1lKSlcblxubGV0IGVudl9nZXQgZW52IG5hbWUgPSBlbnZfZ2V0X2lkIGVudiAoaW50ZXJuIG5hbWUpIG5hbWVcblxubGV0IHJlYyBlbnZfc2V0X2lkIGVudiBpZCB2ID1cbiAgaWYgSGFzaHRibC5tZW0gZW52LmJpbmRpbmdzIGlkIHRoZW4gYmVnaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7XG4gICAgKG1hdGNoICFfZW52X2JpbmRfaG9vayB3aXRoIFNvbWUgZiAtPiBmIGVudiAodW5pbnRlcm4gaWQpIHYgfCBOb25lIC0+ICgpKTtcbiAgICBOaWxcbiAgZW5kIGVsc2VcbiAgICBtYXRjaCBlbnYucGFyZW50IHdpdGhcbiAgICB8IFNvbWUgcCAtPiBlbnZfc2V0X2lkIHAgaWQgdlxuICAgIHwgTm9uZSAtPiBIYXNodGJsLnJlcGxhY2UgZW52LmJpbmRpbmdzIGlkIHY7IE5pbFxuXG5sZXQgZW52X3NldCBlbnYgbmFtZSB2ID0gZW52X3NldF9pZCBlbnYgKGludGVybiBuYW1lKSB2XG5cbmxldCBlbnZfbWVyZ2UgYmFzZSBvdmVybGF5ID1cbiAgaWYgYmFzZSA9PSBvdmVybGF5IHRoZW5cbiAgICB7IGJpbmRpbmdzID0gSGFzaHRibC5jcmVhdGUgMTY7IHBhcmVudCA9IFNvbWUgYmFzZSB9XG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgcmVjIGlzX2Rlc2NlbmRhbnQgZSBkZXB0aCA9XG4gICAgICBpZiBkZXB0aCA+IDEwMCB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGUgPT0gYmFzZSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gaXNfZGVzY2VuZGFudCBwIChkZXB0aCArIDEpIHwgTm9uZSAtPiBmYWxzZVxuICAgIGluXG4gICAgaWYgaXNfZGVzY2VuZGFudCBvdmVybGF5IDAgdGhlblxuICAgICAgeyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfVxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCBlID0geyBiaW5kaW5ncyA9IEhhc2h0YmwuY3JlYXRlIDE2OyBwYXJlbnQgPSBTb21lIGJhc2UgfSBpblxuICAgICAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgICAgICBpZiBub3QgKGVudl9oYXNfaWQgYmFzZSBpZCkgdGhlbiBIYXNodGJsLnJlcGxhY2UgZS5iaW5kaW5ncyBpZCB2XG4gICAgICApIG92ZXJsYXkuYmluZGluZ3M7XG4gICAgICBlXG4gICAgZW5kXG4gIGVuZFxuXG5cbigqKiB7MSBWYWx1ZSBleHRyYWN0aW9uIGhlbHBlcnN9ICopXG5cbmxldCB2YWx1ZV90b19zdHJpbmcgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHMgfCBTeW1ib2wgcyAtPiBzIHwgS2V5d29yZCBrIC0+IGtcbiAgfCBOdW1iZXIgbiAtPiBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbikgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIiB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTmlsIC0+IFwiXCIgfCBfIC0+IFwiPHZhbHVlPlwiXG5cbmxldCB2YWx1ZV90b19zdHJpbmdfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT4gTGlzdC5tYXAgdmFsdWVfdG9fc3RyaW5nIGl0ZW1zXG4gIHwgXyAtPiBbXVxuXG5sZXQgdmFsdWVfdG9fYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGIgfCBOaWwgLT4gZmFsc2UgfCBfIC0+IHRydWVcblxubGV0IHZhbHVlX3RvX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IFNvbWUgcyB8IFN5bWJvbCBzIC0+IFNvbWUgcyB8IE5pbCAtPiBOb25lIHwgXyAtPiBOb25lXG5cblxuKCoqIHsxIENvbnN0cnVjdG9ycyDigJQgYWNjZXB0IFt2YWx1ZV0gYXJncyBmcm9tIHRyYW5zcGlsZWQgY29kZX0gKilcblxubGV0IHVud3JhcF9lbnZfdmFsID0gZnVuY3Rpb25cbiAgfCBFbnYgZSAtPiBlXG4gIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2VfbGFtYmRhOiBleHBlY3RlZCBlbnYgZm9yIGNsb3N1cmVcIilcblxubGV0IG1ha2VfbGFtYmRhIHBhcmFtcyBib2R5IGNsb3N1cmUgPVxuICBsZXQgcHMgPSBtYXRjaCBwYXJhbXMgd2l0aFxuICAgIHwgTGlzdCBpdGVtcyAtPiBMaXN0Lm1hcCB2YWx1ZV90b19zdHJpbmcgaXRlbXNcbiAgICB8IF8gLT4gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zXG4gIGluXG4gIExhbWJkYSB7IGxfcGFyYW1zID0gcHM7IGxfYm9keSA9IGJvZHk7IGxfY2xvc3VyZSA9IHVud3JhcF9lbnZfdmFsIGNsb3N1cmU7IGxfbmFtZSA9IE5vbmU7IGxfY29tcGlsZWQgPSBOb25lIH1cblxubGV0IG1ha2VfY29tcG9uZW50IG5hbWUgcGFyYW1zIGhhc19jaGlsZHJlbiBib2R5IGNsb3N1cmUgYWZmaW5pdHkgPVxuICBsZXQgbiA9IHZhbHVlX3RvX3N0cmluZyBuYW1lIGluXG4gIGxldCBwcyA9IHZhbHVlX3RvX3N0cmluZ19saXN0IHBhcmFtcyBpblxuICBsZXQgaGMgPSB2YWx1ZV90b19ib29sIGhhc19jaGlsZHJlbiBpblxuICBsZXQgYWZmID0gbWF0Y2ggYWZmaW5pdHkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcImF1dG9cIiBpblxuICBDb21wb25lbnQge1xuICAgIGNfbmFtZSA9IG47IGNfcGFyYW1zID0gcHM7IGNfaGFzX2NoaWxkcmVuID0gaGM7XG4gICAgY19ib2R5ID0gYm9keTsgY19jbG9zdXJlID0gdW53cmFwX2Vudl92YWwgY2xvc3VyZTsgY19hZmZpbml0eSA9IGFmZjtcbiAgICBjX2ZpbGUgPSBOb25lOyBjX2NvbXBpbGVkID0gTm9uZTtcbiAgfVxuXG5sZXQgbWFrZV9pc2xhbmQgbmFtZSBwYXJhbXMgaGFzX2NoaWxkcmVuIGJvZHkgY2xvc3VyZSA9XG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nIG5hbWUgaW5cbiAgbGV0IHBzID0gdmFsdWVfdG9fc3RyaW5nX2xpc3QgcGFyYW1zIGluXG4gIGxldCBoYyA9IHZhbHVlX3RvX2Jvb2wgaGFzX2NoaWxkcmVuIGluXG4gIElzbGFuZCB7XG4gICAgaV9uYW1lID0gbjsgaV9wYXJhbXMgPSBwczsgaV9oYXNfY2hpbGRyZW4gPSBoYztcbiAgICBpX2JvZHkgPSBib2R5OyBpX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlO1xuICAgIGlfZmlsZSA9IE5vbmU7XG4gIH1cblxubGV0IG1ha2VfbWFjcm8gcGFyYW1zIHJlc3RfcGFyYW0gYm9keSBjbG9zdXJlIG5hbWUgPVxuICBsZXQgcHMgPSB2YWx1ZV90b19zdHJpbmdfbGlzdCBwYXJhbXMgaW5cbiAgbGV0IHJwID0gdmFsdWVfdG9fc3RyaW5nX29wdCByZXN0X3BhcmFtIGluXG4gIGxldCBuID0gdmFsdWVfdG9fc3RyaW5nX29wdCBuYW1lIGluXG4gIE1hY3JvIHtcbiAgICBtX3BhcmFtcyA9IHBzOyBtX3Jlc3RfcGFyYW0gPSBycDtcbiAgICBtX2JvZHkgPSBib2R5OyBtX2Nsb3N1cmUgPSB1bndyYXBfZW52X3ZhbCBjbG9zdXJlOyBtX25hbWUgPSBuO1xuICB9XG5cbmxldCBtYWtlX3RodW5rIGV4cHIgZW52ID0gVGh1bmsgKGV4cHIsIHVud3JhcF9lbnZfdmFsIGVudilcblxubGV0IG1ha2Vfc3ltYm9sIG5hbWUgPSBTeW1ib2wgKHZhbHVlX3RvX3N0cmluZyBuYW1lKVxubGV0IG1ha2Vfa2V5d29yZCBuYW1lID0gS2V5d29yZCAodmFsdWVfdG9fc3RyaW5nIG5hbWUpXG5cblxuKCoqIHsxIFR5cGUgaW5zcGVjdGlvbn0gKilcblxubGV0IHR5cGVfb2YgPSBmdW5jdGlvblxuICB8IE5pbCAgICAgICAgICAgIC0+IFwibmlsXCJcbiAgfCBCb29sIF8gICAgICAgICAtPiBcImJvb2xlYW5cIlxuICB8IE51bWJlciBfICAgICAgIC0+IFwibnVtYmVyXCJcbiAgfCBTdHJpbmcgXyAgICAgICAtPiBcInN0cmluZ1wiXG4gIHwgU3ltYm9sIF8gICAgICAgLT4gXCJzeW1ib2xcIlxuICB8IEtleXdvcmQgXyAgICAgIC0+IFwia2V5d29yZFwiXG4gIHwgTGlzdCBfIHwgTGlzdFJlZiBfIC0+IFwibGlzdFwiXG4gIHwgRGljdCBfICAgICAgICAgLT4gXCJkaWN0XCJcbiAgfCBMYW1iZGEgXyAgICAgICAtPiBcImxhbWJkYVwiXG4gIHwgQ29tcG9uZW50IF8gICAgLT4gXCJjb21wb25lbnRcIlxuICB8IElzbGFuZCBfICAgICAgIC0+IFwiaXNsYW5kXCJcbiAgfCBNYWNybyBfICAgICAgICAtPiBcIm1hY3JvXCJcbiAgfCBUaHVuayBfICAgICAgICAtPiBcInRodW5rXCJcbiAgfCBDb250aW51YXRpb24gKF8sIF8pIC0+IFwiY29udGludWF0aW9uXCJcbiAgfCBOYXRpdmVGbiBfICAgICAtPiBcImZ1bmN0aW9uXCJcbiAgfCBTaWduYWwgXyAgICAgICAtPiBcInNpZ25hbFwiXG4gIHwgUmF3SFRNTCBfICAgICAgLT4gXCJyYXctaHRtbFwiXG4gIHwgU3ByZWFkIF8gICAgICAgLT4gXCJzcHJlYWRcIlxuICB8IFN4RXhwciBfICAgICAgIC0+IFwic3gtZXhwclwiXG4gIHwgRW52IF8gICAgICAgICAgLT4gXCJlbnZcIlxuICB8IENla1N0YXRlIF8gICAgIC0+IFwiZGljdFwiICAoKiBDRUsgc3RhdGUgYmVoYXZlcyBhcyBhIGRpY3QgZm9yIHR5cGUgY2hlY2tzICopXG4gIHwgQ2VrRnJhbWUgXyAgICAgLT4gXCJkaWN0XCJcbiAgfCBWbUNsb3N1cmUgXyAgICAtPiBcImZ1bmN0aW9uXCJcblxubGV0IGlzX25pbCA9IGZ1bmN0aW9uIE5pbCAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX2xhbWJkYSA9IGZ1bmN0aW9uIExhbWJkYSBfIC0+IHRydWUgfCBfIC0+IGZhbHNlXG5sZXQgaXNfY29tcG9uZW50ID0gZnVuY3Rpb24gQ29tcG9uZW50IF8gLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcbmxldCBpc19pc2xhbmQgPSBmdW5jdGlvbiBJc2xhbmQgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX21hY3JvID0gZnVuY3Rpb24gTWFjcm8gXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX3RodW5rID0gZnVuY3Rpb24gVGh1bmsgXyAtPiB0cnVlIHwgXyAtPiBmYWxzZVxubGV0IGlzX3NpZ25hbCA9IGZ1bmN0aW9uXG4gIHwgU2lnbmFsIF8gLT4gdHJ1ZVxuICB8IERpY3QgZCAtPiBIYXNodGJsLm1lbSBkIFwiX19zaWduYWxcIlxuICB8IF8gLT4gZmFsc2VcblxubGV0IGlzX2NhbGxhYmxlID0gZnVuY3Rpb25cbiAgfCBMYW1iZGEgXyB8IE5hdGl2ZUZuIF8gfCBDb250aW51YXRpb24gKF8sIF8pIHwgVm1DbG9zdXJlIF8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG4oKiogezEgVHJ1dGhpbmVzc30gKilcblxuKCoqIFNYIHRydXRoaW5lc3M6IGV2ZXJ5dGhpbmcgaXMgdHJ1dGh5IGV4Y2VwdCBbTmlsXSBhbmQgW0Jvb2wgZmFsc2VdLiAqKVxubGV0IHN4X3RydXRoeSA9IGZ1bmN0aW9uXG4gIHwgTmlsIHwgQm9vbCBmYWxzZSAtPiBmYWxzZVxuICB8IF8gLT4gdHJ1ZVxuXG5cbigqKiB7MSBBY2Nlc3NvcnN9ICopXG5cbmxldCBzeW1ib2xfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgU3ltYm9sIHMgLT4gU3RyaW5nIHNcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHN5bWJvbCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGtleXdvcmRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgS2V5d29yZCBrIC0+IFN0cmluZyBrXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBrZXl3b3JkLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBsLmxfcGFyYW1zKVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGFtYmRhLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbGFtYmRhX2JvZHkgPSBmdW5jdGlvblxuICB8IExhbWJkYSBsIC0+IGwubF9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gRW52IGwubF9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBsYW1iZGFfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgTGFtYmRhIGwgLT4gKG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IFN0cmluZyBuIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsYW1iZGEsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBzZXRfbGFtYmRhX25hbWUgbCBuID0gbWF0Y2ggbCB3aXRoXG4gIHwgTGFtYmRhIGwgLT4gbC5sX25hbWUgPC0gU29tZSBuOyBOaWxcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LWxhbWJkYS1uYW1lITogbm90IGEgbGFtYmRhXCIpXG5cbmxldCBjb21wb25lbnRfbmFtZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19uYW1lXG4gIHwgSXNsYW5kIGkgLT4gU3RyaW5nIGkuaV9uYW1lXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfZmlsZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gKG1hdGNoIGMuY19maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgSXNsYW5kIGkgLT4gKG1hdGNoIGkuaV9maWxlIHdpdGggU29tZSBmIC0+IFN0cmluZyBmIHwgTm9uZSAtPiBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IGNvbXBvbmVudF9zZXRfZmlsZSB2IGYgPVxuICAobWF0Y2ggdiwgZiB3aXRoXG4gIHwgQ29tcG9uZW50IGMsIFN0cmluZyBzIC0+IGMuY19maWxlIDwtIFNvbWUgc1xuICB8IElzbGFuZCBpLCBTdHJpbmcgcyAtPiBpLmlfZmlsZSA8LSBTb21lIHNcbiAgfCBfIC0+ICgpKTsgTmlsXG5cbmxldCBjb21wb25lbnRfc2V0X2ZpbGVfYiA9IGNvbXBvbmVudF9zZXRfZmlsZVxuXG5sZXQgY29tcG9uZW50X3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICB8IElzbGFuZCBpIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgaS5pX3BhcmFtcylcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9ib2R5ID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBjLmNfYm9keVxuICB8IElzbGFuZCBpIC0+IGkuaV9ib2R5XG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gRW52IGMuY19jbG9zdXJlXG4gIHwgSXNsYW5kIGkgLT4gRW52IGkuaV9jbG9zdXJlXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBjb21wb25lbnQsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCBjb21wb25lbnRfaGFzX2NoaWxkcmVuID0gZnVuY3Rpb25cbiAgfCBDb21wb25lbnQgYyAtPiBCb29sIGMuY19oYXNfY2hpbGRyZW5cbiAgfCBJc2xhbmQgaSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGNvbXBvbmVudCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IGNvbXBvbmVudF9hZmZpbml0eSA9IGZ1bmN0aW9uXG4gIHwgQ29tcG9uZW50IGMgLT4gU3RyaW5nIGMuY19hZmZpbml0eVxuICB8IElzbGFuZCBfIC0+IFN0cmluZyBcImNsaWVudFwiXG4gIHwgXyAtPiBTdHJpbmcgXCJhdXRvXCJcblxubGV0IG1hY3JvX3BhcmFtcyA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIG0ubV9wYXJhbXMpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX3Jlc3RfcGFyYW0gPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gKG1hdGNoIG0ubV9yZXN0X3BhcmFtIHdpdGggU29tZSBzIC0+IFN0cmluZyBzIHwgTm9uZSAtPiBOaWwpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBtYWNybywgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxubGV0IG1hY3JvX2JvZHkgPSBmdW5jdGlvblxuICB8IE1hY3JvIG0gLT4gbS5tX2JvZHlcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgbWFjcm9fY2xvc3VyZSA9IGZ1bmN0aW9uXG4gIHwgTWFjcm8gbSAtPiBFbnYgbS5tX2Nsb3N1cmVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIG1hY3JvLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZXhwciA9IGZ1bmN0aW9uXG4gIHwgVGh1bmsgKGUsIF8pIC0+IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgdGh1bmtfZW52ID0gZnVuY3Rpb25cbiAgfCBUaHVuayAoXywgZSkgLT4gRW52IGVcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIHRodW5rLCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5cbigqKiB7MSBEaWN0IG9wZXJhdGlvbnN9ICopXG5cbmxldCBtYWtlX2RpY3QgKCkgOiBkaWN0ID0gSGFzaHRibC5jcmVhdGUgOFxuXG5sZXQgZGljdF9nZXQgKGQgOiBkaWN0KSBrZXkgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQga2V5IHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbFxuXG5sZXQgZGljdF9oYXMgKGQgOiBkaWN0KSBrZXkgPSBIYXNodGJsLm1lbSBkIGtleVxuXG5sZXQgZGljdF9zZXQgKGQgOiBkaWN0KSBrZXkgdiA9IEhhc2h0YmwucmVwbGFjZSBkIGtleSB2XG5cbmxldCBkaWN0X2RlbGV0ZSAoZCA6IGRpY3QpIGtleSA9IEhhc2h0YmwucmVtb3ZlIGQga2V5XG5cbmxldCBkaWN0X2tleXMgKGQgOiBkaWN0KSA9XG4gIEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhY2MgLT4gU3RyaW5nIGsgOjogYWNjKSBkIFtdXG5cbmxldCBkaWN0X3ZhbHMgKGQgOiBkaWN0KSA9XG4gIEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhY2MgLT4gdiA6OiBhY2MpIGQgW11cblxuXG4oKiogezEgVmFsdWUgZGlzcGxheX0gKilcblxubGV0IHJlYyBpbnNwZWN0ID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gXCJuaWxcIlxuICB8IEJvb2wgdHJ1ZSAtPiBcInRydWVcIlxuICB8IEJvb2wgZmFsc2UgLT4gXCJmYWxzZVwiXG4gIHwgTnVtYmVyIG4gLT5cbiAgICBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBQcmludGYuc3ByaW50ZiBcIiVkXCIgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBTdHJpbmcgcyAtPlxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICAgIHwgJ1wiJyAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxuJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXFxcblwiXG4gICAgICB8ICdcXHInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFxcXHRcIlxuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4gXCI6XCIgXiBrXG4gIHwgTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0gLT5cbiAgICBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIGluc3BlY3QgaXRlbXMpIF4gXCIpXCJcbiAgfCBEaWN0IGQgLT5cbiAgICBsZXQgcGFpcnMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+XG4gICAgICAoUHJpbnRmLnNwcmludGYgXCI6JXMgJXNcIiBrIChpbnNwZWN0IHYpKSA6OiBhY2MpIGQgW10gaW5cbiAgICBcIntcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgcGFpcnMgXiBcIn1cIlxuICB8IExhbWJkYSBsIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibGFtYmRhXCIgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIjwlcyglcyk+XCIgdGFnIChTdHJpbmcuY29uY2F0IFwiLCBcIiBsLmxfcGFyYW1zKVxuICB8IENvbXBvbmVudCBjIC0+XG4gICAgUHJpbnRmLnNwcmludGYgXCI8Q29tcG9uZW50IH4lcyglcyk+XCIgYy5jX25hbWUgKFN0cmluZy5jb25jYXQgXCIsIFwiIGMuY19wYXJhbXMpXG4gIHwgSXNsYW5kIGkgLT5cbiAgICBQcmludGYuc3ByaW50ZiBcIjxJc2xhbmQgfiVzKCVzKT5cIiBpLmlfbmFtZSAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgaS5pX3BhcmFtcylcbiAgfCBNYWNybyBtIC0+XG4gICAgbGV0IHRhZyA9IG1hdGNoIG0ubV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwibWFjcm9cIiBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiPCVzKCVzKT5cIiB0YWcgKFN0cmluZy5jb25jYXQgXCIsIFwiIG0ubV9wYXJhbXMpXG4gIHwgVGh1bmsgXyAtPiBcIjx0aHVuaz5cIlxuICB8IENvbnRpbnVhdGlvbiAoXywgXykgLT4gXCI8Y29udGludWF0aW9uPlwiXG4gIHwgTmF0aXZlRm4gKG5hbWUsIF8pIC0+IFByaW50Zi5zcHJpbnRmIFwiPG5hdGl2ZTolcz5cIiBuYW1lXG4gIHwgU2lnbmFsIF8gLT4gXCI8c2lnbmFsPlwiXG4gIHwgUmF3SFRNTCBzIC0+IHNcbiAgfCBTcHJlYWQgXyAtPiBcIjxzcHJlYWQ+XCJcbiAgfCBTeEV4cHIgcyAtPiBzXG4gIHwgRW52IF8gLT4gXCI8ZW52PlwiXG4gIHwgQ2VrU3RhdGUgXyAtPiBcIjxjZWstc3RhdGU+XCJcbiAgfCBDZWtGcmFtZSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiPGZyYW1lOiVzPlwiIGYuY2ZfdHlwZVxuICB8IFZtQ2xvc3VyZSBjbCAtPiBQcmludGYuc3ByaW50ZiBcIjx2bTolcz5cIiAobWF0Y2ggY2wudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcImFub25cIilcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJjYW1sX2NhbGwzIiwiYTIiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliIiwiU3RkbGliX1ByaW50ZiIsIlN0ZGxpYl9CdWZmZXIiLCJTdGRsaWJfRmxvYXQiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0xpc3QiLCJzeW1fdG9faWQiLCJpZF90b19zeW0iLCJzeW1fbmV4dCIsImludGVybiIsInMiLCJtYXRjaCIsImlkIiwidW5pbnRlcm4iLCJ2bV9jYWxsX2Nsb3N1cmVfcmVmIiwicGFyYW0iLCJFdmFsX2Vycm9yIiwiUGFyc2VfZXJyb3IiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJwYXJlbnQiLCJlbnZfYmluZF9ob29rIiwiZW52X2JpbmQiLCJlbnYiLCJuYW1lIiwidiIsImVudl9oYXNfaWQiLCJlbnZfaGFzIiwiZW52X2dldF9pZCIsImVudl9nZXQiLCJlbnZfc2V0X2lkIiwiZW52X3NldCIsImVudl9tZXJnZSIsImJhc2UiLCJvdmVybGF5IiwiZSIsImRlcHRoIiwicCIsImNzdF9nIiwiY3N0X2ZhbHNlIiwiY3N0X3RydWUiLCJ2YWx1ZV90b19zdHJpbmciLCJuIiwidmFsdWVfdG9fc3RyaW5nX2xpc3QiLCJpdGVtcyIsInZhbHVlX3RvX2Jvb2wiLCJiIiwidmFsdWVfdG9fc3RyaW5nX29wdCIsInVud3JhcF9lbnZfdmFsIiwibWFrZV9sYW1iZGEiLCJwYXJhbXMiLCJib2R5IiwiY2xvc3VyZSIsInBzIiwiY3N0X2F1dG8iLCJtYWtlX2NvbXBvbmVudCIsImhhc19jaGlsZHJlbiIsImFmZmluaXR5IiwiaGMiLCJhZmYiLCJtYWtlX2lzbGFuZCIsIm1ha2VfbWFjcm8iLCJyZXN0X3BhcmFtIiwicnAiLCJtYWtlX3RodW5rIiwiZXhwciIsIm1ha2Vfc3ltYm9sIiwibWFrZV9rZXl3b3JkIiwiY3N0X2xhbWJkYSIsImNzdF9tYWNybyIsImNzdF9uaWwiLCJ0eXBlX29mIiwiY3N0X2RpY3QiLCJjc3RfZnVuY3Rpb24iLCJpc19uaWwiLCJpc19sYW1iZGEiLCJpc19jb21wb25lbnQiLCJpc19pc2xhbmQiLCJpc19tYWNybyIsImlzX3RodW5rIiwiaXNfc2lnbmFsIiwiZCIsImlzX2NhbGxhYmxlIiwic3hfdHJ1dGh5Iiwic3ltYm9sX25hbWUiLCJrZXl3b3JkX25hbWUiLCJrIiwiY3N0X0V4cGVjdGVkX2xhbWJkYV9nb3QiLCJsYW1iZGFfcGFyYW1zIiwibCIsImxhbWJkYV9ib2R5IiwibGFtYmRhX2Nsb3N1cmUiLCJsYW1iZGFfbmFtZSIsInNldF9sYW1iZGFfbmFtZSIsImNzdF9FeHBlY3RlZF9jb21wb25lbnRfZ290IiwiY29tcG9uZW50X25hbWUiLCJjIiwiY29tcG9uZW50X2ZpbGUiLCJpIiwiY29tcG9uZW50X3NldF9maWxlIiwiY29tcG9uZW50X3BhcmFtcyIsImNvbXBvbmVudF9ib2R5IiwiY29tcG9uZW50X2Nsb3N1cmUiLCJjb21wb25lbnRfaGFzX2NoaWxkcmVuIiwiY29tcG9uZW50X2FmZmluaXR5IiwiY3N0X0V4cGVjdGVkX21hY3JvX2dvdCIsIm1hY3JvX3BhcmFtcyIsIm0iLCJtYWNyb19yZXN0X3BhcmFtIiwibWFjcm9fYm9keSIsIm1hY3JvX2Nsb3N1cmUiLCJjc3RfRXhwZWN0ZWRfdGh1bmtfZ290IiwidGh1bmtfZXhwciIsInRodW5rX2VudiIsIm1ha2VfZGljdCIsImRpY3RfZ2V0Iiwia2V5IiwiZGljdF9oYXMiLCJkaWN0X3NldCIsImRpY3RfZGVsZXRlIiwiZGljdF9rZXlzIiwiYWNjIiwiZGljdF92YWxzIiwiY3N0IiwiY3N0X3NfcyIsImluc3BlY3QiLCJidWYiLCJwYWlycyIsInRhZyIsImNsIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLG1CQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEYjVEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MjU1NDIsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3BhcnNlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTLWV4cHJlc3Npb24gcGFyc2VyLlxuXG4gICAgUmVjdXJzaXZlIGRlc2NlbnQgb3ZlciBhIHN0cmluZywgcHJvZHVjaW5nIFtTeF90eXBlcy52YWx1ZSBsaXN0XS5cbiAgICBTdXBwb3J0czogbGlzdHMsIGRpY3RzLCBzeW1ib2xzLCBrZXl3b3Jkcywgc3RyaW5ncyAod2l0aCBlc2NhcGVzKSxcbiAgICBudW1iZXJzLCBib29sZWFucywgbmlsLCBjb21tZW50cywgcXVvdGUvcXVhc2lxdW90ZS91bnF1b3RlIHN1Z2FyLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbnR5cGUgc3RhdGUgPSB7XG4gIHNyYyA6IHN0cmluZztcbiAgbGVuIDogaW50O1xuICBtdXRhYmxlIHBvcyA6IGludDtcbn1cblxubGV0IG1ha2Vfc3RhdGUgc3JjID0geyBzcmM7IGxlbiA9IFN0cmluZy5sZW5ndGggc3JjOyBwb3MgPSAwIH1cblxubGV0IHBlZWsgcyA9IGlmIHMucG9zIDwgcy5sZW4gdGhlbiBTb21lIHMuc3JjLltzLnBvc10gZWxzZSBOb25lXG5sZXQgYWR2YW5jZSBzID0gcy5wb3MgPC0gcy5wb3MgKyAxXG5sZXQgYXRfZW5kIHMgPSBzLnBvcyA+PSBzLmxlblxuXG5sZXQgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzID1cbiAgbGV0IHJlYyBnbyAoKSA9XG4gICAgaWYgYXRfZW5kIHMgdGhlbiAoKVxuICAgIGVsc2UgbWF0Y2ggcy5zcmMuW3MucG9zXSB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT4gYWR2YW5jZSBzOyBnbyAoKVxuICAgIHwgJzsnIC0+XG4gICAgICB3aGlsZSBzLnBvcyA8IHMubGVuICYmIHMuc3JjLltzLnBvc10gPD4gJ1xcbicgZG8gYWR2YW5jZSBzIGRvbmU7XG4gICAgICBpZiBzLnBvcyA8IHMubGVuIHRoZW4gYWR2YW5jZSBzO1xuICAgICAgZ28gKClcbiAgICB8IF8gLT4gKClcbiAgaW4gZ28gKClcblxuKCogQ2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIOKAlCBtYXRjaGVzIHNwZWMvcGFyc2VyLnN4IGlkZW50LXN0YXJ0L2lkZW50LWNoYXIuXG4gICBpZGVudC1zdGFydDogYS16IEEtWiBfIH4gKiArIC0gPiA8ID0gLyAhID8gJlxuICAgaWRlbnQtY2hhcjogIGlkZW50LXN0YXJ0IHBsdXMgMC05IC4gOiAvICMgLCAqKVxubGV0IGlzX2lkZW50X3N0YXJ0ID0gZnVuY3Rpb25cbiAgfCAnYScuLid6JyB8ICdBJy4uJ1onIHwgJ18nIHwgJ34nIHwgJyonIHwgJysnIHwgJy0nXG4gIHwgJz4nIHwgJzwnIHwgJz0nIHwgJy8nIHwgJyEnIHwgJz8nIHwgJyYnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBpc19pZGVudF9jaGFyID0gZnVuY3Rpb25cbiAgfCBjIHdoZW4gaXNfaWRlbnRfc3RhcnQgYyAtPiB0cnVlXG4gIHwgJzAnLi4nOScgfCAnLicgfCAnOicgfCAnIycgfCAnLCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuKCogU3ltYm9sIHJlYWRpbmcgdXNlcyBpZGVudF9jaGFyOyBmaXJzdCBjaGFyIG11c3QgYmUgaWRlbnRfc3RhcnQgb3IgZGlnaXQvY29sb24gKilcbmxldCBpc19zeW1ib2xfY2hhciA9IGlzX2lkZW50X2NoYXJcblxubGV0IHJlYWRfc3RyaW5nIHMgPVxuICAoKiBzLnBvcyBpcyBvbiB0aGUgb3BlbmluZyBxdW90ZSAqKVxuICBhZHZhbmNlIHM7XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCByZWMgZ28gKCkgPVxuICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgYyA9ICdcIicgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gICAgZWxzZSBpZiBjID0gJ1xcXFwnIHRoZW4gYmVnaW5cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBlc2NhcGVcIik7XG4gICAgICBsZXQgZXNjID0gcy5zcmMuW3MucG9zXSBpblxuICAgICAgYWR2YW5jZSBzO1xuICAgICAgKG1hdGNoIGVzYyB3aXRoXG4gICAgICAgfCAnbicgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJ1xuICAgICAgIHwgJ3QnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcdCdcbiAgICAgICB8ICdyJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXHInXG4gICAgICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuICAgICAgIHwgJ1xcXFwnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcXFwnXG4gICAgICAgfCAndScgLT5cbiAgICAgICAgICgqIFxcdVhYWFgg4oCUIHJlYWQgNCBoZXggZGlnaXRzLCBlbmNvZGUgYXMgVVRGLTggKilcbiAgICAgICAgIGlmIHMucG9zICsgNCA+IHMubGVuIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiSW5jb21wbGV0ZSBcXFxcdSBlc2NhcGVcIik7XG4gICAgICAgICBsZXQgaGV4ID0gU3RyaW5nLnN1YiBzLnNyYyBzLnBvcyA0IGluXG4gICAgICAgICBzLnBvcyA8LSBzLnBvcyArIDQ7XG4gICAgICAgICBsZXQgY29kZSA9IGludF9vZl9zdHJpbmcgKFwiMHhcIiBeIGhleCkgaW5cbiAgICAgICAgIGxldCB1YnVmID0gQnVmZmVyLmNyZWF0ZSA0IGluXG4gICAgICAgICBCdWZmZXIuYWRkX3V0Zl84X3VjaGFyIHVidWYgKFVjaGFyLm9mX2ludCBjb2RlKTtcbiAgICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoQnVmZmVyLmNvbnRlbnRzIHVidWYpXG4gICAgICAgfCAnYCcgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnYCdcbiAgICAgICB8IF8gLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxcXCc7IEJ1ZmZlci5hZGRfY2hhciBidWYgZXNjKTtcbiAgICAgIGdvICgpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cbmxldCByZWFkX3N5bWJvbCBzID1cbiAgbGV0IHN0YXJ0ID0gcy5wb3MgaW5cbiAgd2hpbGUgcy5wb3MgPCBzLmxlbiAmJiBpc19zeW1ib2xfY2hhciBzLnNyYy5bcy5wb3NdIGRvIGFkdmFuY2UgcyBkb25lO1xuICBTdHJpbmcuc3ViIHMuc3JjIHN0YXJ0IChzLnBvcyAtIHN0YXJ0KVxuXG5sZXQgdHJ5X251bWJlciBzdHIgPVxuICBtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHN0ciB3aXRoXG4gIHwgU29tZSBuIC0+IFNvbWUgKE51bWJlciBuKVxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmVjIHJlYWRfdmFsdWUgcyA6IHZhbHVlID1cbiAgc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cyBzO1xuICBpZiBhdF9lbmQgcyB0aGVuIGJlZ2luXG4gICAgbGV0IGxpbmUgPSByZWYgMSBpblxuICAgIFN0cmluZy5pdGVyIChmdW4gYyAtPiBpZiBjID0gJ1xcbicgdGhlbiBpbmNyIGxpbmUpIHMuc3JjO1xuICAgIHJhaXNlIChQYXJzZV9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBhdCBsaW5lICVkIChwb3MgJWQpXCIgIWxpbmUgcy5wb3MpKVxuICBlbmQ7XG4gIG1hdGNoIHMuc3JjLltzLnBvc10gd2l0aFxuICB8ICcoJyAtPiByZWFkX2xpc3QgcyAnKSdcbiAgfCAnWycgLT4gcmVhZF9saXN0IHMgJ10nXG4gIHwgJ3snIC0+IHJlYWRfZGljdCBzXG4gIHwgJ1wiJyAtPiBTdHJpbmcgKHJlYWRfc3RyaW5nIHMpXG4gIHwgJ1xcJycgLT4gYWR2YW5jZSBzOyBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJ2AnIC0+IGFkdmFuY2UgczsgTGlzdCBbU3ltYm9sIFwicXVhc2lxdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnOycgLT5cbiAgICAoKiBEYXR1bSBjb21tZW50OiAjOyBkaXNjYXJkcyBuZXh0IGV4cHJlc3Npb24gKilcbiAgICBhZHZhbmNlIHM7IGFkdmFuY2UgcztcbiAgICBpZ25vcmUgKHJlYWRfdmFsdWUgcyk7XG4gICAgcmVhZF92YWx1ZSBzXG4gIHwgJyMnIHdoZW4gcy5wb3MgKyAxIDwgcy5sZW4gJiYgcy5zcmMuW3MucG9zICsgMV0gPSAnXFwnJyAtPlxuICAgICgqIFF1b3RlIHNob3J0aGFuZDogIydleHByIC0+IChxdW90ZSBleHByKSAqKVxuICAgIGFkdmFuY2UgczsgYWR2YW5jZSBzO1xuICAgIExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgfCAnIycgd2hlbiBzLnBvcyArIDEgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3MgKyAxXSA9ICd8JyAtPlxuICAgICgqIFJhdyBzdHJpbmc6ICN8Li4ufCAg4oCUIGVuZHMgYXQgbmV4dCB8ICopXG4gICAgYWR2YW5jZSBzOyBhZHZhbmNlIHM7XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBsZXQgcmVjIGdvICgpID1cbiAgICAgIGlmIGF0X2VuZCBzIHRoZW4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiVW50ZXJtaW5hdGVkIHJhdyBzdHJpbmdcIik7XG4gICAgICBsZXQgYyA9IHMuc3JjLltzLnBvc10gaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIGlmIGMgPSAnfCcgdGhlblxuICAgICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgZ28gKClcbiAgICAgIGVuZFxuICAgIGluIGdvICgpXG4gIHwgJywnIC0+XG4gICAgKCogVW5xdW90ZSAvIHNwbGljZS11bnF1b3RlIOKAlCBtYXRjaGVzIHNwZWM6ICwgYWx3YXlzIHRyaWdnZXJzIHVucXVvdGUgKilcbiAgICBhZHZhbmNlIHM7XG4gICAgaWYgcy5wb3MgPCBzLmxlbiAmJiBzLnNyYy5bcy5wb3NdID0gJ0AnIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIExpc3QgW1N5bWJvbCBcInNwbGljZS11bnF1b3RlXCI7IHJlYWRfdmFsdWUgc11cbiAgICBlbmQgZWxzZVxuICAgICAgTGlzdCBbU3ltYm9sIFwidW5xdW90ZVwiOyByZWFkX3ZhbHVlIHNdXG4gIHwgXyAtPlxuICAgIGJlZ2luXG4gICAgICAoKiBTeW1ib2wsIGtleXdvcmQsIG51bWJlciwgb3IgYm9vbGVhbiAqKVxuICAgICAgbGV0IHRva2VuID0gcmVhZF9zeW1ib2wgcyBpblxuICAgICAgaWYgdG9rZW4gPSBcIlwiIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxpbmUgPSByZWYgMSBhbmQgY29sID0gcmVmIDEgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHMucG9zIC0gMSBkb1xuICAgICAgICAgIGlmIHMuc3JjLltpXSA9ICdcXG4nIHRoZW4gKGluY3IgbGluZTsgY29sIDo9IDEpIGVsc2UgaW5jciBjb2xcbiAgICAgICAgZG9uZTtcbiAgICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yIChQcmludGYuc3ByaW50ZiBcIlVuZXhwZWN0ZWQgY2hhcjogJWMgYXQgbGluZSAlZCBjb2wgJWQgKHBvcyAlZClcIlxuICAgICAgICAgIHMuc3JjLltzLnBvc10gIWxpbmUgIWNvbCBzLnBvcykpXG4gICAgICBlbmQ7XG4gICAgICBtYXRjaCB0b2tlbiB3aXRoXG4gICAgICB8IFwidHJ1ZVwiIC0+IEJvb2wgdHJ1ZVxuICAgICAgfCBcImZhbHNlXCIgLT4gQm9vbCBmYWxzZVxuICAgICAgfCBcIm5pbFwiIC0+IE5pbFxuICAgICAgfCBfIHdoZW4gdG9rZW4uWzBdID0gJzonIC0+XG4gICAgICAgIEtleXdvcmQgKFN0cmluZy5zdWIgdG9rZW4gMSAoU3RyaW5nLmxlbmd0aCB0b2tlbiAtIDEpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIHRyeV9udW1iZXIgdG9rZW4gd2l0aFxuICAgICAgICB8IFNvbWUgbiAtPiBuXG4gICAgICAgIHwgTm9uZSAtPiBTeW1ib2wgdG9rZW5cbiAgICBlbmRcblxuYW5kIHJlYWRfbGlzdCBzIGNsb3NlX2NoYXIgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgb3BlbmluZyBwYXJlbi9icmFja2V0ICopXG4gIGxldCBpdGVtcyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgbGlzdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gY2xvc2VfY2hhciB0aGVuIGJlZ2luXG4gICAgICBhZHZhbmNlIHM7XG4gICAgICBMaXN0IChMaXN0LnJldiAhaXRlbXMpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIGl0ZW1zIDo9IHJlYWRfdmFsdWUgcyA6OiAhaXRlbXM7XG4gICAgICBnbyAoKVxuICAgIGVuZFxuICBpbiBnbyAoKVxuXG5hbmQgcmVhZF9kaWN0IHMgPVxuICBhZHZhbmNlIHM7ICgqIHNraXAgeyAqKVxuICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiByYWlzZSAoUGFyc2VfZXJyb3IgXCJVbnRlcm1pbmF0ZWQgZGljdFwiKTtcbiAgICBpZiBzLnNyYy5bcy5wb3NdID0gJ30nIHRoZW4gYmVnaW5cbiAgICAgIGFkdmFuY2UgcztcbiAgICAgIERpY3QgZFxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBsZXQga2V5ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBsZXQga2V5X3N0ciA9IG1hdGNoIGtleSB3aXRoXG4gICAgICAgIHwgS2V5d29yZCBrIC0+IGtcbiAgICAgICAgfCBTdHJpbmcgayAtPiBrXG4gICAgICAgIHwgU3ltYm9sIGsgLT4ga1xuICAgICAgICB8IF8gLT4gcmFpc2UgKFBhcnNlX2Vycm9yIFwiRGljdCBrZXkgbXVzdCBiZSBrZXl3b3JkLCBzdHJpbmcsIG9yIHN5bWJvbFwiKVxuICAgICAgaW5cbiAgICAgIGxldCB2ID0gcmVhZF92YWx1ZSBzIGluXG4gICAgICBkaWN0X3NldCBkIGtleV9zdHIgdjtcbiAgICAgIGdvICgpXG4gICAgZW5kXG4gIGluIGdvICgpXG5cblxuKCoqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBsaXN0IG9mIFNYIHZhbHVlcy4gKilcbmxldCBwYXJzZV9hbGwgc3JjID1cbiAgbGV0IHMgPSBtYWtlX3N0YXRlIHNyYyBpblxuICBsZXQgcmVzdWx0cyA9IHJlZiBbXSBpblxuICBsZXQgcmVjIGdvICgpID1cbiAgICBza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIHM7XG4gICAgaWYgYXRfZW5kIHMgdGhlbiBMaXN0LnJldiAhcmVzdWx0c1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIHJlc3VsdHMgOj0gcmVhZF92YWx1ZSBzIDo6ICFyZXN1bHRzO1xuICAgICAgZ28gKClcbiAgICBlbmRcbiAgaW4gZ28gKClcblxuKCoqIFBhcnNlIGEgZmlsZSBpbnRvIGEgbGlzdCBvZiBTWCB2YWx1ZXMuICopXG5sZXQgcGFyc2VfZmlsZSBwYXRoID1cbiAgbGV0IGljID0gb3Blbl9pbiBwYXRoIGluXG4gIGxldCBuID0gaW5fY2hhbm5lbF9sZW5ndGggaWMgaW5cbiAgbGV0IHNyYyA9IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbiBpblxuICBjbG9zZV9pbiBpYztcbiAgcGFyc2VfYWxsIHNyY1xuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX2NhbGwyIiwiZiIsImEwIiwiYTEiLCJjYW1sX2NhbGw0IiwiYTIiLCJhMyIsImdsb2JhbF9kYXRhIiwiU3hfdHlwZXMiLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlN0ZGxpYl9VY2hhciIsIm1ha2Vfc3RhdGUiLCJzcmMiLCJwZWVrIiwicyIsImFkdmFuY2UiLCJhdF9lbmQiLCJza2lwX3doaXRlc3BhY2VfYW5kX2NvbW1lbnRzIiwibWF0Y2giLCJpc19pZGVudF9zdGFydCIsInBhcmFtIiwiaXNfaWRlbnRfY2hhciIsImMiLCJyZWFkX3N0cmluZyIsImJ1ZiIsImVzYyIsImhleCIsImNvZGUiLCJ1YnVmIiwicmVhZF9zeW1ib2wiLCJzdGFydCIsInRyeV9udW1iZXIiLCJzdHIiLCJuIiwiY3N0X3BvcyIsImNzdF9xdW90ZSIsInJlYWRfdmFsdWUiLCJ0b2tlbiIsImNvbCIsImxpbmUiLCJpIiwicmVhZF9saXN0IiwiY2xvc2VfY2hhciIsIml0ZW1zIiwicmVhZF9kaWN0IiwiZCIsImtleSIsImtleV9zdHIiLCJ2IiwicGFyc2VfYWxsIiwicmVzdWx0cyIsInBhcnNlX2ZpbGUiLCJwYXRoIiwiaWMiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUMsSUFBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFILEdBQUFDLElBQUFDLElBQUFFLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsWUFBQUMsV0FBQUMsS0NjcUIsK0NBQXlDO0FBQUEsWUFBQUMsS0FBQUM7QUFBQUEsSUFFakQseUJBQTJCLGdDQUF1QjtBQUFBO0FBQUEsWUFBQUMsUUFBQUQsR0FDL0MsOEJBQWtCO0FBQUEsWUFBQUUsT0FBQUYsR0FDbkIsNEJBQWM7QUFBQSxZQUFBRyw2QkFBQUg7QUFBQUE7QUFBQUEsSUFJdEI7QUFBQSxtQkFBYztBQUFBLFNBQUFJLFFBQ047QUFBQTtBQUFBO0FBQUEsTUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtDQUdDLDZCQUF5QjtBQUFBLFNBQ2hEO0FBQUEsU0FBc0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FKQTtB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QUE7QUFBQSxLQUd0QixZQURTO0FBQUE7QUFBQSxHQUdMO0FBQUEsWUFBQUMsVUFBQTlCO0FBQUFBLElBR1I7QUFBQSxRQUFBK0IsSUFDUTtBQUFBLElBRU47QUFBQTtBQUFBLEtBQ0c7QUFBQSxNQUFjO0FBQUE7QUFBQSxLQUNkLHdDQUNELFlBQVM7QUFBQSxTQUFBQyxNQUdDO0FBQUEsS0FDVjtBQUFBLFVBQUFDLFVBQUEsUUFBQUMsSUFNUTtBQUFBLE1BQ1I7QUFBQTtBQUFBO0FBQUEsS0FIUztBQUFBO0FBQUE7QUFBQTtBQUFBLEdBTUw7QUFBQSxZQUFBQyxVQUFBckM7QUFBQUEsUUFBQUUsSUFLQSxpQkFBQW9DLFVBR047QUFBQTtBQUFBO0FBQUEsS0FDRyxjQUFjLDBDQUtYO0FBQUEsS0FGSixjQURXO0FBQUE7QUFBQSxHQUdQO0FBQUEsWUFBQUMsV0FBQUM7QUFBQUE7QUFBQUEsS0FBQUMsS0FJQztBQUFBLEtBQUFwQixJQUNEO0FBQUEsS0FBQXJCLE1BQ0U7QUFBQSxJQUNWO0FBQUEsSUFBVyxxQkFDRTtBQUFBO0FBQUEsR0QvTmYiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyNTk0NCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcHJpbWl0aXZlcy5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBCdWlsdC1pbiBwcmltaXRpdmUgZnVuY3Rpb25zICh+ODAgcHVyZSBmdW5jdGlvbnMpLlxuXG4gICAgUmVnaXN0ZXJlZCBpbiBhIGdsb2JhbCB0YWJsZTsgdGhlIGV2YWx1YXRvciBjaGVja3MgdGhpcyB0YWJsZVxuICAgIHdoZW4gYSBzeW1ib2wgaXNuJ3QgZm91bmQgaW4gdGhlIGxleGljYWwgZW52aXJvbm1lbnQuICopXG5cbm9wZW4gU3hfdHlwZXNcblxubGV0IHByaW1pdGl2ZXMgOiAoc3RyaW5nLCB2YWx1ZSBsaXN0IC0+IHZhbHVlKSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSAxMjhcblxuKCoqIEZvcndhcmQgcmVmcyBmb3IgY2FsbGluZyBTWCBmdW5jdGlvbnMgZnJvbSBwcmltaXRpdmVzIChicmVha3MgY3ljbGUpLiAqKVxubGV0IF9zeF9jYWxsX2ZuIDogKHZhbHVlIC0+IHZhbHVlIGxpc3QgLT4gdmFsdWUpIHJlZiA9XG4gIHJlZiAoZnVuIF8gXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN4X2NhbGwgbm90IGluaXRpYWxpemVkXCIpKVxubGV0IF9zeF90cmFtcG9saW5lX2ZuIDogKHZhbHVlIC0+IHZhbHVlKSByZWYgPVxuICByZWYgKGZ1biB2IC0+IHYpXG5sZXQgX2lzX2NsaWVudCA6IGJvb2wgcmVmID0gcmVmIGZhbHNlXG5cbmxldCByZWdpc3RlciBuYW1lIGZuID0gSGFzaHRibC5yZXBsYWNlIHByaW1pdGl2ZXMgbmFtZSBmblxuXG5sZXQgaXNfcHJpbWl0aXZlIG5hbWUgPSBIYXNodGJsLm1lbSBwcmltaXRpdmVzIG5hbWVcblxubGV0IGdldF9wcmltaXRpdmUgbmFtZSA9XG4gIG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgfCBTb21lIGZuIC0+IE5hdGl2ZUZuIChuYW1lLCBmbilcbiAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlVua25vd24gcHJpbWl0aXZlOiBcIiBeIG5hbWUpKVxuXG4oKiAtLS0gSGVscGVycyAtLS0gKilcblxuKCogVHJhbXBvbGluZSBob29rIOKAlCBzZXQgYnkgc3hfcmVmIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyZWFrIGNpcmN1bGFyIGRlcCAqKVxubGV0IHRyYW1wb2xpbmVfaG9vayA6ICh2YWx1ZSAtPiB2YWx1ZSkgcmVmID0gcmVmIChmdW4gdiAtPiB2KVxuXG5sZXQgcmVjIGFzX251bWJlciA9IGZ1bmN0aW9uXG4gIHwgTnVtYmVyIG4gLT4gblxuICB8IEJvb2wgdHJ1ZSAtPiAxLjBcbiAgfCBCb29sIGZhbHNlIC0+IDAuMFxuICB8IE5pbCAtPiAwLjBcbiAgfCBTdHJpbmcgcyAtPiAobWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBzIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IEZsb2F0Lm5hbilcbiAgfCBUaHVuayBfIGFzIHQgLT5cbiAgICAoKiBUcmFtcG9saW5lIHRodW5rcyDigJQgdGhleSBzaG91bGRuJ3QgbGVhayBidXQgc29tZXRpbWVzIGRvICopXG4gICAgYXNfbnVtYmVyICghdHJhbXBvbGluZV9ob29rIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBudW1iZXIsIGdvdCBcIiBeIHR5cGVfb2YgdiBeIFwiOiBcIiBeIChtYXRjaCB2IHdpdGggRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX3NpZ25hbFwiIHdpdGggU29tZSBfIC0+IFwic2lnbmFse3ZhbHVlPVwiIF4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInZhbHVlXCIgd2l0aCBTb21lIHYnIC0+IHZhbHVlX3RvX3N0cmluZyB2JyB8IE5vbmUgLT4gXCI/XCIpIF4gXCJ9XCIgfCBOb25lIC0+IFwiZGljdFwiKSB8IF8gLT4gXCJcIikpKVxuXG5sZXQgYXNfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBzdHJpbmcsIGdvdCBcIiBeIHR5cGVfb2YgdikpXG5cbmxldCByZWMgYXNfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgTGlzdCBsIC0+IGxcbiAgfCBMaXN0UmVmIHIgLT4gIXJcbiAgfCBOaWwgLT4gW11cbiAgfCBUaHVuayBfIGFzIHQgLT4gYXNfbGlzdCAoIV9zeF90cmFtcG9saW5lX2ZuIHQpXG4gIHwgdiAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJFeHBlY3RlZCBsaXN0LCBnb3QgXCIgXiB0eXBlX29mIHYpKVxuXG5sZXQgYXNfYm9vbCA9IGZ1bmN0aW9uXG4gIHwgQm9vbCBiIC0+IGJcbiAgfCB2IC0+IHN4X3RydXRoeSB2XG5cbmxldCByZWMgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBTdHJpbmcgcyAtPiBzXG4gIHwgTnVtYmVyIG4gLT5cbiAgICBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbilcbiAgICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJWdcIiBuXG4gIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgfCBOaWwgLT4gXCJcIlxuICB8IFN5bWJvbCBzIC0+IHNcbiAgfCBLZXl3b3JkIGsgLT4ga1xuICB8IFRodW5rIF8gYXMgdCAtPiB0b19zdHJpbmcgKCF0cmFtcG9saW5lX2hvb2sgdClcbiAgfCBTeEV4cHIgcyAtPiBzXG4gIHwgUmF3SFRNTCBzIC0+IHNcbiAgfCB2IC0+IGluc3BlY3QgdlxuXG5sZXQgKCkgPVxuICAoKiA9PT0gQXJpdGhtZXRpYyA9PT0gKilcbiAgcmVnaXN0ZXIgXCIrXCIgKGZ1biBhcmdzIC0+XG4gICAgTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IGFjYyArLiBhc19udW1iZXIgYSkgMC4wIGFyZ3MpKTtcbiAgcmVnaXN0ZXIgXCItXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiBOdW1iZXIgMC4wXG4gICAgfCBbYV0gLT4gTnVtYmVyICgtLiAoYXNfbnVtYmVyIGEpKVxuICAgIHwgYSA6OiByZXN0IC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBhY2MgLS4gYXNfbnVtYmVyIHgpIChhc19udW1iZXIgYSkgcmVzdCkpO1xuICByZWdpc3RlciBcIipcIiAoZnVuIGFyZ3MgLT5cbiAgICBOdW1iZXIgKExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIGEgLT4gYWNjICouIGFzX251bWJlciBhKSAxLjAgYXJncykpO1xuICByZWdpc3RlciBcIi9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPiBOdW1iZXIgKGFzX251bWJlciBhIC8uIGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIi86IGV4cGVjdGVkIDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibW9kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gTnVtYmVyIChGbG9hdC5yZW0gKGFzX251bWJlciBhKSAoYXNfbnVtYmVyIGIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1vZDogZXhwZWN0ZWQgMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJpbmNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgKy4gMS4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJpbmM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkZWNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgLS4gMS4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkZWM6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJhYnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IE51bWJlciAoRmxvYXQuYWJzIChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImFiczogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImZsb29yXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKGZsb29yIChhc19udW1iZXIgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmxvb3I6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJjZWlsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBOdW1iZXIgKGNlaWwgKGFzX251bWJlciBhKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWlsOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicm91bmRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthXSAtPiBOdW1iZXIgKEZsb2F0LnJvdW5kIChhc19udW1iZXIgYSkpXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCBuID0gYXNfbnVtYmVyIGEgYW5kIHBsYWNlcyA9IGludF9vZl9mbG9hdCAoYXNfbnVtYmVyIGIpIGluXG4gICAgICBsZXQgZmFjdG9yID0gMTAuMCAqKiBmbG9hdF9vZl9pbnQgcGxhY2VzIGluXG4gICAgICBOdW1iZXIgKEZsb2F0LnJvdW5kIChuICouIGZhY3RvcikgLy4gZmFjdG9yKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJvdW5kOiAxLTIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibWluXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1pbjogYXQgbGVhc3QgMSBhcmdcIilcbiAgICB8IF8gLT4gTnVtYmVyIChMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBhIC0+IEZsb2F0Lm1pbiBhY2MgKGFzX251bWJlciBhKSkgRmxvYXQuaW5maW5pdHkgYXJncykpO1xuICByZWdpc3RlciBcIm1heFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYXg6IGF0IGxlYXN0IDEgYXJnXCIpXG4gICAgfCBfIC0+IE51bWJlciAoTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgYSAtPiBGbG9hdC5tYXggYWNjIChhc19udW1iZXIgYSkpIEZsb2F0Lm5lZ19pbmZpbml0eSBhcmdzKSk7XG4gIHJlZ2lzdGVyIFwic3FydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChGbG9hdC5zcXJ0IChhc19udW1iZXIgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNxcnQ6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJwb3dcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IE51bWJlciAoYXNfbnVtYmVyIGEgKiogYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicG93OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImNsYW1wXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbeDsgbG87IGhpXSAtPlxuICAgICAgbGV0IHggPSBhc19udW1iZXIgeCBhbmQgbG8gPSBhc19udW1iZXIgbG8gYW5kIGhpID0gYXNfbnVtYmVyIGhpIGluXG4gICAgICBOdW1iZXIgKEZsb2F0Lm1heCBsbyAoRmxvYXQubWluIGhpIHgpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNsYW1wOiAzIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInBhcnNlLWludFwiIChmdW4gYXJncyAtPlxuICAgIGxldCBwYXJzZV9sZWFkaW5nX2ludCBzID1cbiAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBzdGFydCA9IHJlZiAwIGluXG4gICAgICBsZXQgbmVnID0gbGVuID4gMCAmJiBzLlswXSA9ICctJyBpblxuICAgICAgaWYgbmVnIHRoZW4gc3RhcnQgOj0gMVxuICAgICAgZWxzZSBpZiBsZW4gPiAwICYmIHMuWzBdID0gJysnIHRoZW4gc3RhcnQgOj0gMTtcbiAgICAgIGxldCBqID0gcmVmICFzdGFydCBpblxuICAgICAgd2hpbGUgIWogPCBsZW4gJiYgcy5bIWpdID49ICcwJyAmJiBzLlshal0gPD0gJzknIGRvIGluY3IgaiBkb25lO1xuICAgICAgaWYgIWogPiAhc3RhcnQgdGhlblxuICAgICAgICBsZXQgbiA9IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgcyAhc3RhcnQgKCFqIC0gIXN0YXJ0KSkgaW5cbiAgICAgICAgU29tZSAoaWYgbmVnIHRoZW4gLW4gZWxzZSBuKVxuICAgICAgZWxzZSBOb25lXG4gICAgaW5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gKG1hdGNoIHBhcnNlX2xlYWRpbmdfaW50IHMgd2l0aCBTb21lIG4gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgbikgfCBOb25lIC0+IE5pbClcbiAgICB8IFtTdHJpbmcgczsgZGVmYXVsdF92YWxdIC0+XG4gICAgICAobWF0Y2ggcGFyc2VfbGVhZGluZ19pbnQgcyB3aXRoIFNvbWUgbiAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCBuKSB8IE5vbmUgLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoaW50X29mX2Zsb2F0IG4pKVxuICAgIHwgW187IGRlZmF1bHRfdmFsXSAtPiBkZWZhdWx0X3ZhbFxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcInBhcnNlLWZsb2F0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+IChtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgd2l0aCBTb21lIG4gLT4gTnVtYmVyIG4gfCBOb25lIC0+IE5pbClcbiAgICB8IFtOdW1iZXIgbl0gLT4gTnVtYmVyIG5cbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiA9PT0gQ29tcGFyaXNvbiA9PT0gKilcbiAgKCogU2FmZSBlcXVhbGl0eTogcGh5c2ljYWwgZXF1YWxpdHkgZm9yIHBvdGVudGlhbGx5LWNpcmN1bGFyIHR5cGVzXG4gICAgIChEaWN0LCBMYW1iZGEsIENvbXBvbmVudCwgSXNsYW5kLCBTaWduYWwsIE5hdGl2ZUZuKSxcbiAgICAgc3RydWN0dXJhbCBlcXVhbGl0eSBmb3IgYWN5Y2xpYyB0eXBlcyAoTnVtYmVyLCBTdHJpbmcsIEJvb2wsIGV0Yy4pLlxuICAgICBMaXN0cyBhcmUgY29tcGFyZWQgZWxlbWVudC13aXNlIHJlY3Vyc2l2ZWx5IHdpdGggdGhlIHNhbWUgc2FmZXR5LiAqKVxuICBsZXQgcmVjIHNhZmVfZXEgYSBiID1cbiAgICBpZiBhID09IGIgdGhlbiB0cnVlICAoKiBwaHlzaWNhbCBlcXVhbGl0eSBmYXN0IHBhdGggKilcbiAgICBlbHNlIG1hdGNoIGEsIGIgd2l0aFxuICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4geCA9IHlcbiAgICB8IEJvb2wgeCwgQm9vbCB5IC0+IHggPSB5XG4gICAgfCBOaWwsIE5pbCAtPiB0cnVlXG4gICAgfCBTeW1ib2wgeCwgU3ltYm9sIHkgLT4geCA9IHlcbiAgICB8IEtleXdvcmQgeCwgS2V5d29yZCB5IC0+IHggPSB5XG4gICAgfCAoTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH0pLFxuICAgICAgKExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9KSAtPlxuICAgICAgTGlzdC5sZW5ndGggbGEgPSBMaXN0Lmxlbmd0aCBsYiAmJlxuICAgICAgTGlzdC5mb3JfYWxsMiBzYWZlX2VxIGxhIGxiXG4gICAgKCogRGljdDogY2hlY2sgX19ob3N0X2hhbmRsZSBmb3IgRE9NIG5vZGUgaWRlbnRpdHkgKilcbiAgICB8IERpY3QgYSwgRGljdCBiIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBhIFwiX19ob3N0X2hhbmRsZVwiLCBIYXNodGJsLmZpbmRfb3B0IGIgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICAgIHwgU29tZSAoTnVtYmVyIGhhKSwgU29tZSAoTnVtYmVyIGhiKSAtPiBoYSA9IGhiXG4gICAgICAgfCBfIC0+IGZhbHNlKVxuICAgICgqIExhbWJkYS9Db21wb25lbnQvSXNsYW5kL1NpZ25hbC9OYXRpdmVGbjogcGh5c2ljYWwgb25seSAqKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICByZWdpc3RlciBcIj1cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPiBCb29sIChzYWZlX2VxIGEgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIiE9XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAobm90IChzYWZlX2VxIGEgYikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiIT06IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiPFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPCBhc19udW1iZXIgYilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCI8OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgYTsgU3RyaW5nIGJdIC0+IEJvb2wgKGEgPiBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhID4gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPjogMiBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCI8PVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBhOyBTdHJpbmcgYl0gLT4gQm9vbCAoYSA8PSBiKVxuICAgIHwgW2E7IGJdIC0+IEJvb2wgKGFzX251bWJlciBhIDw9IGFzX251bWJlciBiKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIjw9OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcIj49XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGE7IFN0cmluZyBiXSAtPiBCb29sIChhID49IGIpXG4gICAgfCBbYTsgYl0gLT4gQm9vbCAoYXNfbnVtYmVyIGEgPj0gYXNfbnVtYmVyIGIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiPj06IDIgYXJnc1wiKSk7XG5cbiAgKCogPT09IExvZ2ljID09PSAqKVxuICByZWdpc3RlciBcIm5vdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAobm90IChzeF90cnV0aHkgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm5vdDogMSBhcmdcIikpO1xuXG4gICgqID09PSBQcmVkaWNhdGVzID09PSAqKVxuICByZWdpc3RlciBcIm5pbD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGlzX25pbCBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJuaWw/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibnVtYmVyP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTnVtYmVyIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm51bWJlcj86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzdHJpbmc/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgX10gLT4gQm9vbCB0cnVlIHwgW19dIC0+IEJvb2wgZmFsc2UgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImJvb2xlYW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtCb29sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImJvb2xlYW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibGlzdD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJsaXN0PzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImRpY3Q/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Q/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3ltYm9sP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ltYm9sIF9dIC0+IEJvb2wgdHJ1ZSB8IFtfXSAtPiBCb29sIGZhbHNlIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN5bWJvbD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJrZXl3b3JkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbS2V5d29yZCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXl3b3JkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImVtcHR5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgW11dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IFtdIH1dIC0+IEJvb2wgdHJ1ZVxuICAgIHwgW0xpc3QgX10gfCBbTGlzdFJlZiBfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBbU3RyaW5nIFwiXCJdIC0+IEJvb2wgdHJ1ZSB8IFtTdHJpbmcgX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBbTmlsXSAtPiBCb29sIHRydWVcbiAgICB8IFtfXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW1wdHk/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwib2RkP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gQm9vbCAoaW50X29mX2Zsb2F0IChhc19udW1iZXIgYSkgbW9kIDIgPD4gMCkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwib2RkPzogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImV2ZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBCb29sIChpbnRfb2ZfZmxvYXQgKGFzX251bWJlciBhKSBtb2QgMiA9IDApIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImV2ZW4/OiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiemVybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IEJvb2wgKGFzX251bWJlciBhID0gMC4wKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ6ZXJvPzogMSBhcmdcIikpO1xuXG4gICgqID09PSBTdHJpbmdzID09PSAqKVxuICByZWdpc3RlciBcInN0clwiIChmdW4gYXJncyAtPiBTdHJpbmcgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgdG9fc3RyaW5nIGFyZ3MpKSk7XG4gIHJlZ2lzdGVyIFwidXBwZXJcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAoU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ1cHBlcjogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInVwY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVwY2FzZTogMSBhcmdcIikpO1xuICByZWdpc3RlciBcImxvd2VyXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthXSAtPiBTdHJpbmcgKFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgKGFzX3N0cmluZyBhKSkgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG93ZXI6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJkb3duY2FzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcubG93ZXJjYXNlX2FzY2lpIChhc19zdHJpbmcgYSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRvd25jYXNlOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwidHJpbVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChTdHJpbmcudHJpbSAoYXNfc3RyaW5nIGEpKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmltOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwic3RyaW5nLWxlbmd0aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFN0cmluZy5sZW5ndGggKGFzX3N0cmluZyBhKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3RyaW5nLWxlbmd0aDogMSBhcmdcIikpO1xuICByZWdpc3RlciBcInN0cmluZy1jb250YWlucz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgaGF5c3RhY2s7IFN0cmluZyBuZWVkbGVdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIG5lZWRsZSA+IFN0cmluZy5sZW5ndGggaGF5c3RhY2sgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGlmIFN0cmluZy5zdWIgaGF5c3RhY2sgaSAoU3RyaW5nLmxlbmd0aCBuZWVkbGUpID0gbmVlZGxlIHRoZW4gdHJ1ZVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gQm9vbCAoZmluZCAwKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0cmluZy1jb250YWlucz86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN0YXJ0cy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgcHJlZml4XSAtPlxuICAgICAgQm9vbCAoU3RyaW5nLmxlbmd0aCBzID49IFN0cmluZy5sZW5ndGggcHJlZml4ICYmXG4gICAgICAgICAgICBTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBwcmVmaXgpID0gcHJlZml4KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN0YXJ0cy13aXRoPzogMiBzdHJpbmcgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiZW5kcy13aXRoP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBTdHJpbmcgc3VmZml4XSAtPlxuICAgICAgbGV0IHNsID0gU3RyaW5nLmxlbmd0aCBzIGFuZCB4bCA9IFN0cmluZy5sZW5ndGggc3VmZml4IGluXG4gICAgICBCb29sIChzbCA+PSB4bCAmJiBTdHJpbmcuc3ViIHMgKHNsIC0geGwpIHhsID0gc3VmZml4KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVuZHMtd2l0aD86IDIgc3RyaW5nIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImluZGV4LW9mXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIGhheXN0YWNrOyBTdHJpbmcgbmVlZGxlXSAtPlxuICAgICAgbGV0IG5sID0gU3RyaW5nLmxlbmd0aCBuZWVkbGUgYW5kIGhsID0gU3RyaW5nLmxlbmd0aCBoYXlzdGFjayBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPVxuICAgICAgICBpZiBpICsgbmwgPiBobCB0aGVuIE51bWJlciAoLTEuMClcbiAgICAgICAgZWxzZSBpZiBTdHJpbmcuc3ViIGhheXN0YWNrIGkgbmwgPSBuZWVkbGUgdGhlbiBOdW1iZXIgKGZsb2F0X29mX2ludCBpKVxuICAgICAgICBlbHNlIGZpbmQgKGkgKyAxKVxuICAgICAgaW4gZmluZCAwXG4gICAgfCBbTGlzdCBpdGVtczsgdGFyZ2V0XSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9OyB0YXJnZXRdIC0+XG4gICAgICBsZXQgZXEgYSBiID0gbWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IHggPSB5IHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgICAgIHwgU3ltYm9sIHgsIFN5bWJvbCB5IC0+IHggPSB5IHwgS2V5d29yZCB4LCBLZXl3b3JkIHkgLT4geCA9IHlcbiAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geSB8IE5pbCwgTmlsIC0+IHRydWUgfCBfIC0+IGEgPT0gYiBpblxuICAgICAgbGV0IHJlYyBmaW5kIGkgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IGggOjogXyB3aGVuIGVxIGggdGFyZ2V0IC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpXG4gICAgICAgIHwgXyA6OiB0bCAtPiBmaW5kIChpICsgMSkgdGxcbiAgICAgIGluIGZpbmQgMCBpdGVtc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluZGV4LW9mOiAyIHN0cmluZyBhcmdzIG9yIGxpc3QrdGFyZ2V0XCIpKTtcbiAgcmVnaXN0ZXIgXCJzdWJzdHJpbmdcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIHN0YXJ0OyBOdW1iZXIgZW5kX10gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IHN0YXJ0IGFuZCBqID0gaW50X29mX2Zsb2F0IGVuZF8gaW5cbiAgICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIGxldCBpID0gbWF4IDAgKG1pbiBpIGxlbikgYW5kIGogPSBtYXggMCAobWluIGogbGVuKSBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKGogLSBpKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3Vic3RyaW5nOiAzIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInN1YnN0clwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzOyBOdW1iZXIgc3RhcnQ7IE51bWJlciBsZW5dIC0+XG4gICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBzdGFydCBhbmQgbiA9IGludF9vZl9mbG9hdCBsZW4gaW5cbiAgICAgIGxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGkgPSBtYXggMCAobWluIGkgc2wpIGluXG4gICAgICBsZXQgbiA9IG1heCAwIChtaW4gbiAoc2wgLSBpKSkgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgbilcbiAgICB8IFtTdHJpbmcgczsgTnVtYmVyIHN0YXJ0XSAtPlxuICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgc3RhcnQgaW5cbiAgICAgIGxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGkgPSBtYXggMCAobWluIGkgc2wpIGluXG4gICAgICBTdHJpbmcgKFN0cmluZy5zdWIgcyBpIChzbCAtIGkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInN1YnN0cjogMi0zIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInNwbGl0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHM7IFN0cmluZyBzZXBdIC0+XG4gICAgICBMaXN0IChMaXN0Lm1hcCAoZnVuIHAgLT4gU3RyaW5nIHApIChTdHJpbmcuc3BsaXRfb25fY2hhciBzZXAuWzBdIHMpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNwbGl0OiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcImpvaW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc2VwOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgU3RyaW5nIChTdHJpbmcuY29uY2F0IHNlcCAoTGlzdC5tYXAgdG9fc3RyaW5nIGl0ZW1zKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJqb2luOiAyIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInJlcGxhY2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgdG9fc3RyID0gZnVuY3Rpb25cbiAgICAgIHwgU3RyaW5nIHMgLT4gcyB8IFN4RXhwciBzIC0+IHMgfCBSYXdIVE1MIHMgLT4gc1xuICAgICAgfCBLZXl3b3JkIGsgLT4gayB8IFN5bWJvbCBzIC0+IHNcbiAgICAgIHwgTmlsIC0+IFwiXCIgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCIgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICAgICAgfCBOdW1iZXIgbiAtPiBpZiBGbG9hdC5pc19pbnRlZ2VyIG4gdGhlbiBzdHJpbmdfb2ZfaW50IChpbnRfb2ZfZmxvYXQgbikgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVnXCIgblxuICAgICAgfCBUaHVuayBfIGFzIHQgLT4gKG1hdGNoICFfc3hfdHJhbXBvbGluZV9mbiB0IHdpdGggU3RyaW5nIHMgLT4gcyB8IHYgLT4gdG9fc3RyaW5nIHYpXG4gICAgICB8IHYgLT4gdG9fc3RyaW5nIHZcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW3M7IG9sZF9zOyBuZXdfc10gLT5cbiAgICAgIGxldCBzID0gdG9fc3RyIHMgYW5kIG9sZF9zID0gdG9fc3RyIG9sZF9zIGFuZCBuZXdfcyA9IHRvX3N0ciBuZXdfcyBpblxuICAgICAgbGV0IG9sID0gU3RyaW5nLmxlbmd0aCBvbGRfcyBpblxuICAgICAgaWYgb2wgPSAwIHRoZW4gU3RyaW5nIHNcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICAgICAgbGV0IHJlYyBnbyBpID1cbiAgICAgICAgICBpZiBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuICgpXG4gICAgICAgICAgZWxzZSBpZiBpICsgb2wgPD0gU3RyaW5nLmxlbmd0aCBzICYmIFN0cmluZy5zdWIgcyBpIG9sID0gb2xkX3MgdGhlbiBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIG5ld19zO1xuICAgICAgICAgICAgZ28gKGkgKyBvbClcbiAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLltpXTtcbiAgICAgICAgICAgIGdvIChpICsgMSlcbiAgICAgICAgICBlbmRcbiAgICAgICAgaW4gZ28gMDtcbiAgICAgICAgU3RyaW5nIChCdWZmZXIuY29udGVudHMgYnVmKVxuICAgICAgZW5kXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVwbGFjZTogMyBzdHJpbmcgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwiY2hhci1mcm9tLWNvZGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDQgaW5cbiAgICAgIEJ1ZmZlci5hZGRfdXRmXzhfdWNoYXIgYnVmIChVY2hhci5vZl9pbnQgKGludF9vZl9mbG9hdCBuKSk7XG4gICAgICBTdHJpbmcgKEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2hhci1mcm9tLWNvZGU6IDEgYXJnXCIpKTtcblxuICAoKiA9PT0gQ29sbGVjdGlvbnMgPT09ICopXG4gIHJlZ2lzdGVyIFwibGlzdFwiIChmdW4gYXJncyAtPiBMaXN0UmVmIChyZWYgYXJncykpO1xuICByZWdpc3RlciBcImxlblwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbCkpXG4gICAgfCBbU3RyaW5nIHNdIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgIHwgW0RpY3QgZF0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKEhhc2h0YmwubGVuZ3RoIGQpKVxuICAgIHwgW05pbF0gfCBbQm9vbCBmYWxzZV0gLT4gTnVtYmVyIDAuMFxuICAgIHwgW0Jvb2wgdHJ1ZV0gLT4gTnVtYmVyIDEuMFxuICAgIHwgW051bWJlciBfXSAtPiBOdW1iZXIgMS4wXG4gICAgfCBbUmF3SFRNTCBzXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSlcbiAgICB8IFtTeEV4cHIgc10gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpXG4gICAgfCBbU3ByZWFkIHBhaXJzXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggcGFpcnMpKVxuICAgIHwgW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gfCBbTGFtYmRhIF9dIHwgW05hdGl2ZUZuIF9dXG4gICAgfCBbTWFjcm8gX10gfCBbVGh1bmsgX10gfCBbS2V5d29yZCBfXSB8IFtTeW1ib2wgX10gLT4gTnVtYmVyIDAuMFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJsZW46ICVkIGFyZ3NcIlxuICAgICAgICAoTGlzdC5sZW5ndGggYXJncykpKSk7XG4gIHJlZ2lzdGVyIFwibGVuZ3RoXCIgKEhhc2h0YmwuZmluZCBwcmltaXRpdmVzIFwibGVuXCIpO1xuICByZWdpc3RlciBcImZpcnN0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCAoeCA6OiBfKV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH1dIC0+IHhcbiAgICB8IFtMaXN0IFtdXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9XSAtPiBOaWwgfCBbTmlsXSAtPiBOaWxcbiAgICB8IFt4XSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJmaXJzdDogZXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gaW5zcGVjdCB4KSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJmaXJzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwicmVzdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgKF8gOjogeHMpXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBfIDo6IHhzIH1dIC0+IExpc3QgeHNcbiAgICB8IFtMaXN0IFtdXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBbXSB9XSAtPiBMaXN0IFtdIHwgW05pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInJlc3Q6IDEgbGlzdCBhcmdcIikpO1xuICByZWdpc3RlciBcImxhc3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT5cbiAgICAgIChtYXRjaCBMaXN0LnJldiBsIHdpdGggeCA6OiBfIC0+IHggfCBbXSAtPiBOaWwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibGFzdDogMSBsaXN0IGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5pdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbF0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9XSAtPlxuICAgICAgKG1hdGNoIExpc3QucmV2IGwgd2l0aCBfIDo6IHJlc3QgLT4gTGlzdCAoTGlzdC5yZXYgcmVzdCkgfCBbXSAtPiBMaXN0IFtdKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluaXQ6IDEgbGlzdCBhcmdcIikpO1xuICByZWdpc3RlciBcIm50aFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbDsgTnVtYmVyIG5dIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfTsgTnVtYmVyIG5dIC0+XG4gICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBuKSB3aXRoIF8gLT4gTmlsKVxuICAgIHwgW1N0cmluZyBzOyBOdW1iZXIgbl0gLT5cbiAgICAgIGxldCBpID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGlmIGkgPj0gMCAmJiBpIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW4gU3RyaW5nIChTdHJpbmcubWFrZSAxIHMuW2ldKVxuICAgICAgZWxzZSBOaWxcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJudGg6IGxpc3Qvc3RyaW5nIGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcImNvbnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt4OyBMaXN0IGxdIHwgW3g7IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoeCA6OiBsKVxuICAgIHwgW3g7IE5pbF0gLT4gTGlzdCBbeF1cbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb25zOiB2YWx1ZSBhbmQgbGlzdFwiKSk7XG4gIHJlZ2lzdGVyIFwiYXBwZW5kXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGxhIH07IExpc3QgbGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYiB9XSAtPlxuICAgICAgTGlzdCAobGEgQCBsYilcbiAgICB8IFtMaXN0IGxhIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGEgfTsgTmlsXSAtPiBMaXN0IGxhXG4gICAgfCBbTmlsOyBMaXN0IGxiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGIgfV0gLT4gTGlzdCBsYlxuICAgIHwgW0xpc3QgbGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsYSB9OyB2XSAtPiBMaXN0IChsYSBAIFt2XSlcbiAgICB8IFt2OyBMaXN0IGxiIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbGIgfV0gLT4gTGlzdCAoW3ZdIEAgbGIpXG4gICAgfCBfIC0+XG4gICAgICBsZXQgYWxsID0gTGlzdC5jb25jYXRfbWFwIGFzX2xpc3QgYXJncyBpblxuICAgICAgTGlzdCBhbGwpO1xuICByZWdpc3RlciBcInJldmVyc2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGxdIHwgW0xpc3RSZWYgeyBjb250ZW50cyA9IGwgfV0gLT4gTGlzdCAoTGlzdC5yZXYgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyZXZlcnNlOiAxIGxpc3RcIikpO1xuICByZWdpc3RlciBcImZsYXR0ZW5cIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgcmVjIGZsYXQgPSBmdW5jdGlvblxuICAgICAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPiBMaXN0LmNvbmNhdF9tYXAgZmxhdCBpdGVtc1xuICAgICAgfCB4IC0+IFt4XVxuICAgIGluXG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IExpc3QgKExpc3QuY29uY2F0X21hcCBmbGF0IGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZmxhdHRlbjogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJjb25jYXRcIiAoZnVuIGFyZ3MgLT4gTGlzdCAoTGlzdC5jb25jYXRfbWFwIGFzX2xpc3QgYXJncykpO1xuICByZWdpc3RlciBcImNvbnRhaW5zP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3QgbDsgaXRlbV0gfCBbTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9OyBpdGVtXSAtPlxuICAgICAgKCogUGh5c2ljYWwgZXF1YWxpdHkgZmlyc3QgKGhhbmRsZXMgc2lnbmFscy9kaWN0cy9jbG9zdXJlcyBzYWZlbHkpLFxuICAgICAgICAgc3RydWN0dXJhbCBmYWxsYmFjayBvbmx5IGZvciBhY3ljbGljIHR5cGVzIChzdHJpbmcvbnVtYmVyL2Jvb2wvbmlsL3N5bWJvbC9rZXl3b3JkKSAqKVxuICAgICAgbGV0IHNhZmVfZXEgYSBiID1cbiAgICAgICAgYSA9PSBiIHx8XG4gICAgICAgIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IHggPSB5XG4gICAgICAgICB8IFN0cmluZyB4LCBTdHJpbmcgeSAtPiB4ID0geVxuICAgICAgICAgfCBCb29sIHgsIEJvb2wgeSAtPiB4ID0geVxuICAgICAgICAgfCBOaWwsIE5pbCAtPiB0cnVlXG4gICAgICAgICB8IFN5bWJvbCB4LCBTeW1ib2wgeSAtPiB4ID0geVxuICAgICAgICAgfCBLZXl3b3JkIHgsIEtleXdvcmQgeSAtPiB4ID0geVxuICAgICAgICAgfCBEaWN0IGEsIERpY3QgYiAtPlxuICAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBhIFwiX19ob3N0X2hhbmRsZVwiLCBIYXNodGJsLmZpbmRfb3B0IGIgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgaGEpLCBTb21lIChOdW1iZXIgaGIpIC0+IGhhID0gaGJcbiAgICAgICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICAgICAgIHwgXyAtPiBmYWxzZSlcbiAgICAgIGluXG4gICAgICBCb29sIChMaXN0LmV4aXN0cyAoZnVuIHggLT4gc2FmZV9lcSB4IGl0ZW0pIGwpXG4gICAgfCBbU3RyaW5nIHM7IFN0cmluZyBzdWJdIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgaSA9XG4gICAgICAgIGlmIGkgKyBTdHJpbmcubGVuZ3RoIHN1YiA+IFN0cmluZy5sZW5ndGggcyB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgaWYgU3RyaW5nLnN1YiBzIGkgKFN0cmluZy5sZW5ndGggc3ViKSA9IHN1YiB0aGVuIHRydWVcbiAgICAgICAgZWxzZSBmaW5kIChpICsgMSlcbiAgICAgIGluIEJvb2wgKGZpbmQgMClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjb250YWlucz86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwicmFuZ2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtOdW1iZXIgc3RvcF0gLT5cbiAgICAgIGxldCBuID0gaW50X29mX2Zsb2F0IHN0b3AgaW5cbiAgICAgIExpc3QgKExpc3QuaW5pdCAobWF4IDAgbikgKGZ1biBpIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpKSlcbiAgICB8IFtOdW1iZXIgc3RhcnQ7IE51bWJlciBzdG9wXSAtPlxuICAgICAgbGV0IHMgPSBpbnRfb2ZfZmxvYXQgc3RhcnQgYW5kIGUgPSBpbnRfb2ZfZmxvYXQgc3RvcCBpblxuICAgICAgbGV0IGxlbiA9IG1heCAwIChlIC0gcykgaW5cbiAgICAgIExpc3QgKExpc3QuaW5pdCBsZW4gKGZ1biBpIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChzICsgaSkpKSlcbiAgICB8IFtOdW1iZXIgc3RhcnQ7IE51bWJlciBzdG9wOyBOdW1iZXIgc3RlcF0gLT5cbiAgICAgIGxldCBzID0gc3RhcnQgYW5kIGUgPSBzdG9wIGFuZCBzdCA9IHN0ZXAgaW5cbiAgICAgIGlmIHN0ID0gMC4wIHRoZW4gTGlzdCBbXVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgaXRlbXMgPSByZWYgW10gaW5cbiAgICAgICAgbGV0IGkgPSByZWYgcyBpblxuICAgICAgICBpZiBzdCA+IDAuMCB0aGVuXG4gICAgICAgICAgKHdoaWxlICFpIDwgZSBkbyBpdGVtcyA6PSBOdW1iZXIgIWkgOjogIWl0ZW1zOyBpIDo9ICFpICsuIHN0IGRvbmUpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAod2hpbGUgIWkgPiBlIGRvIGl0ZW1zIDo9IE51bWJlciAhaSA6OiAhaXRlbXM7IGkgOj0gIWkgKy4gc3QgZG9uZSk7XG4gICAgICAgIExpc3QgKExpc3QucmV2ICFpdGVtcylcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJyYW5nZTogMS0zIGFyZ3NcIikpO1xuICByZWdpc3RlciBcInNsaWNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IE51bWJlciBzdGFydF0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGludF9vZl9mbG9hdCBzdGFydCkgaW5cbiAgICAgIGxldCByZWMgZHJvcCBuID0gZnVuY3Rpb24gXyA6OiB4cyB3aGVuIG4gPiAwIC0+IGRyb3AgKG4tMSkgeHMgfCBsIC0+IGwgaW5cbiAgICAgIExpc3QgKGRyb3AgaSBsKVxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pOyBOdW1iZXIgc3RhcnQ7IE51bWJlciBlbmRfXSAtPlxuICAgICAgbGV0IGkgPSBtYXggMCAoaW50X29mX2Zsb2F0IHN0YXJ0KSBhbmQgaiA9IGludF9vZl9mbG9hdCBlbmRfIGluXG4gICAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgICAgbGV0IGogPSBtaW4gaiBsZW4gaW5cbiAgICAgIGxldCByZWMgdGFrZV9yYW5nZSBpZHggPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtdXG4gICAgICAgIHwgeCA6OiB4cyAtPlxuICAgICAgICAgIGlmIGlkeCA+PSBqIHRoZW4gW11cbiAgICAgICAgICBlbHNlIGlmIGlkeCA+PSBpIHRoZW4geCA6OiB0YWtlX3JhbmdlIChpZHgrMSkgeHNcbiAgICAgICAgICBlbHNlIHRha2VfcmFuZ2UgKGlkeCsxKSB4c1xuICAgICAgaW4gTGlzdCAodGFrZV9yYW5nZSAwIGwpXG4gICAgfCBbU3RyaW5nIHM7IE51bWJlciBzdGFydF0gLT5cbiAgICAgIGxldCBpID0gbWF4IDAgKGludF9vZl9mbG9hdCBzdGFydCkgaW5cbiAgICAgIFN0cmluZyAoU3RyaW5nLnN1YiBzIGkgKG1heCAwIChTdHJpbmcubGVuZ3RoIHMgLSBpKSkpXG4gICAgfCBbU3RyaW5nIHM7IE51bWJlciBzdGFydDsgTnVtYmVyIGVuZF9dIC0+XG4gICAgICBsZXQgaSA9IG1heCAwIChpbnRfb2ZfZmxvYXQgc3RhcnQpIGFuZCBqID0gaW50X29mX2Zsb2F0IGVuZF8gaW5cbiAgICAgIGxldCBzbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgbGV0IGogPSBtaW4gaiBzbCBpblxuICAgICAgU3RyaW5nIChTdHJpbmcuc3ViIHMgaSAobWF4IDAgKGogLSBpKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2xpY2U6IDItMyBhcmdzXCIpKTtcbiAgcmVnaXN0ZXIgXCJzb3J0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdCBsXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH1dIC0+IExpc3QgKExpc3Quc29ydCBjb21wYXJlIGwpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29ydDogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFthOyBiXSAtPlxuICAgICAgbGV0IGxhID0gYXNfbGlzdCBhIGFuZCBsYiA9IGFzX2xpc3QgYiBpblxuICAgICAgbGV0IHJlYyBnbyBsMSBsMiBhY2MgPSBtYXRjaCBsMSwgbDIgd2l0aFxuICAgICAgICB8IHggOjogeHMsIHkgOjogeXMgLT4gZ28geHMgeXMgKExpc3QgW3g7IHldIDo6IGFjYylcbiAgICAgICAgfCBfIC0+IExpc3QucmV2IGFjY1xuICAgICAgaW4gTGlzdCAoZ28gbGEgbGIgW10pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiemlwOiAyIGxpc3RzXCIpKTtcbiAgcmVnaXN0ZXIgXCJ6aXAtcGFpcnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPlxuICAgICAgbGV0IGwgPSBhc19saXN0IHYgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IGEgOjogYiA6OiByZXN0IC0+IExpc3QgW2E7IGJdIDo6IGdvIHJlc3RcbiAgICAgICAgfCBfIC0+IFtdXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInppcC1wYWlyczogMSBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJ0YWtlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbKExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSk7IE51bWJlciBuXSAtPlxuICAgICAgbGV0IHJlYyB0YWtlX24gaSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgeCA6OiB4cyB3aGVuIGkgPiAwIC0+IHggOjogdGFrZV9uIChpLTEpIHhzXG4gICAgICAgIHwgXyAtPiBbXVxuICAgICAgaW4gTGlzdCAodGFrZV9uIChpbnRfb2ZfZmxvYXQgbikgbClcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0YWtlOiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcImRyb3BcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgTnVtYmVyIG5dIC0+XG4gICAgICBsZXQgcmVjIGRyb3BfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgfCBfIDo6IHhzIHdoZW4gaSA+IDAgLT4gZHJvcF9uIChpLTEpIHhzXG4gICAgICAgIHwgbCAtPiBsXG4gICAgICBpbiBMaXN0IChkcm9wX24gKGludF9vZl9mbG9hdCBuKSBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRyb3A6IGxpc3QgYW5kIG51bWJlclwiKSk7XG4gIHJlZ2lzdGVyIFwiY2h1bmstZXZlcnlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFsoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KTsgTnVtYmVyIG5dIC0+XG4gICAgICBsZXQgc2l6ZSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbXVxuICAgICAgICB8IGwgLT5cbiAgICAgICAgICBsZXQgcmVjIHRha2VfbiBpID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgeCA6OiB4cyB3aGVuIGkgPiAwIC0+IHggOjogdGFrZV9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IF8gLT4gW11cbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCByZWMgZHJvcF9uIGkgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBfIDo6IHhzIHdoZW4gaSA+IDAgLT4gZHJvcF9uIChpLTEpIHhzXG4gICAgICAgICAgICB8IGwgLT4gbFxuICAgICAgICAgIGluXG4gICAgICAgICAgTGlzdCAodGFrZV9uIHNpemUgbCkgOjogZ28gKGRyb3BfbiBzaXplIGwpXG4gICAgICBpbiBMaXN0IChnbyBsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNodW5rLWV2ZXJ5OiBsaXN0IGFuZCBudW1iZXJcIikpO1xuICByZWdpc3RlciBcInVuaXF1ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgWyhMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pXSAtPlxuICAgICAgbGV0IHNlZW4gPSBIYXNodGJsLmNyZWF0ZSAxNiBpblxuICAgICAgbGV0IHJlc3VsdCA9IExpc3QuZmlsdGVyIChmdW4geCAtPlxuICAgICAgICBsZXQga2V5ID0gaW5zcGVjdCB4IGluXG4gICAgICAgIGlmIEhhc2h0YmwubWVtIHNlZW4ga2V5IHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSAoSGFzaHRibC5yZXBsYWNlIHNlZW4ga2V5IHRydWU7IHRydWUpXG4gICAgICApIGwgaW5cbiAgICAgIExpc3QgcmVzdWx0XG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidW5pcXVlOiAxIGxpc3RcIikpO1xuXG4gICgqID09PSBEaWN0ID09PSAqKVxuICByZWdpc3RlciBcImRpY3RcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBEaWN0IGRcbiAgICAgIHwgS2V5d29yZCBrIDo6IHYgOjogcmVzdCAtPiBkaWN0X3NldCBkIGsgdjsgZ28gcmVzdFxuICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gZGljdF9zZXQgZCBrIHY7IGdvIHJlc3RcbiAgICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Q6IHBhaXJzIG9mIGtleSB2YWx1ZVwiKVxuICAgIGluIGdvIGFyZ3MpO1xuICByZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IFtMaXN0IGw7IE51bWJlciBuXSB8IFtMaXN0UmVmIHsgY29udGVudHMgPSBsIH07IE51bWJlciBuXSAtPlxuICAgICAgKHRyeSBMaXN0Lm50aCBsIChpbnRfb2ZfZmxvYXQgbikgd2l0aCBfIC0+IE5pbClcbiAgICB8IFtOaWw7IF9dIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgICB8IFtfOyBfXSAtPiBOaWwgICAgKCogdHlwZSBtaXNtYXRjaCDihpIgbmlsIChtYXRjaGVzIEpTL1B5dGhvbiBiZWhhdmlvcikgKilcbiAgICB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJoYXMta2V5P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IEJvb2wgKGRpY3RfaGFzIGQgaylcbiAgICB8IFtEaWN0IGQ7IEtleXdvcmQga10gLT4gQm9vbCAoZGljdF9oYXMgZCBrKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImhhcy1rZXk/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImFzc29jXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBEaWN0IGQgOjogcmVzdCAtPlxuICAgICAgbGV0IGQyID0gSGFzaHRibC5jb3B5IGQgaW5cbiAgICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IERpY3QgZDJcbiAgICAgICAgfCBTdHJpbmcgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IEtleXdvcmQgayA6OiB2IDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQyIGsgdjsgZ28gcmVzdFxuICAgICAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogcGFpcnNcIilcbiAgICAgIGluIGdvIHJlc3RcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhc3NvYzogZGljdCArIHBhaXJzXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaXNzb2NcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IERpY3QgZCA6OiBrZXlzIC0+XG4gICAgICBsZXQgZDIgPSBIYXNodGJsLmNvcHkgZCBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gayAtPiBIYXNodGJsLnJlbW92ZSBkMiAodG9fc3RyaW5nIGspKSBrZXlzO1xuICAgICAgRGljdCBkMlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpc3NvYzogZGljdCArIGtleXNcIikpO1xuICByZWdpc3RlciBcIm1lcmdlXCIgKGZ1biBhcmdzIC0+XG4gICAgbGV0IGQgPSBtYWtlX2RpY3QgKCkgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICB8IERpY3Qgc3JjIC0+IEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgZCBrIHYpIHNyY1xuICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWVyZ2U6IGFsbCBhcmdzIG11c3QgYmUgZGljdHNcIilcbiAgICApIGFyZ3M7XG4gICAgRGljdCBkKTtcbiAgcmVnaXN0ZXIgXCJrZXlzXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtEaWN0IGRdIC0+IExpc3QgKGRpY3Rfa2V5cyBkKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXlzOiAxIGRpY3RcIikpO1xuICByZWdpc3RlciBcInZhbHNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gTGlzdCAoZGljdF92YWxzIGQpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZhbHM6IDEgZGljdFwiKSk7XG4gIHJlZ2lzdGVyIFwibXV0YWJsZS1saXN0XCIgKGZ1biBfYXJncyAtPiBMaXN0UmVmIChyZWYgW10pKTtcbiAgcmVnaXN0ZXIgXCJzZXQtbnRoIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgTnVtYmVyIG47IHZdIC0+XG4gICAgICBsZXQgaSA9IGludF9vZl9mbG9hdCBuIGluXG4gICAgICBsZXQgbCA9ICFyIGluXG4gICAgICByIDo9IExpc3QubWFwaSAoZnVuIGogeCAtPiBpZiBqID0gaSB0aGVuIHYgZWxzZSB4KSBsO1xuICAgICAgTmlsXG4gICAgfCBbTGlzdCBfOyBfOyBfXSAtPlxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgXCJzZXQtbnRoITogbGlzdCBpcyBpbW11dGFibGUsIHVzZSBMaXN0UmVmXCIpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2V0LW50aCE6IGV4cGVjdGVkIChsaXN0IGlkeCB2YWwpXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrOyB2XSAtPiBkaWN0X3NldCBkIGsgdjsgdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRpY3Qtc2V0ITogZGljdCBrZXkgdmFsXCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZ2V0IGQga1xuICAgIHwgW0RpY3QgZDsgS2V5d29yZCBrXSAtPiBkaWN0X2dldCBkIGtcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJkaWN0LWdldDogZGljdCBhbmQga2V5XCIpKTtcbiAgcmVnaXN0ZXIgXCJkaWN0LWhhcz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGQ7IFN0cmluZyBrXSAtPiBCb29sIChkaWN0X2hhcyBkIGspXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1oYXM/OiBkaWN0IGFuZCBrZXlcIikpO1xuICByZWdpc3RlciBcImRpY3QtZGVsZXRlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZDsgU3RyaW5nIGtdIC0+IGRpY3RfZGVsZXRlIGQgazsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1kZWxldGUhOiBkaWN0IGFuZCBrZXlcIikpO1xuXG4gICgqID09PSBNaXNjID09PSAqKVxuICByZWdpc3RlciBcInR5cGUtb2ZcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW2FdIC0+IFN0cmluZyAodHlwZV9vZiBhKSB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0eXBlLW9mOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwiaW5zcGVjdFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbYV0gLT4gU3RyaW5nIChpbnNwZWN0IGEpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImluc3BlY3Q6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzZXJpYWxpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTeEV4cHIgc10gLT4gU3RyaW5nIHNcbiAgICB8IFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzXG4gICAgfCBbYV0gLT4gU3RyaW5nIChpbnNwZWN0IGEpICAoKiB1c2VkIGZvciBkZWR1cCBrZXlzIGluIGNvbXBpbGVyICopXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic2VyaWFsaXplOiAxIGFyZ1wiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1zeW1ib2xcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gU3ltYm9sIHNcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLXN5bWJvbDogZXhwZWN0ZWQgc3RyaW5nXCIpKTtcbiAgcmVnaXN0ZXIgXCJlcnJvclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIG1zZ10gLT4gcmFpc2UgKEV2YWxfZXJyb3IgbXNnKVxuICAgIHwgW2FdIC0+IHJhaXNlIChFdmFsX2Vycm9yICh0b19zdHJpbmcgYSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXJyb3I6IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJ0cnktY2F0Y2hcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt0cnlfZm47IGNhdGNoX2ZuXSAtPlxuICAgICAgKHRyeSAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiB0cnlfZm4gW10pXG4gICAgICAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgICAgICAgIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gY2F0Y2hfZm4gW1N0cmluZyBtc2ddKSlcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cnktY2F0Y2g6IGV4cGVjdGVkICh0cnktZm4gY2F0Y2gtZm4pXCIpKTtcbiAgKCogY2xpZW50PyDigJQgZmFsc2UgYnkgZGVmYXVsdCAoc2VydmVyKTsgc3hfYnJvd3Nlci5tbCBzZXRzIF9pc19jbGllbnQgOj0gdHJ1ZSAqKVxuICByZWdpc3RlciBcImNsaWVudD9cIiAoZnVuIF9hcmdzIC0+IEJvb2wgIV9pc19jbGllbnQpO1xuICAoKiBOYW1lZCBzdG9yZXMg4oCUIGdsb2JhbCBtdXRhYmxlIHJlZ2lzdHJ5LCBieXBhc3NlcyBlbnYgc2NvcGluZyBpc3N1ZXMgKilcbiAgbGV0IHN0b3JlX3JlZ2lzdHJ5IDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDE2IGluXG4gIHJlZ2lzdGVyIFwiZGVmLXN0b3JlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IGluaXRfZm5dIC0+XG4gICAgICBpZiBub3QgKEhhc2h0YmwubWVtIHN0b3JlX3JlZ2lzdHJ5IG5hbWUpIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHN0b3JlID0gIV9zeF90cmFtcG9saW5lX2ZuICghX3N4X2NhbGxfZm4gaW5pdF9mbiBbXSkgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHN0b3JlX3JlZ2lzdHJ5IG5hbWUgc3RvcmVcbiAgICAgIGVuZDtcbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHN0b3JlX3JlZ2lzdHJ5IG5hbWUgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImRlZi1zdG9yZTogZXhwZWN0ZWQgKG5hbWUgaW5pdC1mbilcIikpO1xuICByZWdpc3RlciBcInVzZS1zdG9yZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgc3RvcmVfcmVnaXN0cnkgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIHYgLT4gdlxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJTdG9yZSBub3QgZm91bmQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInVzZS1zdG9yZTogZXhwZWN0ZWQgKG5hbWUpXCIpKTtcbiAgcmVnaXN0ZXIgXCJjbGVhci1zdG9yZXNcIiAoZnVuIF9hcmdzIC0+IEhhc2h0YmwuY2xlYXIgc3RvcmVfcmVnaXN0cnk7IE5pbCk7XG4gICgqIFNTUiBzdHVicyDigJQgcmVzb3VyY2UgcmV0dXJucyBsb2FkaW5nIHN0YXRlIG9uIHNlcnZlci5cbiAgICAgTk9URTogZWZmZWN0IGFuZCByZWdpc3Rlci1pbi1zY29wZSBtdXN0IE5PVCBiZSByZWdpc3RlcmVkIGFzIHByaW1pdGl2ZXNcbiAgICAgaGVyZSDigJQgdGhlIGJ5dGVjb2RlIGNvbXBpbGVyIHVzZXMgcHJpbWl0aXZlPyB0byBkZWNpZGUgQ0FMTF9QUklNIHZzXG4gICAgIEdMT0JBTF9HRVQrQ0FMTC4gSWYgZWZmZWN0IGlzIGEgcHJpbWl0aXZlLCBieXRlY29kZWQgbW9kdWxlcyBlbWl0XG4gICAgIENBTExfUFJJTSB3aGljaCByZXR1cm5zIE5pbCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIHJlYWwgZWZmZWN0IGZ1bmN0aW9uXG4gICAgIGZyb20gY29yZS1zaWduYWxzLnN4LiBUaGUgc2VydmVyIG92ZXJyaWRlcyBlZmZlY3QgaW4gc3hfc2VydmVyLm1sIHZpYVxuICAgICBlbnZfYmluZCBBRlRFUiBjb21waWxhdGlvbi4gKilcbiAgKCogcmVnaXN0ZXIgXCJlZmZlY3RcIiDigJQgUkVNT1ZFRDogc2VlIG5vdGUgYWJvdmUgKilcbiAgKCogcmVnaXN0ZXIgXCJyZWdpc3Rlci1pbi1zY29wZVwiIOKAlCBSRU1PVkVEOiBzZWUgbm90ZSBhYm92ZSAqKVxuICAoKiByZXNvdXJjZSDigJQgU1NSIHN0dWI6IHJldHVybiBzaWduYWwgd2l0aCB7bG9hZGluZzogdHJ1ZX0sIGNsaWVudCBoeWRyYXRlcyByZWFsIGZldGNoICopXG4gIHJlZ2lzdGVyIFwicmVzb3VyY2VcIiAoZnVuIF9hcmdzIC0+XG4gICAgbGV0IHN0YXRlID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImxvYWRpbmdcIiAoQm9vbCB0cnVlKTtcbiAgICBIYXNodGJsLnJlcGxhY2Ugc3RhdGUgXCJkYXRhXCIgTmlsO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzdGF0ZSBcImVycm9yXCIgTmlsO1xuICAgIGxldCBzaWdfZCA9IEhhc2h0YmwuY3JlYXRlIDggaW5cbiAgICBIYXNodGJsLnJlcGxhY2Ugc2lnX2QgXCJfX3NpZ25hbFwiIChCb29sIHRydWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInZhbHVlXCIgKERpY3Qgc3RhdGUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcInN1YnNjcmliZXJzXCIgKExpc3QgW10pO1xuICAgIEhhc2h0YmwucmVwbGFjZSBzaWdfZCBcImRlcHNcIiAoTGlzdCBbXSk7XG4gICAgRGljdCBzaWdfZCk7XG4gIHJlZ2lzdGVyIFwiYXBwbHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBsZXQgY2FsbCBmIGEgPVxuICAgICAgbWF0Y2ggZiB3aXRoXG4gICAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYVxuICAgICAgfCBfIC0+ICFfc3hfdHJhbXBvbGluZV9mbiAoIV9zeF9jYWxsX2ZuIGYgYSlcbiAgICBpblxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0pXSAtPiBjYWxsIGYgYVxuICAgIHwgW2Y7IE5pbF0gLT4gY2FsbCBmIFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwbHk6IGZ1bmN0aW9uIGFuZCBsaXN0XCIpKTtcbiAgcmVnaXN0ZXIgXCJpZGVudGljYWw/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFthOyBiXSAtPiBCb29sIChhID09IGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImlkZW50aWNhbD86IDIgYXJnc1wiKSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1zcHJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtEaWN0IGRdIC0+XG4gICAgICBsZXQgcGFpcnMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IChrLCB2KSA6OiBhY2MpIGQgW10gaW5cbiAgICAgIFNwcmVhZCBwYWlyc1xuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3ByZWFkOiAxIGRpY3RcIikpO1xuICByZWdpc3RlciBcInNwcmVhZD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW1NwcmVhZCBfXSAtPiBCb29sIHRydWUgfCBbX10gLT4gQm9vbCBmYWxzZVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNwcmVhZD86IDEgYXJnXCIpKTtcbiAgcmVnaXN0ZXIgXCJzcHJlYWQtYXR0cnNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTcHJlYWQgcGFpcnNdIC0+XG4gICAgICBsZXQgZCA9IG1ha2VfZGljdCAoKSBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IGRpY3Rfc2V0IGQgayB2KSBwYWlycztcbiAgICAgIERpY3QgZFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInNwcmVhZC1hdHRyczogMSBzcHJlYWRcIikpO1xuXG4gICgqIEhpZ2hlci1vcmRlciBmb3JtcyBhcyBjYWxsYWJsZSBwcmltaXRpdmVzIOKAlCB1c2VkIGJ5IHRoZSBWTS5cbiAgICAgVGhlIENFSyBtYWNoaW5lIGhhbmRsZXMgdGhlc2UgYXMgc3BlY2lhbCBmb3JtcyB3aXRoIGRlZGljYXRlZCBmcmFtZXM7XG4gICAgIHRoZSBWTSBuZWVkcyB0aGVtIGFzIHBsYWluIGNhbGxhYmxlIHZhbHVlcy4gKilcbiAgKCogQ2FsbCBhbnkgU1ggY2FsbGFibGUg4oCUIGhhbmRsZXMgTmF0aXZlRm4sIExhbWJkYSAodmlhIHRyYW1wb2xpbmUpLCBWTSBjbG9zdXJlcyAqKVxuICBsZXQgY2FsbF9hbnkgZiBhcmdzID1cbiAgICBtYXRjaCBmIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJnc1xuICAgIHwgXyAtPiAhX3N4X3RyYW1wb2xpbmVfZm4gKCFfc3hfY2FsbF9mbiBmIGFyZ3MpXG4gIGluXG4gIHJlZ2lzdGVyIFwibWFwXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QubWFwIChmdW4geCAtPiBjYWxsX2FueSBmIFt4XSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBMaXN0IFtdXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcIm1hcC1pbmRleGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZjsgKExpc3QgaXRlbXMgfCBMaXN0UmVmIHsgY29udGVudHMgPSBpdGVtcyB9KV0gLT5cbiAgICAgIExpc3QgKExpc3QubWFwaSAoZnVuIGkgeCAtPiBjYWxsX2FueSBmIFtOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgeF0pIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1hcC1pbmRleGVkOiBleHBlY3RlZCAoZm4gbGlzdClcIikpO1xuICByZWdpc3RlciBcImZpbHRlclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4gc3hfdHJ1dGh5IChjYWxsX2FueSBmIFt4XSkpIGl0ZW1zKVxuICAgIHwgW187IE5pbF0gLT4gTGlzdCBbXVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZpbHRlcjogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJmb3ItZWFjaFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGlnbm9yZSAoY2FsbF9hbnkgZiBbeF0pKSBpdGVtczsgTmlsXG4gICAgfCBbXzsgTmlsXSAtPiBOaWwgICgqIG5pbCBjb2xsZWN0aW9uID0gbm8tb3AgKilcbiAgICB8IF8gLT5cbiAgICAgIGxldCB0eXBlcyA9IFN0cmluZy5jb25jYXQgXCIsIFwiIChMaXN0Lm1hcCAoZnVuIHYgLT4gdHlwZV9vZiB2KSBhcmdzKSBpblxuICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiZm9yLWVhY2g6IGV4cGVjdGVkIChmbiBsaXN0KSwgZ290ICglcykgJWQgYXJnc1wiIHR5cGVzIChMaXN0Lmxlbmd0aCBhcmdzKSkpKTtcbiAgcmVnaXN0ZXIgXCJyZWR1Y2VcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyBpbml0OyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBjYWxsX2FueSBmIFthY2M7IHhdKSBpbml0IGl0ZW1zXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicmVkdWNlOiBleHBlY3RlZCAoZm4gaW5pdCBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwic29tZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IEJvb2wgZmFsc2VcbiAgICAgICAgfCB4IDo6IHJlc3QgLT5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FsbF9hbnkgZiBbeF0gaW5cbiAgICAgICAgICBpZiBzeF90cnV0aHkgcmVzdWx0IHRoZW4gcmVzdWx0IGVsc2UgZmluZCByZXN0XG4gICAgICBpbiBmaW5kIGl0ZW1zXG4gICAgfCBbXzsgTmlsXSAtPiBCb29sIGZhbHNlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic29tZTogZXhwZWN0ZWQgKGZuIGxpc3QpXCIpKTtcbiAgcmVnaXN0ZXIgXCJldmVyeT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtmOyAoTGlzdCBpdGVtcyB8IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pXSAtPlxuICAgICAgQm9vbCAoTGlzdC5mb3JfYWxsIChmdW4geCAtPiBzeF90cnV0aHkgKGNhbGxfYW55IGYgW3hdKSkgaXRlbXMpXG4gICAgfCBbXzsgTmlsXSAtPiBCb29sIHRydWVcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJldmVyeT86IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG5cbiAgKCogLS0tLSBWTSBzdGFjayBwcmltaXRpdmVzICh2bS5zeCBwbGF0Zm9ybSBpbnRlcmZhY2UpIC0tLS0gKilcbiAgcmVnaXN0ZXIgXCJtYWtlLXZtLXN0YWNrXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTnVtYmVyIG5dIC0+IExpc3RSZWYgKHJlZiAoTGlzdC5pbml0IChpbnRfb2ZfZmxvYXQgbikgKGZ1biBfIC0+IE5pbCkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utdm0tc3RhY2s6IGV4cGVjdGVkIChzaXplKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stZ2V0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyBOdW1iZXIgbl0gLT4gTGlzdC5udGggIXIgKGludF9vZl9mbG9hdCBuKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWdldDogZXhwZWN0ZWQgKHN0YWNrIGlkeClcIikpO1xuICByZWdpc3RlciBcInZtLXN0YWNrLXNldCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHI7IE51bWJlciBuOyB2XSAtPlxuICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgbiBpblxuICAgICAgciA6PSBMaXN0Lm1hcGkgKGZ1biBqIHggLT4gaWYgaiA9IGkgdGhlbiB2IGVsc2UgeCkgIXI7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLXNldCE6IGV4cGVjdGVkIChzdGFjayBpZHggdmFsKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stbGVuZ3RoXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByXSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggIXIpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInZtLXN0YWNrLWxlbmd0aDogZXhwZWN0ZWQgKHN0YWNrKVwiKSk7XG4gIHJlZ2lzdGVyIFwidm0tc3RhY2stY29weSFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0UmVmIHNyYzsgTGlzdFJlZiBkc3Q7IE51bWJlciBuXSAtPlxuICAgICAgbGV0IGNvdW50ID0gaW50X29mX2Zsb2F0IG4gaW5cbiAgICAgIGxldCBzcmNfaXRlbXMgPSAhc3JjIGluXG4gICAgICBkc3QgOj0gTGlzdC5tYXBpIChmdW4gaSB4IC0+IGlmIGkgPCBjb3VudCB0aGVuIExpc3QubnRoIHNyY19pdGVtcyBpIGVsc2UgeCkgIWRzdDsgTmlsXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidm0tc3RhY2stY29weSE6IGV4cGVjdGVkIChzcmMgZHN0IGNvdW50KVwiKSk7XG4gIHJlZ2lzdGVyIFwicHJpbWl0aXZlP1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPiBCb29sIChIYXNodGJsLm1lbSBwcmltaXRpdmVzIG5hbWUpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuXG4gICgqIFNjb3BlIHN0YWNrIHByaW1pdGl2ZXMgYXJlIHJlZ2lzdGVyZWQgYnkgc3hfc2VydmVyLm1sIC8gcnVuX3Rlc3RzLm1sXG4gICAgIGJlY2F1c2UgdGhleSB1c2UgYSBzaGFyZWQgc2NvcGUgc3RhY2tzIHRhYmxlIHdpdGggY29sbGVjdCEvY29sbGVjdGVkLiAqKVxuXG4gICgqIC0tLS0gUHJlZGljYXRlcyBuZWVkZWQgYnkgYWRhcHRlci1odG1sLnN4IC0tLS0gKilcbiAgcmVnaXN0ZXIgXCJsYW1iZGE/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJpc2xhbmQ/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJpcy1lbHNlLWNsYXVzZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtLZXl3b3JkIFwiZWxzZVwiXSAtPiBCb29sIHRydWVcbiAgICB8IFtCb29sIHRydWVdIC0+IEJvb2wgdHJ1ZVxuICAgIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgcmVnaXN0ZXIgXCJjb25kLXNjaGVtZT9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IGNsYXVzZXNdIC0+XG4gICAgICBCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8IExpc3QgbCAtPiBMaXN0Lmxlbmd0aCBsID0gMlxuICAgICAgICB8IF8gLT4gZmFsc2UpIGNsYXVzZXMpXG4gICAgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICByZWdpc3RlciBcImNvbXBvbmVudD9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSAtPiBCb29sIHRydWUgfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWNsb3N1cmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gRW52IGMuY19jbG9zdXJlXG4gICAgfCBbSXNsYW5kIGldIC0+IEVudiBpLmlfY2xvc3VyZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1oYXMtY2hpbGRyZW4/XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IEJvb2wgYy5jX2hhc19jaGlsZHJlblxuICAgIHwgW0lzbGFuZCBpXSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW5cbiAgICB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LW5hbWVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gU3RyaW5nIGMuY19uYW1lXG4gICAgfCBbSXNsYW5kIGldIC0+IFN0cmluZyBpLmlfbmFtZVxuICAgIHwgXyAtPiBOaWwpO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1wYXJhbXNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtDb21wb25lbnQgY10gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBjLmNfcGFyYW1zKVxuICAgIHwgW0lzbGFuZCBpXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGkuaV9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImNvbXBvbmVudC1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IGMuY19ib2R5XG4gICAgfCBbSXNsYW5kIGldIC0+IGkuaV9ib2R5XG4gICAgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LWZpbGVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IGNvbXBvbmVudF9maWxlIHYgfCBfIC0+IE5pbCk7XG4gIHJlZ2lzdGVyIFwiY29tcG9uZW50LXNldC1maWxlIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdjsgZl0gLT4gY29tcG9uZW50X3NldF9maWxlIHYgZiB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW01hY3JvIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIHJlZ2lzdGVyIFwiZm9yLWVhY2gtaW5kZXhlZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IChMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSldIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoY2FsbF9hbnkgZiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgaXRlbXM7IE5pbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImZvci1lYWNoLWluZGV4ZWQ6IGV4cGVjdGVkIChmbiBsaXN0KVwiKSk7XG4gIHJlZ2lzdGVyIFwibGFtYmRhLXBhcmFtc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xhbWJkYSBsXSAtPiBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIGwubF9wYXJhbXMpXG4gICAgfCBfIC0+IExpc3QgW10pO1xuICByZWdpc3RlciBcImxhbWJkYS1ib2R5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gICgqIGV4cGFuZC1tYWNybyBpcyByZWdpc3RlcmVkIGxhdGVyIGJ5IHJ1bl90ZXN0cy5tbCAvIHN4X3NlcnZlci5tbFxuICAgICBiZWNhdXNlIGl0IG5lZWRzIGV2YWxfZXhwciB3aGljaCBjcmVhdGVzIGEgZGVwZW5kZW5jeSBjeWNsZSAqKTtcbiAgcmVnaXN0ZXIgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApXG4gICAgfCBfIC0+IEJvb2wgdHJ1ZSk7XG4gIHJlZ2lzdGVyIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFJhd0hUTUwgcyB8IF8gLT4gTmlsKTtcbiAgcmVnaXN0ZXIgXCJyYXctaHRtbC1jb250ZW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtSYXdIVE1MIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIHJlZ2lzdGVyIFwiZ2V0LXByaW1pdGl2ZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgcHJpbWl0aXZlcyBuYW1lIHdpdGhcbiAgICAgICB8IFNvbWUgZm4gLT4gTmF0aXZlRm4gKG5hbWUsIGZuKVxuICAgICAgIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJWTSB1bmRlZmluZWQ6IFwiIF4gbmFtZSkpKVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lKVwiKSk7XG4gIHJlZ2lzdGVyIFwiY2FsbC1wcmltaXRpdmVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSldIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBwcmltaXRpdmVzIG5hbWUgd2l0aFxuICAgICAgIHwgU29tZSBmbiAtPiBmbiBhXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBbU3RyaW5nIG5hbWU7IE5pbF0gLT5cbiAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IHByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIGZuIC0+IGZuIFtdXG4gICAgICAgfCBOb25lIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2FsbC1wcmltaXRpdmU6IGV4cGVjdGVkIChuYW1lIGFyZ3MtbGlzdClcIikpO1xuICAoKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3JvdW5kX2Zsb2F0IiwiY2FtbF9zdHJpbmdfZ2V0IiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN0ZGxpYl9IYXNodGJsIiwiU3hfdHlwZXMiLCJTdGRsaWIiLCJTdGRsaWJfRmxvYXQiLCJTdGRsaWJfUHJpbnRmIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0J1ZmZlciIsIlN0ZGxpYl9VY2hhciIsInByaW1pdGl2ZXMiLCJzeF9jYWxsX2ZuIiwicGFyYW0iLCJzeF90cmFtcG9saW5lX2ZuIiwidiIsInJlZ2lzdGVyIiwibmFtZSIsImZuIiwiaXNfcHJpbWl0aXZlIiwiZ2V0X3ByaW1pdGl2ZSIsIm1hdGNoIiwidHJhbXBvbGluZV9ob29rIiwiY3N0IiwiY3N0X3NpZ25hbCIsImNzdF9kaWN0IiwiY3N0X3ZhbHVlIiwiYXNfbnVtYmVyIiwidCIsIm4iLCJzIiwiZCIsImFzX3N0cmluZyIsImFzX2xpc3QiLCJsIiwiciIsImFzX2Jvb2wiLCJiIiwiY3N0X2ciLCJjc3RfZmFsc2UiLCJjc3RfdHJ1ZSIsInRvX3N0cmluZyIsImFyZ3MiLCJhY2MiLCJhIiwicmVzdCIsIngiLCJwbGFjZXMiLCJmYWN0b3IiLCJoaSIsImxvIiwicGFyc2VfbGVhZGluZ19pbnQiLCJsZW4iLCJuZWciLCJzdGFydCIsImoiLCJkZWZhdWx0X3ZhbCIsImNzdF9ob3N0X2hhbmRsZSIsInNhZmVfZXEiLCJ5IiwibGEiLCJoYiIsImhhIiwibGIiLCJuZWVkbGUiLCJoYXlzdGFjayIsImkiLCJwcmVmaXgiLCJzdWZmaXgiLCJzbCIsInhsIiwibmwiLCJobCIsInRhcmdldCIsIml0ZW1zIiwiaCIsInRsIiwiZW5kIiwic2VwIiwicCIsInRvX3N0ciIsIm5ld19zIiwib2xkX3MiLCJvbCIsImJ1ZiIsImNzdF9hcmdzIiwiY3N0X2xlbiIsInBhaXJzIiwieHMiLCJleG4iLCJhbGwiLCJmbGF0Iiwic3ViIiwiaXRlbSIsInN0b3AiLCJlIiwic3RlcCIsInRha2VfcmFuZ2UiLCJpZHgiLCJsMSIsImwyIiwieXMiLCJnbyIsInRha2VfbiIsInNpemUiLCJzZWVuIiwicmVzdWx0Iiwia2V5IiwiayIsImQyIiwia2V5cyIsInNyYyIsImNzdF9lcnJvciIsIm1zZyIsImNhdGNoX2ZuIiwidHJ5X2ZuIiwiaXNfY2xpZW50Iiwic3RvcmVfcmVnaXN0cnkiLCJpbml0X2ZuIiwic3RvcmUiLCJzdGF0ZSIsInNpZ19kIiwiY2FsbCIsImNhbGxfYW55IiwidHlwZXMiLCJpbml0IiwiZHN0IiwiY291bnQiLCJzcmNfaXRlbXMiLCJjbGF1c2VzIiwiYyIsImNzdF9WTV91bmRlZmluZWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFB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QUFBQSxHQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEMzdCMUUiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjoyOTQ0NiwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBSdW50aW1lIGhlbHBlcnMgZm9yIHRyYW5zcGlsZWQgY29kZS5cblxuICAgIFRoZXNlIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIHRyYW5zcGlsZXIncyBvdXRwdXQgYW5kIHRoZVxuICAgIGZvdW5kYXRpb24gdHlwZXMvcHJpbWl0aXZlcy4gVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHRoZXNlXG4gICAgZnVuY3Rpb25zIGRpcmVjdGx5LiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBDYWxsIGEgcmVnaXN0ZXJlZCBwcmltaXRpdmUgYnkgbmFtZS4gKilcbmxldCBwcmltX2NhbGwgbmFtZSBhcmdzID1cbiAgbWF0Y2ggSGFzaHRibC5maW5kX29wdCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgbmFtZSB3aXRoXG4gIHwgU29tZSBmIC0+IGYgYXJnc1xuICB8IE5vbmUgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiVW5rbm93biBwcmltaXRpdmU6IFwiIF4gbmFtZSkpXG5cbigqKiBDb252ZXJ0IGFueSBTWCB2YWx1ZSB0byBhbiBPQ2FtbCBzdHJpbmcgKGludGVybmFsKS4gKilcbmxldCB2YWx1ZV90b19zdHIgPSBmdW5jdGlvblxuICB8IFN0cmluZyBzIC0+IHNcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBCb29sIHRydWUgLT4gXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IFwiZmFsc2VcIlxuICB8IE5pbCAtPiBcIlwiXG4gIHwgU3ltYm9sIHMgLT4gc1xuICB8IEtleXdvcmQgayAtPiBrXG4gIHwgdiAtPiBpbnNwZWN0IHZcblxuKCoqIHN4X3RvX3N0cmluZyByZXR1cm5zIGEgdmFsdWUgKFN0cmluZykgZm9yIHRyYW5zcGlsZWQgY29kZS4gKilcbmxldCBzeF90b19zdHJpbmcgdiA9IFN0cmluZyAodmFsdWVfdG9fc3RyIHYpXG5cbigqKiBTdHJpbmcgY29uY2F0ZW5hdGlvbiBoZWxwZXIg4oCUIFtzeF9zdHJdIHRha2VzIGEgbGlzdCBvZiB2YWx1ZXMuICopXG5sZXQgc3hfc3RyIGFyZ3MgPVxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIHZhbHVlX3RvX3N0ciBhcmdzKVxuXG4oKiogQ29udmVydCBhIHZhbHVlIHRvIGEgbGlzdC4gKilcbmxldCBzeF90b19saXN0ID0gZnVuY3Rpb25cbiAgfCBMaXN0IGwgLT4gbFxuICB8IExpc3RSZWYgciAtPiAhclxuICB8IE5pbCAtPiBbXVxuICB8IHYgLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiRXhwZWN0ZWQgbGlzdCwgZ290IFwiIF4gdHlwZV9vZiB2KSlcblxuKCoqIENhbGwgYW4gU1ggY2FsbGFibGUgKGxhbWJkYSwgbmF0aXZlIGZuLCBjb250aW51YXRpb24pLiAqKVxubGV0IHN4X2NhbGwgZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgTmF0aXZlRm4gKF8sIGZuKSAtPiBmbiBhcmdzXG4gIHwgVm1DbG9zdXJlIGNsIC0+ICFTeF90eXBlcy5fdm1fY2FsbF9jbG9zdXJlX3JlZiBjbCBhcmdzXG4gIHwgTGFtYmRhIGwgLT5cbiAgICBsZXQgbG9jYWwgPSBTeF90eXBlcy5lbnZfZXh0ZW5kIGwubF9jbG9zdXJlIGluXG4gICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIGxvY2FsIHAgYSkpIGwubF9wYXJhbXMgYXJncztcbiAgICBUaHVuayAobC5sX2JvZHksIGxvY2FsKVxuICB8IENvbnRpbnVhdGlvbiAoaywgXykgLT5cbiAgICBrIChtYXRjaCBhcmdzIHdpdGggeCA6OiBfIC0+IHggfCBbXSAtPiBOaWwpXG4gIHwgXyAtPlxuICAgIGxldCBuYXJncyA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgICBsZXQgYXJnc19wcmV2aWV3ID0gaWYgbmFyZ3MgPSAwIHRoZW4gXCJcIiBlbHNlXG4gICAgICBsZXQgcyA9IFN0cmluZy5jb25jYXQgXCIsIFwiIChMaXN0Lm1hcCAoZnVuIGEgLT4gbGV0IHMgPSBpbnNwZWN0IGEgaW4gaWYgU3RyaW5nLmxlbmd0aCBzID4gNDAgdGhlbiBTdHJpbmcuc3ViIHMgMCA0MCBeIFwiLi5cIiBlbHNlIHMpIGFyZ3MpIGluXG4gICAgICBcIiB3aXRoIGFyZ3M9W1wiIF4gcyBeIFwiXVwiIGluXG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiTm90IGNhbGxhYmxlOiBcIiBeIGluc3BlY3QgZiBeIGFyZ3NfcHJldmlldykpXG5cbigqIEluaXRpYWxpemUgZm9yd2FyZCByZWYgc28gcHJpbWl0aXZlcyBjYW4gY2FsbCBTWCBmdW5jdGlvbnMgKilcbmxldCAoKSA9IFN4X3ByaW1pdGl2ZXMuX3N4X2NhbGxfZm4gOj0gc3hfY2FsbFxuKCogVHJhbXBvbGluZSByZWYgaXMgc2V0IGJ5IHN4X3JlZi5tbCBhZnRlciBpdCdzIGxvYWRlZCAqKVxuXG4oKiogQXBwbHkgYSBmdW5jdGlvbiB0byBhIGxpc3Qgb2YgYXJncy4gKilcbmxldCBzeF9hcHBseSBmIGFyZ3NfbGlzdCA9XG4gIHN4X2NhbGwgZiAoc3hfdG9fbGlzdCBhcmdzX2xpc3QpXG5cbigqKiBNdXRhYmxlIGFwcGVuZCDigJQgYWRkIGl0ZW0gdG8gYSBsaXN0IHJlZiBvciBhY2N1bXVsYXRvci5cbiAgICBJbiB0cmFuc3BpbGVkIGNvZGUsIGxpc3RzIHRoYXQgZ2V0IGFwcGVuZGVkIHRvIGFyZSBtdXRhYmxlIHJlZnMuICopXG5sZXQgc3hfYXBwZW5kX2IgbHN0IGl0ZW0gPVxuICBtYXRjaCBsc3Qgd2l0aFxuICB8IExpc3QgaXRlbXMgLT4gTGlzdCAoaXRlbXMgQCBbaXRlbV0pXG4gIHwgTGlzdFJlZiByIC0+IHIgOj0gIXIgQCBbaXRlbV07IGxzdCAgKCogbXV0YXRlIGluIHBsYWNlLCByZXR1cm4gc2FtZSByZWYgKilcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImFwcGVuZCE6IGV4cGVjdGVkIGxpc3QsIGdvdCBcIiBeIHR5cGVfb2YgbHN0KSlcblxuKCoqIE11dGFibGUgZGljdC1zZXQg4oCUIHNldCBrZXkgaW4gZGljdCwgcmV0dXJuIHZhbHVlLiAqKVxubGV0IHN4X2RpY3Rfc2V0X2IgZCBrIHYgPVxuICBtYXRjaCBkLCBrIHdpdGhcbiAgfCBEaWN0IHRibCwgU3RyaW5nIGtleSAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGtleSB2OyB2XG4gIHwgRGljdCB0YmwsIEtleXdvcmQga2V5IC0+IEhhc2h0YmwucmVwbGFjZSB0Ymwga2V5IHY7IHZcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZGljdC1zZXQhOiBleHBlY3RlZCBkaWN0IGFuZCBzdHJpbmcga2V5XCIpXG5cbigqKiBHZXQgZnJvbSBkaWN0IG9yIGxpc3QuICopXG5sZXQgZ2V0X3ZhbCBjb250YWluZXIga2V5ID1cbiAgbWF0Y2ggY29udGFpbmVyLCBrZXkgd2l0aFxuICB8IENla1N0YXRlIHMsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwiY29udHJvbFwiIC0+IHMuY3NfY29udHJvbCB8IFwiZW52XCIgLT4gcy5jc19lbnZcbiAgICAgfCBcImtvbnRcIiAtPiBzLmNzX2tvbnQgfCBcInBoYXNlXCIgLT4gU3RyaW5nIHMuY3NfcGhhc2VcbiAgICAgfCBcInZhbHVlXCIgLT4gcy5jc192YWx1ZSB8IF8gLT4gTmlsKVxuICB8IENla0ZyYW1lIGYsIFN0cmluZyBrIC0+XG4gICAgKG1hdGNoIGsgd2l0aFxuICAgICB8IFwidHlwZVwiIC0+IFN0cmluZyBmLmNmX3R5cGUgfCBcImVudlwiIC0+IGYuY2ZfZW52XG4gICAgIHwgXCJuYW1lXCIgLT4gZi5jZl9uYW1lIHwgXCJib2R5XCIgLT4gZi5jZl9ib2R5XG4gICAgIHwgXCJyZW1haW5pbmdcIiAtPiBmLmNmX3JlbWFpbmluZyB8IFwiZlwiIC0+IGYuY2ZfZlxuICAgICB8IFwiYXJnc1wiIC0+IGYuY2ZfYXJncyB8IFwiZXZhbGVkXCIgLT4gZi5jZl9hcmdzXG4gICAgIHwgXCJyZXN1bHRzXCIgLT4gZi5jZl9yZXN1bHRzIHwgXCJyYXctYXJnc1wiIC0+IGYuY2ZfcmVzdWx0c1xuICAgICB8IFwidGhlblwiIC0+IGYuY2ZfYm9keSB8IFwiZWxzZVwiIC0+IGYuY2ZfbmFtZVxuICAgICB8IFwiaG8tdHlwZVwiIC0+IGYuY2ZfZXh0cmEgfCBcInNjaGVtZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcImluZGV4ZWRcIiAtPiBmLmNmX2V4dHJhIHwgXCJ2YWx1ZVwiIC0+IGYuY2ZfZXh0cmFcbiAgICAgfCBcInBoYXNlXCIgLT4gZi5jZl9leHRyYSB8IFwiaGFzLWVmZmVjdHNcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJtYXRjaC12YWxcIiAtPiBmLmNmX2V4dHJhIHwgXCJjdXJyZW50LWl0ZW1cIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJ1cGRhdGUtZm5cIiAtPiBmLmNmX2V4dHJhIHwgXCJoZWFkLW5hbWVcIiAtPiBmLmNmX2V4dHJhXG4gICAgIHwgXCJlbWl0dGVkXCIgLT4gZi5jZl9leHRyYTIgfCBcImVmZmVjdC1saXN0XCIgLT4gZi5jZl9leHRyYTJcbiAgICAgfCBcImZpcnN0LXJlbmRlclwiIC0+IGYuY2ZfZXh0cmEyIHwgXCJmaWxlXCIgLT4gZi5jZl9lbnZcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBEaWN0IGQsIFN0cmluZyBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IERpY3QgZCwgS2V5d29yZCBrIC0+IGRpY3RfZ2V0IGQga1xuICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgbiAtPlxuICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IG4pIHdpdGggXyAtPiBOaWwpXG4gIHwgTmlsLCBfIC0+IE5pbCAgKCogbmlsLmFueXRoaW5nIOKGkiBuaWwgKilcbiAgfCBfLCBfIC0+IE5pbCAgICAoKiB0eXBlIG1pc21hdGNoIOKGkiBuaWwgKG1hdGNoZXMgSlMvUHl0aG9uIGJlaGF2aW9yKSAqKVxuXG4oKiogUmVnaXN0ZXIgZ2V0IGFzIGEgcHJpbWl0aXZlIG92ZXJyaWRlIOKAlCB0cmFuc3BpbGVkIGNvZGUgY2FsbHMgKGdldCBkIGspLiAqKVxubGV0ICgpID1cbiAgU3hfcHJpbWl0aXZlcy5yZWdpc3RlciBcImdldFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2M7IGtdIC0+IGdldF92YWwgYyBrXG4gICAgfCBbYzsgazsgZGVmYXVsdF0gLT5cbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHYgPSBnZXRfdmFsIGMgayBpblxuICAgICAgICBpZiB2ID0gTmlsIHRoZW4gZGVmYXVsdCBlbHNlIHZcbiAgICAgIHdpdGggXyAtPiBkZWZhdWx0KVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImdldDogMi0zIGFyZ3NcIikpXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogUHJpbWl0aXZlIGFsaWFzZXMg4oCUIHRvcC1sZXZlbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRyYW5zcGlsZWQgY29kZSAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG4oKiogVGhlIHRyYW5zcGlsZWQgZXZhbHVhdG9yIGNhbGxzIHByaW1pdGl2ZXMgZGlyZWN0bHkgYnkgdGhlaXIgbWFuZ2xlZFxuICAgIE9DYW1sIG5hbWUuIFRoZXNlIGFsaWFzZXMgZGVsZWdhdGUgdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgc28gdGhlXG4gICAgdHJhbnNwaWxlZCBjb2RlIGNvbXBpbGVzIHdpdGhvdXQgbmVlZGluZyBbcHJpbV9jYWxsXSBldmVyeXdoZXJlLiAqKVxuXG5sZXQgX3ByaW0gbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIG5hbWUgd2l0aFxuICB8IFNvbWUgZiAtPiBmIHwgTm9uZSAtPiAoZnVuIF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiTWlzc2luZyBwcmltOiBcIiBeIG5hbWUpKSlcblxuKCogQ29sbGVjdGlvbiBvcHMgKilcbmxldCBmaXJzdCBhcmdzID0gX3ByaW0gXCJmaXJzdFwiIFthcmdzXVxubGV0IHJlc3QgYXJncyA9IF9wcmltIFwicmVzdFwiIFthcmdzXVxubGV0IGxhc3QgYXJncyA9IF9wcmltIFwibGFzdFwiIFthcmdzXVxubGV0IG50aCBjb2xsIGkgPSBfcHJpbSBcIm50aFwiIFtjb2xsOyBpXVxubGV0IGNvbnMgeCBsID0gX3ByaW0gXCJjb25zXCIgW3g7IGxdXG5sZXQgYXBwZW5kIGEgYiA9IF9wcmltIFwiYXBwZW5kXCIgW2E7IGJdXG5sZXQgcmV2ZXJzZSBsID0gX3ByaW0gXCJyZXZlcnNlXCIgW2xdXG5sZXQgZmxhdHRlbiBsID0gX3ByaW0gXCJmbGF0dGVuXCIgW2xdXG5sZXQgY29uY2F0IGEgYiA9IF9wcmltIFwiY29uY2F0XCIgW2E7IGJdXG5sZXQgc2xpY2UgYSBiID0gX3ByaW0gXCJzbGljZVwiIFthOyBiXVxubGV0IGxlbiBhID0gX3ByaW0gXCJsZW5cIiBbYV1cbmxldCBnZXQgYSBiID0gZ2V0X3ZhbCBhIGJcbmxldCBzb3J0JyBhID0gX3ByaW0gXCJzb3J0XCIgW2FdXG5sZXQgcmFuZ2UnIGEgPSBfcHJpbSBcInJhbmdlXCIgW2FdXG5sZXQgdW5pcXVlIGEgPSBfcHJpbSBcInVuaXF1ZVwiIFthXVxubGV0IHppcCBhIGIgPSBfcHJpbSBcInppcFwiIFthOyBiXVxubGV0IHppcF9wYWlycyBhID0gX3ByaW0gXCJ6aXAtcGFpcnNcIiBbYV1cbmxldCB0YWtlIGEgYiA9IF9wcmltIFwidGFrZVwiIFthOyBiXVxubGV0IGRyb3AgYSBiID0gX3ByaW0gXCJkcm9wXCIgW2E7IGJdXG5sZXQgY2h1bmtfZXZlcnkgYSBiID0gX3ByaW0gXCJjaHVuay1ldmVyeVwiIFthOyBiXVxuXG4oKiBQcmVkaWNhdGVzICopXG5sZXQgZW1wdHlfcCBhID0gX3ByaW0gXCJlbXB0eT9cIiBbYV1cbmxldCBuaWxfcCBhID0gX3ByaW0gXCJuaWw/XCIgW2FdXG5sZXQgbnVtYmVyX3AgYSA9IF9wcmltIFwibnVtYmVyP1wiIFthXVxubGV0IHN0cmluZ19wIGEgPSBfcHJpbSBcInN0cmluZz9cIiBbYV1cbmxldCBib29sZWFuX3AgYSA9IF9wcmltIFwiYm9vbGVhbj9cIiBbYV1cbmxldCBsaXN0X3AgYSA9IF9wcmltIFwibGlzdD9cIiBbYV1cbmxldCBkaWN0X3AgYSA9IF9wcmltIFwiZGljdD9cIiBbYV1cbmxldCBzeW1ib2xfcCBhID0gX3ByaW0gXCJzeW1ib2w/XCIgW2FdXG5sZXQga2V5d29yZF9wIGEgPSBfcHJpbSBcImtleXdvcmQ/XCIgW2FdXG5sZXQgY29udGFpbnNfcCBhIGIgPSBfcHJpbSBcImNvbnRhaW5zP1wiIFthOyBiXVxubGV0IGhhc19rZXlfcCBhIGIgPSBfcHJpbSBcImhhcy1rZXk/XCIgW2E7IGJdXG5sZXQgc3RhcnRzX3dpdGhfcCBhIGIgPSBfcHJpbSBcInN0YXJ0cy13aXRoP1wiIFthOyBiXVxubGV0IGVuZHNfd2l0aF9wIGEgYiA9IF9wcmltIFwiZW5kcy13aXRoP1wiIFthOyBiXVxubGV0IHN0cmluZ19jb250YWluc19wIGEgYiA9IF9wcmltIFwic3RyaW5nLWNvbnRhaW5zP1wiIFthOyBiXVxubGV0IG9kZF9wIGEgPSBfcHJpbSBcIm9kZD9cIiBbYV1cbmxldCBldmVuX3AgYSA9IF9wcmltIFwiZXZlbj9cIiBbYV1cbmxldCB6ZXJvX3AgYSA9IF9wcmltIFwiemVybz9cIiBbYV1cblxuKCogU3RyaW5nIG9wcyAqKVxubGV0IHN0cicgYXJncyA9IFN0cmluZyAoc3hfc3RyIGFyZ3MpXG5sZXQgdXBwZXIgYSA9IF9wcmltIFwidXBwZXJcIiBbYV1cbmxldCB1cGNhc2UgYSA9IF9wcmltIFwidXBjYXNlXCIgW2FdXG5sZXQgbG93ZXIgYSA9IF9wcmltIFwibG93ZXJcIiBbYV1cbmxldCBkb3duY2FzZSBhID0gX3ByaW0gXCJkb3duY2FzZVwiIFthXVxubGV0IHRyaW0gYSA9IF9wcmltIFwidHJpbVwiIFthXVxubGV0IHNwbGl0IGEgYiA9IF9wcmltIFwic3BsaXRcIiBbYTsgYl1cbmxldCBqb2luIGEgYiA9IF9wcmltIFwiam9pblwiIFthOyBiXVxubGV0IHJlcGxhY2UgYSBiIGMgPSBfcHJpbSBcInJlcGxhY2VcIiBbYTsgYjsgY11cbmxldCBpbmRleF9vZiBhIGIgPSBfcHJpbSBcImluZGV4LW9mXCIgW2E7IGJdXG5sZXQgc3Vic3RyaW5nIGEgYiBjID0gX3ByaW0gXCJzdWJzdHJpbmdcIiBbYTsgYjsgY11cbmxldCBzdHJpbmdfbGVuZ3RoIGEgPSBfcHJpbSBcInN0cmluZy1sZW5ndGhcIiBbYV1cbmxldCBjaGFyX2Zyb21fY29kZSBhID0gX3ByaW0gXCJjaGFyLWZyb20tY29kZVwiIFthXVxuXG4oKiBEaWN0IG9wcyAqKVxubGV0IGFzc29jIGQgayB2ID0gX3ByaW0gXCJhc3NvY1wiIFtkOyBrOyB2XVxubGV0IGRpc3NvYyBkIGsgPSBfcHJpbSBcImRpc3NvY1wiIFtkOyBrXVxubGV0IG1lcmdlJyBhIGIgPSBfcHJpbSBcIm1lcmdlXCIgW2E7IGJdXG5sZXQga2V5cyBhID0gX3ByaW0gXCJrZXlzXCIgW2FdXG5sZXQgdmFscyBhID0gX3ByaW0gXCJ2YWxzXCIgW2FdXG5sZXQgZGljdF9zZXQgYSBiIGMgPSBfcHJpbSBcImRpY3Qtc2V0IVwiIFthOyBiOyBjXVxubGV0IGRpY3RfZ2V0IGEgYiA9IF9wcmltIFwiZGljdC1nZXRcIiBbYTsgYl1cbmxldCBkaWN0X2hhc19wIGEgYiA9IF9wcmltIFwiZGljdC1oYXM/XCIgW2E7IGJdXG5sZXQgZGljdF9kZWxldGUgYSBiID0gX3ByaW0gXCJkaWN0LWRlbGV0ZSFcIiBbYTsgYl1cblxuKCogTWF0aCAqKVxubGV0IGFicycgYSA9IF9wcmltIFwiYWJzXCIgW2FdXG5sZXQgc3FydCcgYSA9IF9wcmltIFwic3FydFwiIFthXVxubGV0IHBvdycgYSBiID0gX3ByaW0gXCJwb3dcIiBbYTsgYl1cbmxldCBmbG9vcicgYSA9IF9wcmltIFwiZmxvb3JcIiBbYV1cbmxldCBjZWlsJyBhID0gX3ByaW0gXCJjZWlsXCIgW2FdXG5sZXQgcm91bmQnIGEgPSBfcHJpbSBcInJvdW5kXCIgW2FdXG5sZXQgbWluJyBhIGIgPSBfcHJpbSBcIm1pblwiIFthOyBiXVxubGV0IG1heCcgYSBiID0gX3ByaW0gXCJtYXhcIiBbYTsgYl1cbmxldCBjbGFtcCBhIGIgYyA9IF9wcmltIFwiY2xhbXBcIiBbYTsgYjsgY11cbmxldCBwYXJzZV9pbnQgYSA9IF9wcmltIFwicGFyc2UtaW50XCIgW2FdXG5sZXQgcGFyc2VfZmxvYXQgYSA9IF9wcmltIFwicGFyc2UtZmxvYXRcIiBbYV1cblxuKCogTWlzYyAqKVxubGV0IGVycm9yIG1zZyA9IHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgbXNnKSlcblxuKCogaW5zcGVjdCB3cmFwcGVyIOKAlCByZXR1cm5zIFN0cmluZyB2YWx1ZSBpbnN0ZWFkIG9mIE9DYW1sIHN0cmluZyAqKVxubGV0IGluc3BlY3QgdiA9IFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KVxubGV0IGFwcGx5JyBmIGFyZ3MgPSBzeF9hcHBseSBmIGFyZ3NcbmxldCBpZGVudGljYWxfcCBhIGIgPSBfcHJpbSBcImlkZW50aWNhbD9cIiBbYTsgYl1cbmxldCBfaXNfc3ByZWFkX3ByaW0gYSA9IF9wcmltIFwic3ByZWFkP1wiIFthXVxubGV0IHNwcmVhZF9hdHRycyBhID0gX3ByaW0gXCJzcHJlYWQtYXR0cnNcIiBbYV1cbmxldCBtYWtlX3NwcmVhZCBhID0gX3ByaW0gXCJtYWtlLXNwcmVhZFwiIFthXVxuXG4oKiBTY29wZSBwcmltaXRpdmVzIOKAlCBkZWxlZ2F0ZSB0byBzeF9yZWYucHkncyBzaGFyZWQgc2NvcGUgc3RhY2tzICopXG5sZXQgc3hfY29sbGVjdCBhIGIgPSBwcmltX2NhbGwgXCJjb2xsZWN0IVwiIFthOyBiXVxubGV0IHN4X2NvbGxlY3RlZCBhID0gcHJpbV9jYWxsIFwiY29sbGVjdGVkXCIgW2FdXG5sZXQgc3hfY2xlYXJfY29sbGVjdGVkIGEgPSBwcmltX2NhbGwgXCJjbGVhci1jb2xsZWN0ZWQhXCIgW2FdXG5sZXQgc3hfZW1pdCBhIGIgPSBwcmltX2NhbGwgXCJlbWl0IVwiIFthOyBiXVxubGV0IHN4X2VtaXR0ZWQgYSA9IHByaW1fY2FsbCBcImVtaXR0ZWRcIiBbYV1cbmxldCBzeF9jb250ZXh0IGEgYiA9IHByaW1fY2FsbCBcImNvbnRleHRcIiBbYTsgYl1cblxuKCogVHJhbXBvbGluZSDigJQgZm9yd2FyZC1kZWNsYXJlZCBpbiBzeF9yZWYubWwsIGRlbGVnYXRlcyB0byBDRUsgZXZhbF9leHByICopXG4oKiBUaGlzIGlzIGEgc3R1YjsgdGhlIHJlYWwgdHJhbXBvbGluZSBpcyB3aXJlZCB1cCBpbiBzeF9yZWYubWwgYWZ0ZXIgZXZhbF9leHByIGlzIGRlZmluZWQgKilcbmxldCB0cmFtcG9saW5lIHYgPSB2XG5cbigqIFZhbHVlLXJldHVybmluZyB0eXBlIHByZWRpY2F0ZXMg4oCUIHRoZSB0cmFuc3BpbGVkIGNvZGUgcGFzc2VzIHRoZXNlIHRocm91Z2hcbiAgIHN4X3RydXRoeSwgc28gdGhleSBuZWVkIHRvIHJldHVybiBCb29sLCBub3QgT0NhbWwgYm9vbC4gKilcbigqIHR5cGVfb2YgcmV0dXJucyB2YWx1ZSwgbm90IHN0cmluZyAqKVxubGV0IHR5cGVfb2YgdiA9IFN0cmluZyAoU3hfdHlwZXMudHlwZV9vZiB2KVxuXG4oKiBFbnYgb3BlcmF0aW9ucyDigJQgYWNjZXB0IEVudi13cmFwcGVkIHZhbHVlcyBhbmQgdmFsdWUga2V5cy5cbiAgIFRoZSB0cmFuc3BpbGVkIENFSyBtYWNoaW5lIHN0b3JlcyBlbnZzIGluIGRpY3RzIGFzIEVudiB2YWx1ZXMuICopXG5sZXQgdW53cmFwX2VudiA9IGZ1bmN0aW9uXG4gIHwgRW52IGUgLT4gZVxuICB8IERpY3QgZCAtPlxuICAgICgqIERpY3QgdXNlZCBhcyBlbnYg4oCUIHdyYXAgaXQuIE5lZWRlZCBieSBhZGFwdGVyLWh0bWwuc3ggd2hpY2hcbiAgICAgICBwYXNzZXMgZGljdHMgYXMgZW52IGFyZ3MgKGUuZy4gZW1wdHkge30gYXMgY2FsbGVyIGVudikuICopXG4gICAgbGV0IGUgPSBTeF90eXBlcy5tYWtlX2VudiAoKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBpZ25vcmUgKFN4X3R5cGVzLmVudl9iaW5kIGUgayB2KSkgZDtcbiAgICBlXG4gIHwgTmlsIC0+XG4gICAgU3hfdHlwZXMubWFrZV9lbnYgKClcbiAgfCB2IC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIkV4cGVjdGVkIGVudiwgZ290IFwiIF4gU3hfdHlwZXMudHlwZV9vZiB2KSlcblxubGV0IGVudl9oYXMgZSBuYW1lID0gQm9vbCAoU3hfdHlwZXMuZW52X2hhcyAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpKVxubGV0IGVudl9nZXQgZSBuYW1lID0gU3hfdHlwZXMuZW52X2dldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpXG5sZXQgZW52X2JpbmQgZSBuYW1lIHYgPSBTeF90eXBlcy5lbnZfYmluZCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcbmxldCBlbnZfc2V0IGUgbmFtZSB2ID0gU3hfdHlwZXMuZW52X3NldCAodW53cmFwX2VudiBlKSAodmFsdWVfdG9fc3RyIG5hbWUpIHZcblxubGV0IG1ha2VfZW52ICgpID0gRW52IChTeF90eXBlcy5tYWtlX2VudiAoKSlcbmxldCBlbnZfZXh0ZW5kIGUgPSBFbnYgKFN4X3R5cGVzLmVudl9leHRlbmQgKHVud3JhcF9lbnYgZSkpXG5sZXQgZW52X21lcmdlIGEgYiA9IEVudiAoU3hfdHlwZXMuZW52X21lcmdlICh1bndyYXBfZW52IGEpICh1bndyYXBfZW52IGIpKVxuXG4oKiBzZXRfbGFtYmRhX25hbWUgd3JhcHBlciDigJQgYWNjZXB0cyB2YWx1ZSwgZXh0cmFjdHMgc3RyaW5nICopXG5sZXQgc2V0X2xhbWJkYV9uYW1lIGwgbiA9IFN4X3R5cGVzLnNldF9sYW1iZGFfbmFtZSBsICh2YWx1ZV90b19zdHIgbilcblxubGV0IGlzX25pbCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfbmlsIHYpXG5sZXQgaXNfdGh1bmsgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX3RodW5rIHYpXG5sZXQgaXNfbGFtYmRhIHYgPSBCb29sIChTeF90eXBlcy5pc19sYW1iZGEgdilcbmxldCBpc19jb21wb25lbnQgdiA9IEJvb2wgKFN4X3R5cGVzLmlzX2NvbXBvbmVudCB2KVxubGV0IGlzX2lzbGFuZCB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfaXNsYW5kIHYpXG5sZXQgaXNfbWFjcm8gdiA9IEJvb2wgKFN4X3R5cGVzLmlzX21hY3JvIHYpXG5sZXQgaXNfc2lnbmFsIHYgPSBCb29sIChTeF90eXBlcy5pc19zaWduYWwgdilcbmxldCBpc19jYWxsYWJsZSB2ID0gQm9vbCAoU3hfdHlwZXMuaXNfY2FsbGFibGUgdilcbmxldCBpc19pZGVudGljYWwgYSBiID0gQm9vbCAoYSA9PSBiKVxubGV0IGlzX3ByaW1pdGl2ZSBuYW1lID0gQm9vbCAoU3hfcHJpbWl0aXZlcy5pc19wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKSlcbmxldCBnZXRfcHJpbWl0aXZlIG5hbWUgPSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgKHZhbHVlX3RvX3N0ciBuYW1lKVxubGV0IGlzX3NwcmVhZCB2ID0gbWF0Y2ggdiB3aXRoIFNwcmVhZCBfIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZVxuXG4oKiBTdHVicyBmb3IgZnVuY3Rpb25zIGRlZmluZWQgaW4gc3hfcmVmLm1sIOKAlCByZXNvbHZlZCBhdCBsaW5rIHRpbWUgKilcbigqIFRoZXNlIGFyZSBmb3J3YXJkLWRlY2xhcmVkIGhlcmU7IHN4X3JlZi5tbCBkZWZpbmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb25zICopXG5cbigqIHN0cmlwLXByZWZpeCAqKVxuKCogU3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMg4oCUIGRlZmluZWQgaW4gc3hfcmVmLm1sIGJ1dFxuICAgc29tZXRpbWVzIHJlZmVyZW5jZWQgYmVmb3JlIHRoZWlyIGRlZmluaXRpb24gdmlhIGZvcndhcmQgY2FsbHMuXG4gICBUaGVzZSBnZXQgb3ZlcnJpZGRlbiBieSB0aGUgYWN0dWFsIHRyYW5zcGlsZWQgZGVmaW5pdGlvbnMuICopXG5cbmxldCBtYXBfaW5kZXhlZCBmbiBjb2xsID1cbiAgTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB4IC0+IHN4X2NhbGwgZm4gW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyB4XSkgKHN4X3RvX2xpc3QgY29sbCkpXG5cbmxldCBtYXBfZGljdCBmbiBkID1cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgRGljdCB0YmwgLT5cbiAgICBsZXQgcmVzdWx0ID0gSGFzaHRibC5jcmVhdGUgKEhhc2h0YmwubGVuZ3RoIHRibCkgaW5cbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT4gSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBrIChzeF9jYWxsIGZuIFtTdHJpbmcgazsgdl0pKSB0Ymw7XG4gICAgRGljdCByZXN1bHRcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFwLWRpY3Q6IGV4cGVjdGVkIGRpY3RcIilcblxubGV0IGZvcl9lYWNoIGZuIGNvbGwgPVxuICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGlnbm9yZSAoc3hfY2FsbCBmbiBbeF0pKSAoc3hfdG9fbGlzdCBjb2xsKTtcbiAgTmlsXG5cbmxldCBmb3JfZWFjaF9pbmRleGVkIGZuIGNvbGwgPVxuICBMaXN0Lml0ZXJpIChmdW4gaSB4IC0+IGlnbm9yZSAoc3hfY2FsbCBmbiBbTnVtYmVyIChmbG9hdF9vZl9pbnQgaSk7IHhdKSkgKHN4X3RvX2xpc3QgY29sbCk7XG4gIE5pbFxuXG4oKiBDb250aW51YXRpb24gc3VwcG9ydCAqKVxubGV0IGNvbnRpbnVhdGlvbl9wIHYgPSBtYXRjaCB2IHdpdGggQ29udGludWF0aW9uIChfLCBfKSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2VcblxubGV0IG1ha2VfY2VrX2NvbnRpbnVhdGlvbiBjYXB0dXJlZCByZXN0X2tvbnQgPVxuICBsZXQgZGF0YSA9IEhhc2h0YmwuY3JlYXRlIDIgaW5cbiAgSGFzaHRibC5yZXBsYWNlIGRhdGEgXCJjYXB0dXJlZFwiIGNhcHR1cmVkO1xuICBIYXNodGJsLnJlcGxhY2UgZGF0YSBcInJlc3Qta29udFwiIHJlc3Rfa29udDtcbiAgQ29udGludWF0aW9uICgoZnVuIHYgLT4gdiksIFNvbWUgZGF0YSlcblxubGV0IGNvbnRpbnVhdGlvbl9kYXRhIHYgPSBtYXRjaCB2IHdpdGhcbiAgfCBDb250aW51YXRpb24gKF8sIFNvbWUgZCkgLT4gRGljdCBkXG4gIHwgQ29udGludWF0aW9uIChfLCBOb25lKSAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKVxuICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJub3QgYSBjb250aW51YXRpb25cIilcblxuKCogRHluYW1pYyB3aW5kIOKAlCBzaW1wbGlmaWVkIGZvciBPQ2FtbCAobm8gYXN5bmMpICopXG5sZXQgZHluYW1pY193aW5kX2NhbGwgYmVmb3JlIGJvZHkgYWZ0ZXIgX2VudiA9XG4gIGlnbm9yZSAoc3hfY2FsbCBiZWZvcmUgW10pO1xuICBsZXQgcmVzdWx0ID0gc3hfY2FsbCBib2R5IFtdIGluXG4gIGlnbm9yZSAoc3hfY2FsbCBhZnRlciBbXSk7XG4gIHJlc3VsdFxuXG4oKiBTY29wZSBzdGFjayDigJQgYWxsIGRlbGVnYXRlZCB0byBwcmltaXRpdmVzIHJlZ2lzdGVyZWQgaW4gc3hfc2VydmVyLm1sICopXG5sZXQgc2NvcGVfcHVzaCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtcHVzaCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgc2NvcGVfcG9wIG5hbWUgPSBwcmltX2NhbGwgXCJzY29wZS1wb3AhXCIgW25hbWVdXG5sZXQgc2NvcGVfcGVlayBuYW1lID0gcHJpbV9jYWxsIFwic2NvcGUtcGVla1wiIFtuYW1lXVxubGV0IHNjb3BlX2VtaXQgbmFtZSB2YWx1ZSA9IHByaW1fY2FsbCBcInNjb3BlLWVtaXQhXCIgW25hbWU7IHZhbHVlXVxubGV0IHByb3ZpZGVfcHVzaCBuYW1lIHZhbHVlID0gcHJpbV9jYWxsIFwic2NvcGUtcHVzaCFcIiBbbmFtZTsgdmFsdWVdXG5sZXQgcHJvdmlkZV9wb3AgbmFtZSA9IHByaW1fY2FsbCBcInNjb3BlLXBvcCFcIiBbbmFtZV1cblxuKCogQ3VzdG9tIHNwZWNpYWwgZm9ybXMgcmVnaXN0cnkg4oCUIG11dGFibGUgZGljdCAqKVxubGV0IGN1c3RvbV9zcGVjaWFsX2Zvcm1zID0gRGljdCAoSGFzaHRibC5jcmVhdGUgNClcblxuKCogcmVnaXN0ZXItc3BlY2lhbC1mb3JtISDigJQgYWRkIGEgaGFuZGxlciB0byB0aGUgY3VzdG9tIHJlZ2lzdHJ5ICopXG5sZXQgcmVnaXN0ZXJfc3BlY2lhbF9mb3JtIG5hbWUgaGFuZGxlciA9XG4gIChtYXRjaCBjdXN0b21fc3BlY2lhbF9mb3JtcyB3aXRoXG4gICB8IERpY3QgdGJsIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgKHZhbHVlX3RvX3N0ciBuYW1lKSBoYW5kbGVyOyBoYW5kbGVyXG4gICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjdXN0b21fc3BlY2lhbF9mb3JtcyBub3QgYSBkaWN0XCIpKVxuXG4oKiBSZW5kZXIgY2hlY2svZm4gaG9va3Mg4oCUIG5pbCBieSBkZWZhdWx0LCBzZXQgYnkgcGxhdGZvcm0gaWYgbmVlZGVkICopXG5sZXQgcmVuZGVyX2NoZWNrID0gTmlsXG5sZXQgcmVuZGVyX2ZuID0gTmlsXG5cbigqIGlzLWVsc2UtY2xhdXNlPyDigJQgY2hlY2sgaWYgYSBjb25kL2Nhc2UgdGVzdCBpcyBhbiBlbHNlIG1hcmtlciAqKVxubGV0IGlzX2Vsc2VfY2xhdXNlIHYgPVxuICBtYXRjaCB2IHdpdGhcbiAgfCBLZXl3b3JkIGsgLT4gQm9vbCAoayA9IFwiZWxzZVwiIHx8IGsgPSBcImRlZmF1bHRcIilcbiAgfCBTeW1ib2wgcyAtPiBCb29sIChzID0gXCJlbHNlXCIgfHwgcyA9IFwiZGVmYXVsdFwiKVxuICB8IEJvb2wgdHJ1ZSAtPiBCb29sIHRydWVcbiAgfCBfIC0+IEJvb2wgZmFsc2VcblxuKCogU2lnbmFsIGFjY2Vzc29ycyAqKVxubGV0IHNpZ25hbF92YWx1ZSBzID0gbWF0Y2ggcyB3aXRoXG4gIHwgU2lnbmFsIHNpZycgLT4gc2lnJy5zX3ZhbHVlXG4gIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJ2YWx1ZVwiIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IE5pbClcbiAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgc2lnbmFsXCIpXG5sZXQgc2lnbmFsX3NldF92YWx1ZSBzIHYgPSBtYXRjaCBzIHdpdGggU2lnbmFsIHNpZycgLT4gc2lnJy5zX3ZhbHVlIDwtIHY7IHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibm90IGEgc2lnbmFsXCIpXG5sZXQgc2lnbmFsX3N1YnNjcmliZXJzIHMgPSBtYXRjaCBzIHdpdGggU2lnbmFsIHNpZycgLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBfIC0+IE5pbCkgc2lnJy5zX3N1YnNjcmliZXJzKSB8IF8gLT4gTGlzdCBbXVxubGV0IHNpZ25hbF9hZGRfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSAhciBAIFtmXTsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0UmVmIChyZWYgKGl0ZW1zIEAgW2ZdKSkpOyBOaWxcbiAgICAgfCBfIC0+IEhhc2h0YmwucmVwbGFjZSBkIFwic3Vic2NyaWJlcnNcIiAoTGlzdFJlZiAocmVmIFtmXSkpOyBOaWwpXG4gIHwgXyAtPiBOaWxcblxubGV0IHNpZ25hbF9yZW1vdmVfc3ViX2IgcyBmID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInN1YnNjcmliZXJzXCIgd2l0aFxuICAgICB8IFNvbWUgKExpc3RSZWYgcikgLT4gciA6PSBMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSAhcjsgTmlsXG4gICAgIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJzdWJzY3JpYmVyc1wiIChMaXN0IChMaXN0LmZpbHRlciAoZnVuIHggLT4geCAhPSBmKSBpdGVtcykpOyBOaWxcbiAgICAgfCBfIC0+IE5pbClcbiAgfCBfIC0+IE5pbFxuXG5sZXQgc2lnbmFsX2RlcHMgcyA9XG4gIG1hdGNoIHMgd2l0aFxuICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZGVwc1wiIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IExpc3QgW10pXG4gIHwgXyAtPiBMaXN0IFtdXG5cbmxldCBzaWduYWxfc2V0X2RlcHMgcyBkID1cbiAgbWF0Y2ggcyB3aXRoXG4gIHwgRGljdCB0YmwgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBcImRlcHNcIiBkOyBOaWxcbiAgfCBfIC0+IE5pbFxuXG5sZXQgbm90aWZ5X3N1YnNjcmliZXJzIHMgPVxuICBsZXQgc3VicyA9IG1hdGNoIHMgd2l0aFxuICAgIHwgRGljdCBkIC0+IChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJzdWJzY3JpYmVyc1wiIHdpdGhcbiAgICAgICB8IFNvbWUgKExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH0pIHwgU29tZSAoTGlzdCBpdGVtcykgLT4gaXRlbXNcbiAgICAgICB8IF8gLT4gW10pXG4gICAgfCBfIC0+IFtdXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIGYgLT4gaWdub3JlIChzeF9jYWxsIGYgW10pKSBzdWJzO1xuICBOaWxcblxubGV0IGZsdXNoX3N1YnNjcmliZXJzIF9zID0gTmlsXG5sZXQgZGlzcG9zZV9jb21wdXRlZCBfcyA9IE5pbFxuXG4oKiBJc2xhbmQgc2NvcGUgc3R1YnMg4oCUIGFjY2VwdCBib3RoIGJhcmUgT0NhbWwgZm5zIGFuZCBOYXRpdmVGbiB2YWx1ZXNcbiAgIGZyb20gdHJhbnNwaWxlZCBjb2RlIChOYXRpdmVGbiB3cmFwcGluZyBmb3IgdmFsdWUtc3RvcmFibGUgbGFtYmRhcykuICopXG5sZXQgd2l0aF9pc2xhbmRfc2NvcGUgX3JlZ2lzdGVyX2ZuIGJvZHlfZm4gPVxuICBtYXRjaCBib2R5X2ZuIHdpdGhcbiAgfCBOYXRpdmVGbiAoXywgZikgLT4gZiBbXVxuICB8IF8gLT4gTmlsXG5sZXQgcmVnaXN0ZXJfaW5fc2NvcGUgX2Rpc3Bvc2VfZm4gPSBOaWxcblxuKCogQ29tcG9uZW50IHR5cGUgYW5ub3RhdGlvbiBzdHViICopXG5sZXQgY29tcG9uZW50X3NldF9wYXJhbV90eXBlc19iIF9jb21wIF90eXBlcyA9IE5pbFxuXG4oKiBQYXJzZSBrZXl3b3JkIGFyZ3MgZnJvbSBhIGNhbGwg4oCUIHRoaXMgaXMgZGVmaW5lZCBpbiBldmFsdWF0b3Iuc3gsXG4gICB0aGUgdHJhbnNwaWxlZCB2ZXJzaW9uIHdpbGwgb3ZlcnJpZGUgdGhpcyBzdHViLiAqKVxuKCogRm9yd2FyZC1yZWZlcmVuY2Ugc3R1YnMgZm9yIGV2YWx1YXRvciBmdW5jdGlvbnMgdXNlZCBiZWZvcmUgZGVmaW5pdGlvbiAqKVxubGV0IHBhcnNlX2NvbXBfcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWw7IEJvb2wgZmFsc2VdXG5sZXQgcGFyc2VfbWFjcm9fcGFyYW1zIF9wYXJhbXMgPSBMaXN0IFtMaXN0IFtdOyBOaWxdXG5cbmxldCBwYXJzZV9rZXl3b3JkX2FyZ3MgX3Jhd19hcmdzIF9lbnYgPVxuICAoKiBTdHViIOKAlCB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiBpcyB0cmFuc3BpbGVkIGZyb20gZXZhbHVhdG9yLnN4ICopXG4gIExpc3QgW0RpY3QgKEhhc2h0YmwuY3JlYXRlIDApOyBMaXN0IFtdXVxuXG4oKiBNYWtlIGhhbmRsZXIvcXVlcnkvYWN0aW9uL3BhZ2UgZGVmIHN0dWJzICopXG5sZXQgbWFrZV9oYW5kbGVyX2RlZiBuYW1lIHBhcmFtcyBib2R5IF9lbnYgPSBEaWN0IChsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gSGFzaHRibC5yZXBsYWNlIGQgXCJ0eXBlXCIgKFN0cmluZyBcImhhbmRsZXJcIik7IEhhc2h0YmwucmVwbGFjZSBkIFwibmFtZVwiIG5hbWU7IEhhc2h0YmwucmVwbGFjZSBkIFwicGFyYW1zXCIgcGFyYW1zOyBIYXNodGJsLnJlcGxhY2UgZCBcImJvZHlcIiBib2R5OyBkKVxubGV0IG1ha2VfcXVlcnlfZGVmIG5hbWUgcGFyYW1zIGJvZHkgX2VudiA9IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52XG5sZXQgbWFrZV9hY3Rpb25fZGVmIG5hbWUgcGFyYW1zIGJvZHkgX2VudiA9IG1ha2VfaGFuZGxlcl9kZWYgbmFtZSBwYXJhbXMgYm9keSBfZW52XG5sZXQgbWFrZV9wYWdlX2RlZiBuYW1lIF9vcHRzID0gRGljdCAobGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA0IGluIEhhc2h0YmwucmVwbGFjZSBkIFwidHlwZVwiIChTdHJpbmcgXCJwYWdlXCIpOyBIYXNodGJsLnJlcGxhY2UgZCBcIm5hbWVcIiBuYW1lOyBkKVxuXG4oKiBzZi1kZWYqIHN0dWJzIOKAlCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWYtZm9ybXMsIG5vdCBpbiB0aGUgU1ggc3BlYyAqKVxubGV0IHNmX2RlZmhhbmRsZXIgYXJncyBlbnYgPVxuICBsZXQgbmFtZSA9IGZpcnN0IGFyZ3MgaW4gbGV0IHJlc3RfYXJncyA9IHJlc3QgYXJncyBpblxuICBtYWtlX2hhbmRsZXJfZGVmIG5hbWUgKGZpcnN0IHJlc3RfYXJncykgKG50aCByZXN0X2FyZ3MgKE51bWJlciAxLjApKSBlbnZcbmxldCBzZl9kZWZxdWVyeSBhcmdzIGVudiA9IHNmX2RlZmhhbmRsZXIgYXJncyBlbnZcbmxldCBzZl9kZWZhY3Rpb24gYXJncyBlbnYgPSBzZl9kZWZoYW5kbGVyIGFyZ3MgZW52XG5sZXQgc2ZfZGVmcGFnZSBhcmdzIF9lbnYgPVxuICBsZXQgbmFtZSA9IGZpcnN0IGFyZ3MgaW4gbWFrZV9wYWdlX2RlZiBuYW1lIChyZXN0IGFyZ3MpXG5cbmxldCBzdHJpcF9wcmVmaXggcyBwcmVmaXggPVxuICBtYXRjaCBzLCBwcmVmaXggd2l0aFxuICB8IFN0cmluZyBzLCBTdHJpbmcgcCAtPlxuICAgIGxldCBwbCA9IFN0cmluZy5sZW5ndGggcCBpblxuICAgIGlmIFN0cmluZy5sZW5ndGggcyA+PSBwbCAmJiBTdHJpbmcuc3ViIHMgMCBwbCA9IHBcbiAgICB0aGVuIFN0cmluZyAoU3RyaW5nLnN1YiBzIHBsIChTdHJpbmcubGVuZ3RoIHMgLSBwbCkpXG4gICAgZWxzZSBTdHJpbmcgc1xuICB8IF8gLT4gc1xuXG4oKiBkZWJ1Z19sb2cg4oCUIG5vLW9wIGluIHByb2R1Y3Rpb24sIHVzZWQgYnkgQ0VLIGV2YWx1YXRvciBmb3IgY29tcG9uZW50IHdhcm5pbmdzICopXG5sZXQgZGVidWdfbG9nIF8gXyA9IE5pbFxuXG4oKiBtdXRhYmxlX2xpc3Qg4oCUIG11dGFibGUgbGlzdCBmb3IgYnl0ZWNvZGUgY29tcGlsZXIgcG9vbCBlbnRyaWVzICopXG5sZXQgbXV0YWJsZV9saXN0ICgpID0gTGlzdFJlZiAocmVmIFtdKVxuXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYiIsIlN4X3R5cGVzIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9GbG9hdCIsIlN0ZGxpYl9QcmludGYiLCJwcmltX2NhbGwiLCJuYW1lIiwiYXJncyIsIm1hdGNoIiwiY3N0IiwidmFsdWVfdG9fc3RyIiwidiIsIm4iLCJzIiwic3hfdG9fc3RyaW5nIiwic3hfc3RyIiwic3hfdG9fbGlzdCIsImwiLCJyIiwic3hfY2FsbCIsImxvY2FsIiwicCIsImEiLCJrIiwieCIsImZuIiwiY2wiLCJuYXJncyIsImFyZ3NfcHJldmlldyIsInN4X2FwcGx5IiwiYXJnc19saXN0Iiwic3hfYXBwZW5kX2IiLCJsc3QiLCJpdGVtIiwiaXRlbXMiLCJzeF9kaWN0X3NldF9iIiwiZCIsInRibCIsImtleSIsImNzdF9ib2R5IiwiY3N0X2Vsc2UiLCJjc3RfZW1pdHRlZCIsImNzdF9uYW1lIiwiY3N0X3R5cGUiLCJjc3RfdmFsdWUiLCJnZXRfdmFsIiwiY29udGFpbmVyIiwiY3N0X2VudiIsImNzdF9waGFzZSIsInN3aXRjaCQiLCJleG4iLCJjIiwiZGVmYXVsdCQiLCJwcmltIiwicGFyYW0iLCJmaXJzdCIsInJlc3QiLCJsYXN0IiwibnRoIiwiY29sbCIsImkiLCJjb25zIiwiYXBwZW5kIiwiYiIsInJldmVyc2UiLCJmbGF0dGVuIiwiY29uY2F0Iiwic2xpY2UiLCJsZW4iLCJnZXQiLCJzb3J0IiwicmFuZ2UiLCJ1bmlxdWUiLCJ6aXAiLCJ6aXBfcGFpcnMiLCJ0YWtlIiwiZHJvcCIsImNodW5rX2V2ZXJ5IiwiZW1wdHlfcCIsIm5pbF9wIiwibnVtYmVyX3AiLCJzdHJpbmdfcCIsImJvb2xlYW5fcCIsImxpc3RfcCIsImRpY3RfcCIsInN5bWJvbF9wIiwia2V5d29yZF9wIiwiY29udGFpbnNfcCIsImhhc19rZXlfcCIsInN0YXJ0c193aXRoX3AiLCJlbmRzX3dpdGhfcCIsInN0cmluZ19jb250YWluc19wIiwib2RkX3AiLCJldmVuX3AiLCJ6ZXJvX3AiLCJzdHIiLCJ1cHBlciIsInVwY2FzZSIsImxvd2VyIiwiZG93bmNhc2UiLCJ0cmltIiwic3BsaXQiLCJqb2luIiwicmVwbGFjZSIsImluZGV4X29mIiwic3Vic3RyaW5nIiwic3RyaW5nX2xlbmd0aCIsImNoYXJfZnJvbV9jb2RlIiwiYXNzb2MiLCJkaXNzb2MiLCJtZXJnZSIsImtleXMiLCJ2YWxzIiwiZGljdF9zZXQiLCJkaWN0X2dldCIsImRpY3RfaGFzX3AiLCJkaWN0X2RlbGV0ZSIsImFicyIsInNxcnQiLCJwb3ciLCJmbG9vciIsImNlaWwiLCJyb3VuZCIsIm1pbiIsIm1heCIsImNsYW1wIiwicGFyc2VfaW50IiwicGFyc2VfZmxvYXQiLCJlcnJvciIsIm1zZyIsImluc3BlY3QiLCJhcHBseSIsImlkZW50aWNhbF9wIiwiaXNfc3ByZWFkX3ByaW0iLCJzcHJlYWRfYXR0cnMiLCJtYWtlX3NwcmVhZCIsInN4X2NvbGxlY3QiLCJzeF9jb2xsZWN0ZWQiLCJzeF9jbGVhcl9jb2xsZWN0ZWQiLCJzeF9lbWl0Iiwic3hfZW1pdHRlZCIsInN4X2NvbnRleHQiLCJ0cmFtcG9saW5lIiwidHlwZV9vZiIsInVud3JhcF9lbnYiLCJlIiwiZW52X2hhcyIsImVudl9nZXQiLCJlbnZfYmluZCIsImVudl9zZXQiLCJtYWtlX2VudiIsImVudl9leHRlbmQiLCJlbnZfbWVyZ2UiLCJzZXRfbGFtYmRhX25hbWUiLCJpc19uaWwiLCJpc190aHVuayIsImlzX2xhbWJkYSIsImlzX2NvbXBvbmVudCIsImlzX2lzbGFuZCIsImlzX21hY3JvIiwiaXNfc2lnbmFsIiwiaXNfY2FsbGFibGUiLCJpc19pZGVudGljYWwiLCJpc19wcmltaXRpdmUiLCJnZXRfcHJpbWl0aXZlIiwiaXNfc3ByZWFkIiwibWFwX2luZGV4ZWQiLCJtYXBfZGljdCIsInJlc3VsdCIsImZvcl9lYWNoIiwiZm9yX2VhY2hfaW5kZXhlZCIsImNvbnRpbnVhdGlvbl9wIiwibWFrZV9jZWtfY29udGludWF0aW9uIiwiY2FwdHVyZWQiLCJyZXN0X2tvbnQiLCJkYXRhIiwiY29udGludWF0aW9uX2RhdGEiLCJkeW5hbWljX3dpbmRfY2FsbCIsImJlZm9yZSIsImJvZHkiLCJhZnRlciIsImVudiIsImNzdF9zY29wZV9wdXNoIiwic2NvcGVfcHVzaCIsInZhbHVlIiwiY3N0X3Njb3BlX3BvcCIsInNjb3BlX3BvcCIsInNjb3BlX3BlZWsiLCJzY29wZV9lbWl0IiwicHJvdmlkZV9wdXNoIiwicHJvdmlkZV9wb3AiLCJjdXN0b21fc3BlY2lhbF9mb3JtcyIsInJlZ2lzdGVyX3NwZWNpYWxfZm9ybSIsImhhbmRsZXIiLCJpc19lbHNlX2NsYXVzZSIsImNzdF9kZWZhdWx0IiwiY3N0X25vdF9hX3NpZ25hbCIsInNpZ25hbF92YWx1ZSIsInNpZyIsInNpZ25hbF9zZXRfdmFsdWUiLCJzaWduYWxfc3Vic2NyaWJlcnMiLCJjc3Rfc3Vic2NyaWJlcnMiLCJzaWduYWxfYWRkX3N1Yl9iIiwic2lnbmFsX3JlbW92ZV9zdWJfYiIsImNzdF9kZXBzIiwic2lnbmFsX2RlcHMiLCJzaWduYWxfc2V0X2RlcHMiLCJub3RpZnlfc3Vic2NyaWJlcnMiLCJzdWJzIiwiZmx1c2hfc3Vic2NyaWJlcnMiLCJkaXNwb3NlX2NvbXB1dGVkIiwid2l0aF9pc2xhbmRfc2NvcGUiLCJyZWdpc3Rlcl9mbiIsImJvZHlfZm4iLCJyZWdpc3Rlcl9pbl9zY29wZSIsImRpc3Bvc2VfZm4iLCJjb21wb25lbnRfc2V0X3BhcmFtX3R5cGVzX2IiLCJjb21wIiwidHlwZXMiLCJwYXJzZV9jb21wX3BhcmFtcyIsInBhcmFtcyIsInBhcnNlX21hY3JvX3BhcmFtcyIsInBhcnNlX2tleXdvcmRfYXJncyIsInJhd19hcmdzIiwibWFrZV9oYW5kbGVyX2RlZiIsIm1ha2VfcXVlcnlfZGVmIiwibWFrZV9hY3Rpb25fZGVmIiwibWFrZV9wYWdlX2RlZiIsIm9wdHMiLCJzZl9kZWZoYW5kbGVyIiwicmVzdF9hcmdzIiwic2ZfZGVmcXVlcnkiLCJzZl9kZWZhY3Rpb24iLCJzZl9kZWZwYWdlIiwic3RyaXBfcHJlZml4IiwicHJlZml4IiwicGwiLCJkZWJ1Z19sb2ciLCJtdXRhYmxlX2xpc3QiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxZQUFBQyxVQUFBQyxNQUFBQztBQUFBQSxRQUFBQyxRQ1VRO0FBQUEsSUFBOEMsY0FBQWhCLElBQUEsVUFDeEMsMEJBQytDO0FBQUEsWUFBL0I7QUFBQSxJQUE4QjtBQUFBLEdBQUM7QUFBQSxPQUFBaUIsTURaN0Q7QUFBQSxZQUFBQyxhQUFBQztBQUFBQSxJQ2VtQiwwQkFPUjtBQUFBLElBUFE7QUFBQTtBQUFBLHFDQVVEO0FBQUE7QUFBQSxXQUFBQyxJQVZDO0FBQUEsT0FHWjtBQUFBLGlCQUF3QjtBQUFBLGlCQUN0Qiw2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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURyVmxEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6MzAzOTcsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlZi5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIHN4X3JlZi5tbCDigJQgQXV0by1nZW5lcmF0ZWQgZnJvbSBTWCBzcGVjIGJ5IGhvc3RzL29jYW1sL2Jvb3RzdHJhcC5weSAqKVxuKCogRG8gbm90IGVkaXQg4oCUIHJlZ2VuZXJhdGUgd2l0aDogcHl0aG9uMyBob3N0cy9vY2FtbC9ib290c3RyYXAucHkgKilcblxuW0BAQHdhcm5pbmcgXCItMjYtMjdcIl1cblxub3BlbiBTeF90eXBlc1xub3BlbiBTeF9ydW50aW1lXG5cbigqIFRyYW1wb2xpbmUg4oCUIGZvcndhcmQgcmVmLCByZXNvbHZlZCBhZnRlciBldmFsX2V4cHIgaXMgZGVmaW5lZC4gKilcbmxldCB0cmFtcG9saW5lX2ZuIDogKHZhbHVlIC0+IHZhbHVlKSByZWYgPSByZWYgKGZ1biB2IC0+IHYpXG5sZXQgdHJhbXBvbGluZSB2ID0gIXRyYW1wb2xpbmVfZm4gdlxuXG5cblxuKCogPT09IE11dGFibGUgc3RhdGUgZm9yIHN0cmljdCBtb2RlID09PSAqKVxuKCogVGhlc2UgYXJlIGRlZmluZWQgYXMgdG9wLWxldmVsIHJlZnMgYmVjYXVzZSB0aGUgdHJhbnNwaWxlciBjYW5ub3QgaGFuZGxlXG4gICBnbG9iYWwgc2V0ISBtdXRhdGlvbiAoaXQgY3JlYXRlcyBsb2NhbCByZWZzIHRoYXQgc2hhZG93IHRoZSBnbG9iYWwpLiAqKVxubGV0IF9zdHJpY3RfcmVmID0gcmVmIChCb29sIGZhbHNlKVxubGV0IF9wcmltX3BhcmFtX3R5cGVzX3JlZiA9IHJlZiBOaWxcblxuKCogSklUIGNhbGwgaG9vayDigJQgY2VrX2NhbGwgY2hlY2tzIHRoaXMgYmVmb3JlIENFSyBkaXNwYXRjaCBmb3IgbmFtZWRcbiAgIGxhbWJkYXMuICBSZWdpc3RlcmVkIGJ5IHN4X3NlcnZlci5tbCBhZnRlciBjb21waWxlciBsb2Fkcy4gIFRlc3RzXG4gICBydW4gd2l0aCBob29rID0gTm9uZSAocHVyZSBDRUssIG5vIGNvbXBpbGF0aW9uIGRlcGVuZGVuY3kpLiAqKVxubGV0IGppdF9jYWxsX2hvb2sgOiAodmFsdWUgLT4gdmFsdWUgbGlzdCAtPiB2YWx1ZSBvcHRpb24pIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG4oKiBDb21wb25lbnQgdHJhY2Ug4oCUIGNhcHR1cmVzIGtvbnQgZnJvbSBsYXN0IENFSyBlcnJvciBmb3IgZGlhZ25vc3RpY3MgKilcbmxldCBfbGFzdF9lcnJvcl9rb250IDogdmFsdWUgcmVmID0gcmVmIE5pbFxuXG5cblxuKCogPT09IFRyYW5zcGlsZWQgZnJvbSBldmFsdWF0b3IgKGZyYW1lcyArIGV2YWwgKyBDRUspID09PSAqKVxuXG4oKiBtYWtlLWNlay1zdGF0ZSAqKVxubGV0IHJlYyBtYWtlX2Nla19zdGF0ZSBjb250cm9sIGVudiBrb250ID1cbiAgKENla1N0YXRlIHsgY3NfY29udHJvbCA9IGNvbnRyb2w7IGNzX2VudiA9IGVudjsgY3Nfa29udCA9IGtvbnQ7IGNzX3BoYXNlID0gXCJldmFsXCI7IGNzX3ZhbHVlID0gTmlsIH0pXG5cbigqIG1ha2UtY2VrLXZhbHVlICopXG5hbmQgbWFrZV9jZWtfdmFsdWUgdmFsdWUgZW52IGtvbnQgPVxuICAoQ2VrU3RhdGUgeyBjc19jb250cm9sID0gTmlsOyBjc19lbnYgPSBlbnY7IGNzX2tvbnQgPSBrb250OyBjc19waGFzZSA9IFwiY29udGludWVcIjsgY3NfdmFsdWUgPSB2YWx1ZSB9KVxuXG4oKiBjZWstdGVybWluYWw/ICopXG5hbmQgY2VrX3Rlcm1pbmFsX3Agc3RhdGUgPVxuICAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJwaGFzZVwiKSkpOyAoU3RyaW5nIFwiY29udGludWVcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoZW1wdHlfcCAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwia29udFwiKSkpKSkpXG5cbigqIGNlay1jb250cm9sICopXG5hbmQgY2VrX2NvbnRyb2wgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwiY29udHJvbFwiKSkpXG5cbigqIGNlay1lbnYgKilcbmFuZCBjZWtfZW52IHMgPVxuICAoZ2V0IChzKSAoKFN0cmluZyBcImVudlwiKSkpXG5cbigqIGNlay1rb250ICopXG5hbmQgY2VrX2tvbnQgcyA9XG4gIChnZXQgKHMpICgoU3RyaW5nIFwia29udFwiKSkpXG5cbigqIGNlay1waGFzZSAqKVxuYW5kIGNla19waGFzZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJwaGFzZVwiKSkpXG5cbigqIGNlay12YWx1ZSAqKVxuYW5kIGNla192YWx1ZSBzID1cbiAgKGdldCAocykgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpXG5cbigqIG1ha2UtaWYtZnJhbWUgKilcbmFuZCBtYWtlX2lmX2ZyYW1lIHRoZW5fZXhwciBlbHNlX2V4cHIgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiaWZcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gZWxzZV9leHByOyBjZl9ib2R5ID0gdGhlbl9leHByOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS13aGVuLWZyYW1lICopXG5hbmQgbWFrZV93aGVuX2ZyYW1lIGJvZHlfZXhwcnMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwid2hlblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBib2R5X2V4cHJzOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1iZWdpbi1mcmFtZSAqKVxuYW5kIG1ha2VfYmVnaW5fZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImJlZ2luXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtbGV0LWZyYW1lICopXG5hbmQgbWFrZV9sZXRfZnJhbWUgbmFtZSByZW1haW5pbmcgYm9keSBsb2NhbCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImxldFwiOyBjZl9lbnYgPSBsb2NhbDsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBib2R5OyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1kZWZpbmUtZnJhbWUgKilcbmFuZCBtYWtlX2RlZmluZV9mcmFtZSBuYW1lIGVudiBoYXNfZWZmZWN0cyBlZmZlY3RfbGlzdCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImRlZmluZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gaGFzX2VmZmVjdHM7IGNmX2V4dHJhMiA9IGVmZmVjdF9saXN0IH0pXG5cbigqIG1ha2Utc2V0LWZyYW1lICopXG5hbmQgbWFrZV9zZXRfZnJhbWUgbmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gbmFtZTsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtYXJnLWZyYW1lICopXG5hbmQgbWFrZV9hcmdfZnJhbWUgZiBldmFsZWQgcmVtYWluaW5nIGVudiByYXdfYXJncyBoZWFkX25hbWUgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhcmdcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gZXZhbGVkOyBjZl9yZXN1bHRzID0gcmF3X2FyZ3M7IGNmX2V4dHJhID0gKGxldCBfb3IgPSBoZWFkX25hbWUgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCk7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhbGwtZnJhbWUgKilcbmFuZCBtYWtlX2NhbGxfZnJhbWUgZiBhcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNhbGxcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBmOyBjZl9hcmdzID0gYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNvbmQtZnJhbWUgKilcbmFuZCBtYWtlX2NvbmRfZnJhbWUgcmVtYWluaW5nIGVudiBzY2hlbWVfcCA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gc2NoZW1lX3A7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWNhc2UtZnJhbWUgKilcbmFuZCBtYWtlX2Nhc2VfZnJhbWUgbWF0Y2hfdmFsIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJjYXNlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IG1hdGNoX3ZhbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtdGhyZWFkLWZyYW1lICopXG5hbmQgbWFrZV90aHJlYWRfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInRocmVhZFwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLW1hcC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2ZyYW1lIGYgcmVtYWluaW5nIHJlc3VsdHMgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwibWFwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gKEJvb2wgZmFsc2UpOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1tYXAtaW5kZXhlZC1mcmFtZSAqKVxuYW5kIG1ha2VfbWFwX2luZGV4ZWRfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJtYXBcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSAoQm9vbCB0cnVlKTsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZmlsdGVyLWZyYW1lICopXG5hbmQgbWFrZV9maWx0ZXJfZnJhbWUgZiByZW1haW5pbmcgcmVzdWx0cyBjdXJyZW50X2l0ZW0gZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZmlsdGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IHJlc3VsdHM7IGNmX2V4dHJhID0gY3VycmVudF9pdGVtOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZWR1Y2UtZnJhbWUgKilcbmFuZCBtYWtlX3JlZHVjZV9mcmFtZSBmIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZWR1Y2VcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZm9yLWVhY2gtZnJhbWUgKilcbmFuZCBtYWtlX2Zvcl9lYWNoX2ZyYW1lIGYgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImZvci1lYWNoXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gZjsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNvbWUtZnJhbWUgKilcbmFuZCBtYWtlX3NvbWVfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic29tZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IGY7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1ldmVyeS1mcmFtZSAqKVxuYW5kIG1ha2VfZXZlcnlfZnJhbWUgZiByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwiZXZlcnlcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBmOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2Utc2NvcGUtZnJhbWUgKilcbmFuZCBtYWtlX3Njb3BlX2ZyYW1lIG5hbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IHJlbWFpbmluZzsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXByb3ZpZGUtZnJhbWUgKilcbmFuZCBtYWtlX3Byb3ZpZGVfZnJhbWUgbmFtZSB2YWx1ZSByZW1haW5pbmcgZW52ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicHJvdmlkZVwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdmFsdWU7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXNjb3BlLWFjYy1mcmFtZSAqKVxuYW5kIG1ha2Vfc2NvcGVfYWNjX2ZyYW1lIG5hbWUgdmFsdWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInNjb3BlLWFjY1wiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBuYW1lOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gKGxldCBfb3IgPSB2YWx1ZSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgTmlsKTsgY2ZfZXh0cmEyID0gKExpc3QgW10pIH0pXG5cbigqIG1ha2UtcmVzZXQtZnJhbWUgKilcbmFuZCBtYWtlX3Jlc2V0X2ZyYW1lIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcInJlc2V0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gTmlsOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZGljdC1mcmFtZSAqKVxuYW5kIG1ha2VfZGljdF9mcmFtZSByZW1haW5pbmcgcmVzdWx0cyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkaWN0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gcmVzdWx0czsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWFuZC1mcmFtZSAqKVxuYW5kIG1ha2VfYW5kX2ZyYW1lIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJhbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSByZW1haW5pbmc7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1vci1mcmFtZSAqKVxuYW5kIG1ha2Vfb3JfZnJhbWUgcmVtYWluaW5nIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcIm9yXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gTmlsOyBjZl9hcmdzID0gTmlsOyBjZl9yZXN1bHRzID0gTmlsOyBjZl9leHRyYSA9IE5pbDsgY2ZfZXh0cmEyID0gTmlsIH0pXG5cbigqIG1ha2UtZHluYW1pYy13aW5kLWZyYW1lICopXG5hbmQgbWFrZV9keW5hbWljX3dpbmRfZnJhbWUgcGhhc2UgYm9keV90aHVuayBhZnRlcl90aHVuayBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkeW5hbWljLXdpbmRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gcGhhc2U7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLXJlYWN0aXZlLXJlc2V0LWZyYW1lICopXG5hbmQgbWFrZV9yZWFjdGl2ZV9yZXNldF9mcmFtZSBlbnYgdXBkYXRlX2ZuIGZpcnN0X3JlbmRlcl9wID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwicmVhY3RpdmUtcmVzZXRcIjsgY2ZfZW52ID0gZW52OyBjZl9uYW1lID0gTmlsOyBjZl9ib2R5ID0gTmlsOyBjZl9yZW1haW5pbmcgPSBOaWw7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gdXBkYXRlX2ZuOyBjZl9leHRyYTIgPSBmaXJzdF9yZW5kZXJfcCB9KVxuXG4oKiBtYWtlLWRlcmVmLWZyYW1lICopXG5hbmQgbWFrZV9kZXJlZl9mcmFtZSBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJkZXJlZlwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBtYWtlLWhvLXNldHVwLWZyYW1lICopXG5hbmQgbWFrZV9ob19zZXR1cF9mcmFtZSBob190eXBlIHJlbWFpbmluZ19hcmdzIGV2YWxlZF9hcmdzIGVudiA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImhvLXNldHVwXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nX2FyZ3M7IGNmX2YgPSBOaWw7IGNmX2FyZ3MgPSBldmFsZWRfYXJnczsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBob190eXBlOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1jb21wLXRyYWNlLWZyYW1lICopXG5hbmQgbWFrZV9jb21wX3RyYWNlX2ZyYW1lIG5hbWUgZmlsZSA9XG4gIChDZWtGcmFtZSB7IGNmX3R5cGUgPSBcImNvbXAtdHJhY2VcIjsgY2ZfZW52ID0gZmlsZTsgY2ZfbmFtZSA9IG5hbWU7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IE5pbDsgY2ZfYXJncyA9IE5pbDsgY2ZfcmVzdWx0cyA9IE5pbDsgY2ZfZXh0cmEgPSBOaWw7IGNmX2V4dHJhMiA9IE5pbCB9KVxuXG4oKiBrb250LWNvbGxlY3QtY29tcC10cmFjZSAqKVxuYW5kIGtvbnRfY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAoY29ucyAoKGxldCBfZCA9IEhhc2h0YmwuY3JlYXRlIDIgaW4gSGFzaHRibC5yZXBsYWNlIF9kIFwiZmlsZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpbGVcIikpKTsgSGFzaHRibC5yZXBsYWNlIF9kIFwibmFtZVwiIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgRGljdCBfZCkpICgoa29udF9jb2xsZWN0X2NvbXBfdHJhY2UgKChyZXN0IChrb250KSkpKSkpIGVsc2UgKGtvbnRfY29sbGVjdF9jb21wX3RyYWNlICgocmVzdCAoa29udCkpKSkpKSlcblxuKCogbWFrZS1oYW5kbGVyLWZyYW1lICopXG5hbmQgbWFrZV9oYW5kbGVyX2ZyYW1lIGhhbmRsZXJzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJoYW5kbGVyXCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gaGFuZGxlcnM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1yZXN0YXJ0LWZyYW1lICopXG5hbmQgbWFrZV9yZXN0YXJ0X2ZyYW1lIHJlc3RhcnRzIHJlbWFpbmluZyBlbnYgPVxuICAoQ2VrRnJhbWUgeyBjZl90eXBlID0gXCJyZXN0YXJ0XCI7IGNmX2VudiA9IGVudjsgY2ZfbmFtZSA9IE5pbDsgY2ZfYm9keSA9IE5pbDsgY2ZfcmVtYWluaW5nID0gcmVtYWluaW5nOyBjZl9mID0gcmVzdGFydHM7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogbWFrZS1zaWduYWwtcmV0dXJuLWZyYW1lICopXG5hbmQgbWFrZV9zaWduYWxfcmV0dXJuX2ZyYW1lIGVudiBzYXZlZF9rb250ID1cbiAgKENla0ZyYW1lIHsgY2ZfdHlwZSA9IFwic2lnbmFsLXJldHVyblwiOyBjZl9lbnYgPSBlbnY7IGNmX25hbWUgPSBOaWw7IGNmX2JvZHkgPSBOaWw7IGNmX3JlbWFpbmluZyA9IE5pbDsgY2ZfZiA9IHNhdmVkX2tvbnQ7IGNmX2FyZ3MgPSBOaWw7IGNmX3Jlc3VsdHMgPSBOaWw7IGNmX2V4dHJhID0gTmlsOyBjZl9leHRyYTIgPSBOaWwgfSlcblxuKCogZmluZC1tYXRjaGluZy1oYW5kbGVyICopXG5hbmQgZmluZF9tYXRjaGluZ19oYW5kbGVyIGhhbmRsZXJzIGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChoYW5kbGVycykpKSB0aGVuIE5pbCBlbHNlIChsZXQgcGFpciA9IChmaXJzdCAoaGFuZGxlcnMpKSBpbiAobGV0IHByZWQgPSAoZmlyc3QgKHBhaXIpKSBpbiBsZXQgaGFuZGxlcl9mbiA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoY2VrX2NhbGwgKHByZWQpICgoTGlzdCBbY29uZGl0aW9uXSkpKSkgdGhlbiBoYW5kbGVyX2ZuIGVsc2UgKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKHJlc3QgKGhhbmRsZXJzKSkpIChjb25kaXRpb24pKSkpKSlcblxuKCoga29udC1maW5kLWhhbmRsZXIgKilcbmFuZCBrb250X2ZpbmRfaGFuZGxlciBrb250IGNvbmRpdGlvbiA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwiaGFuZGxlclwiKV0pKSB0aGVuIChsZXQgbWF0Y2gnID0gKGZpbmRfbWF0Y2hpbmdfaGFuZGxlciAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoY29uZGl0aW9uKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9oYW5kbGVyICgocmVzdCAoa29udCkpKSAoY29uZGl0aW9uKSkgZWxzZSBtYXRjaCcpKSBlbHNlIChrb250X2ZpbmRfaGFuZGxlciAoKHJlc3QgKGtvbnQpKSkgKGNvbmRpdGlvbikpKSkpXG5cbigqIGZpbmQtbmFtZWQtcmVzdGFydCAqKVxuYW5kIGZpbmRfbmFtZWRfcmVzdGFydCByZXN0YXJ0cyBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RhcnRzKSkpIHRoZW4gTmlsIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAocmVzdGFydHMpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKGVudHJ5KSk7IG5hbWVdKSkgdGhlbiBlbnRyeSBlbHNlIChmaW5kX25hbWVkX3Jlc3RhcnQgKChyZXN0IChyZXN0YXJ0cykpKSAobmFtZSkpKSkpXG5cbigqIGtvbnQtZmluZC1yZXN0YXJ0ICopXG5hbmQga29udF9maW5kX3Jlc3RhcnQga29udCBuYW1lID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGZyYW1lID0gKGZpcnN0IChrb250KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZXN0YXJ0XCIpXSkpIHRoZW4gKGxldCBtYXRjaCcgPSAoZmluZF9uYW1lZF9yZXN0YXJ0ICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkpIChuYW1lKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAobWF0Y2gnKSkpIHRoZW4gKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpIGVsc2UgKExpc3QgW21hdGNoJzsgZnJhbWU7IChyZXN0IChrb250KSldKSkpIGVsc2UgKGtvbnRfZmluZF9yZXN0YXJ0ICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGZyYW1lLXR5cGUgKilcbmFuZCBmcmFtZV90eXBlIGYgPVxuICAoZ2V0IChmKSAoKFN0cmluZyBcInR5cGVcIikpKVxuXG4oKiBrb250LXB1c2ggKilcbmFuZCBrb250X3B1c2ggZnJhbWUga29udCA9XG4gIChjb25zIChmcmFtZSkgKGtvbnQpKVxuXG4oKiBrb250LXRvcCAqKVxuYW5kIGtvbnRfdG9wIGtvbnQgPVxuICAoZmlyc3QgKGtvbnQpKVxuXG4oKiBrb250LXBvcCAqKVxuYW5kIGtvbnRfcG9wIGtvbnQgPVxuICAocmVzdCAoa29udCkpXG5cbigqIGtvbnQtZW1wdHk/ICopXG5hbmQga29udF9lbXB0eV9wIGtvbnQgPVxuICAoZW1wdHlfcCAoa29udCkpXG5cbigqIGtvbnQtY2FwdHVyZS10by1yZXNldCAqKVxuYW5kIGtvbnRfY2FwdHVyZV90b19yZXNldCBrb250ID1cbiAgKGxldCByZWMgc2NhbiA9IChmdW4gayBjYXB0dXJlZCAtPiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJzaGlmdCB3aXRob3V0IGVuY2xvc2luZyByZXNldFwiKSkpKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGspKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicmVzZXRcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGZyYW1lX3R5cGUgKGZyYW1lKSk7IChTdHJpbmcgXCJyZWFjdGl2ZS1yZXNldFwiKV0pKSkgdGhlbiAoTGlzdCBbY2FwdHVyZWQ7IChyZXN0IChrKSldKSBlbHNlIChzY2FuICgocmVzdCAoaykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjYXB0dXJlZDsgKExpc3QgW2ZyYW1lXSldKSkpKSkpKSBpbiAoc2NhbiAoa29udCkgKChMaXN0IFtdKSkpKVxuXG4oKiBrb250LWZpbmQtcHJvdmlkZSAqKVxuYW5kIGtvbnRfZmluZF9wcm92aWRlIGtvbnQgbmFtZSA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrb250KSkpIHRoZW4gTmlsIGVsc2UgKGxldCBmcmFtZSA9IChmaXJzdCAoa29udCkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhmcmFtZV90eXBlIChmcmFtZSkpOyAoU3RyaW5nIFwicHJvdmlkZVwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgbmFtZV0pKSkgdGhlbiBmcmFtZSBlbHNlIChrb250X2ZpbmRfcHJvdmlkZSAoKHJlc3QgKGtvbnQpKSkgKG5hbWUpKSkpKVxuXG4oKiBrb250LWZpbmQtc2NvcGUtYWNjICopXG5hbmQga29udF9maW5kX3Njb3BlX2FjYyBrb250IG5hbWUgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoa29udCkpKSB0aGVuIE5pbCBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGtvbnQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInNjb3BlLWFjY1wiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKTsgbmFtZV0pKSkgdGhlbiBmcmFtZSBlbHNlIChrb250X2ZpbmRfc2NvcGVfYWNjICgocmVzdCAoa29udCkpKSAobmFtZSkpKSkpXG5cbigqIGhhcy1yZWFjdGl2ZS1yZXNldC1mcmFtZT8gKilcbmFuZCBoYXNfcmVhY3RpdmVfcmVzZXRfZnJhbWVfcCBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGtvbnQpKSkgdGhlbiAoQm9vbCBmYWxzZSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoKGZpcnN0IChrb250KSkpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKEJvb2wgdHJ1ZSkgZWxzZSAoaGFzX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lX3AgKChyZXN0IChrb250KSkpKSkpXG5cbigqIGtvbnQtY2FwdHVyZS10by1yZWFjdGl2ZS1yZXNldCAqKVxuYW5kIGtvbnRfY2FwdHVyZV90b19yZWFjdGl2ZV9yZXNldCBrb250ID1cbiAgKGxldCByZWMgc2NhbiA9IChmdW4gayBjYXB0dXJlZCAtPiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoaykpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJyZWFjdGl2ZSBkZXJlZiB3aXRob3V0IGVuY2xvc2luZyByZWFjdGl2ZS1yZXNldFwiKSkpKSBlbHNlIChsZXQgZnJhbWUgPSAoZmlyc3QgKGspKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsoZnJhbWVfdHlwZSAoZnJhbWUpKTsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKExpc3QgW2NhcHR1cmVkOyBmcmFtZTsgKHJlc3QgKGspKV0pIGVsc2UgKHNjYW4gKChyZXN0IChrKSkpICgocHJpbV9jYWxsIFwiYXBwZW5kXCIgW2NhcHR1cmVkOyAoTGlzdCBbZnJhbWVdKV0pKSkpKSkpIGluIChzY2FuIChrb250KSAoKExpc3QgW10pKSkpXG5cbigqICpjdXN0b20tc3BlY2lhbC1mb3JtcyogKilcbmFuZCBjdXN0b21fc3BlY2lhbF9mb3JtcyA9XG4gIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSlcblxuKCogcmVnaXN0ZXItc3BlY2lhbC1mb3JtISAqKVxuYW5kIHJlZ2lzdGVyX3NwZWNpYWxfZm9ybSBuYW1lIGhhbmRsZXIgPVxuICAoc3hfZGljdF9zZXRfYiBjdXN0b21fc3BlY2lhbF9mb3JtcyBuYW1lIGhhbmRsZXIpXG5cbigqICpyZW5kZXItY2hlY2sqICopXG5hbmQgcmVuZGVyX2NoZWNrID1cbiAgTmlsXG5cbigqICpyZW5kZXItZm4qICopXG5hbmQgcmVuZGVyX2ZuID1cbiAgTmlsXG5cbigqICpzdHJpY3QqICopXG5hbmQgX3N0cmljdF8gPSAhX3N0cmljdF9yZWZcblxuKCogc2V0LXN0cmljdCEgKilcbmFuZCBzZXRfc3RyaWN0X2IgdmFsJyA9XG4gIF9zdHJpY3RfcmVmIDo9IHZhbCc7IE5pbFxuXG4oKiAqcHJpbS1wYXJhbS10eXBlcyogKilcbmFuZCBfcHJpbV9wYXJhbV90eXBlc18gPSAhX3ByaW1fcGFyYW1fdHlwZXNfcmVmXG5cbigqIHNldC1wcmltLXBhcmFtLXR5cGVzISAqKVxuYW5kIHNldF9wcmltX3BhcmFtX3R5cGVzX2IgdHlwZXMgPVxuICBfcHJpbV9wYXJhbV90eXBlc19yZWYgOj0gdHlwZXM7IE5pbFxuXG4oKiB2YWx1ZS1tYXRjaGVzLXR5cGU/ICopXG5hbmQgdmFsdWVfbWF0Y2hlc190eXBlX3AgdmFsJyBleHBlY3RlZF90eXBlID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImFueVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcIm51bWJlclwiKV0pKSB0aGVuIChudW1iZXJfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcInN0cmluZ1wiKV0pKSB0aGVuIChzdHJpbmdfcCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImJvb2xlYW5cIildKSkgdGhlbiAoYm9vbGVhbl9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwibmlsXCIpXSkpIHRoZW4gKGlzX25pbCAodmFsJykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImxpc3RcIildKSkgdGhlbiAobGlzdF9wICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwiZGljdFwiKV0pKSB0aGVuIChkaWN0X3AgKHZhbCcpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2V4cGVjdGVkX3R5cGU7IChTdHJpbmcgXCJsYW1iZGFcIildKSkgdGhlbiAoaXNfbGFtYmRhICh2YWwnKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtleHBlY3RlZF90eXBlOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcImtleXdvcmRcIildKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodmFsJykpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHN0cmluZ19wIChleHBlY3RlZF90eXBlKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcImVuZHMtd2l0aD9cIiBbZXhwZWN0ZWRfdHlwZTsgKFN0cmluZyBcIj9cIildKSkpIHRoZW4gKGxldCBfb3IgPSAoaXNfbmlsICh2YWwnKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlICh2YWx1ZV9tYXRjaGVzX3R5cGVfcCAodmFsJykgKChwcmltX2NhbGwgXCJzbGljZVwiIFtleHBlY3RlZF90eXBlOyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCItXCIgWyhwcmltX2NhbGwgXCJzdHJpbmctbGVuZ3RoXCIgW2V4cGVjdGVkX3R5cGVdKTsgKE51bWJlciAxLjApXSldKSkpKSBlbHNlIChCb29sIHRydWUpKSkpKSkpKSkpKSlcblxuKCogc3RyaWN0LWNoZWNrLWFyZ3MgKilcbmFuZCBzdHJpY3RfY2hlY2tfYXJncyBuYW1lIGFyZ3MgPVxuICAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgIV9wcmltX3BhcmFtX3R5cGVzX3JlZikpIHRoZW4gKGxldCBzcGVjID0gKGdldCAoIV9wcmltX3BhcmFtX3R5cGVzX3JlZikgKG5hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5IChzcGVjKSB0aGVuIChsZXQgcG9zaXRpb25hbCA9IChnZXQgKHNwZWMpICgoU3RyaW5nIFwicG9zaXRpb25hbFwiKSkpIGluIGxldCByZXN0X3R5cGUgPSAoZ2V0IChzcGVjKSAoKFN0cmluZyBcInJlc3QtdHlwZVwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKHBvc2l0aW9uYWwpIHRoZW4gKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgobGV0IGlkeCA9IChmaXJzdCAocGFpcikpIGluIGxldCBwYXJhbSA9IChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgcF9uYW1lID0gKGZpcnN0IChwYXJhbSkpIGluIGxldCBwX3R5cGUgPSAobnRoIChwYXJhbSkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgW2lkeDsgKGxlbiAoYXJncykpXSkpIHRoZW4gKGxldCB2YWwnID0gKG50aCAoYXJncykgKGlkeCkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHZhbHVlX21hdGNoZXNfdHlwZV9wICh2YWwnKSAocF90eXBlKSkpKSkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlR5cGUgZXJyb3I6IFwiKTsgbmFtZTsgKFN0cmluZyBcIiBleHBlY3RlZCBcIik7IHBfdHlwZTsgKFN0cmluZyBcIiBmb3IgcGFyYW0gXCIpOyBwX25hbWU7IChTdHJpbmcgXCIsIGdvdCBcIik7ICh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCIgKFwiKTsgKFN0cmluZyAoc3hfc3RyIFt2YWwnXSkpOyAoU3RyaW5nIFwiKVwiKV0pKSkpKSBlbHNlIE5pbCkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSBwIC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHBdKSkgKHN4X3RvX2xpc3QgcG9zaXRpb25hbCkpKSk7IE5pbCkgZWxzZSBOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSByZXN0X3R5cGUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuICgobGV0IF9vciA9IHBvc2l0aW9uYWwgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChMaXN0IFtdKSkpKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gcGFpciAtPiBpZ25vcmUgKChsZXQgaWR4ID0gKGZpcnN0IChwYWlyKSkgaW4gbGV0IHZhbCcgPSAobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgodmFsdWVfbWF0Y2hlc190eXBlX3AgKHZhbCcpIChyZXN0X3R5cGUpKSkpKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVHlwZSBlcnJvcjogXCIpOyBuYW1lOyAoU3RyaW5nIFwiIGV4cGVjdGVkIFwiKTsgcmVzdF90eXBlOyAoU3RyaW5nIFwiIGZvciByZXN0IGFyZyBcIik7IGlkeDsgKFN0cmluZyBcIiwgZ290IFwiKTsgKHR5cGVfb2YgKHZhbCcpKTsgKFN0cmluZyBcIiAoXCIpOyAoU3RyaW5nIChzeF9zdHIgW3ZhbCddKSk7IChTdHJpbmcgXCIpXCIpXSkpKSkpIGVsc2UgTmlsKSkpKSAoc3hfdG9fbGlzdCAoTGlzdCAoTGlzdC5tYXBpIChmdW4gaSB2IC0+IGxldCBpID0gTnVtYmVyIChmbG9hdF9vZl9pbnQgaSkgaW4gKExpc3QgW2k7IHZdKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW2FyZ3M7IChsZW4gKChsZXQgX29yID0gcG9zaXRpb25hbCBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKExpc3QgW10pKSkpXSkpKSkpOyBOaWwpIGVsc2UgTmlsKSkpIGVsc2UgTmlsKSkgZWxzZSBOaWwpXG5cbigqIGNhbGwtbGFtYmRhICopXG5hbmQgY2FsbF9sYW1iZGEgZiBhcmdzIGNhbGxlcl9lbnYgPVxuICAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChjYWxsZXJfZW52KSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAobGVuIChwYXJhbXMpKV0pKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKGxldCBfb3IgPSAobGFtYmRhX25hbWUgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKFN0cmluZyBcImxhbWJkYVwiKSk7IChTdHJpbmcgXCIgZXhwZWN0cyBcIik7IChsZW4gKHBhcmFtcykpOyAoU3RyaW5nIFwiIGFyZ3MsIGdvdCBcIik7IChsZW4gKGFyZ3MpKV0pKSkpKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgW3BhcmFtczsgYXJnc10pKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSBOaWwpKSkgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInNsaWNlXCIgW3BhcmFtczsgKGxlbiAoYXJncykpXSkpOyBOaWwpKSBpbiAobWFrZV90aHVuayAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkpKSkpKVxuXG4oKiBjYWxsLWNvbXBvbmVudCAqKVxuYW5kIGNhbGxfY29tcG9uZW50IGNvbXAgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBwYXJzZWQgPSAocGFyc2Vfa2V5d29yZF9hcmdzIChyYXdfYXJncykgKGVudikpIGluIGxldCBrd2FyZ3MgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCBjaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfbWVyZ2UgKChjb21wb25lbnRfY2xvc3VyZSAoY29tcCkpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBwKSAobGV0IF9vciA9IChkaWN0X2dldCAoa3dhcmdzKSAocCkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IChjb21wb25lbnRfcGFyYW1zIChjb21wKSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoY29tcG9uZW50X2hhc19jaGlsZHJlbiAoY29tcCkpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCJjaGlsZHJlblwiKSkgY2hpbGRyZW4pIGVsc2UgTmlsKSkgaW4gKG1ha2VfdGh1bmsgKChjb21wb25lbnRfYm9keSAoY29tcCkpKSAobG9jYWwpKSkpKVxuXG4oKiBwYXJzZS1rZXl3b3JkLWFyZ3MgKilcbmFuZCBwYXJzZV9rZXl3b3JkX2FyZ3MgcmF3X2FyZ3MgZW52ID1cbiAgKGxldCBrd2FyZ3MgPSAoRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpIGluIGxldCBjaGlsZHJlbiA9IHJlZiAoKExpc3QgW10pKSBpbiBsZXQgaSA9IChOdW1iZXIgMC4wKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBzdGF0ZSBhcmcgLT4gKGxldCBpZHggPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJpXCIpKSkgaW4gbGV0IHNraXAgPSAoZ2V0IChzdGF0ZSkgKChTdHJpbmcgXCJza2lwXCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoc2tpcCkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJza2lwXCIpOyAoQm9vbCBmYWxzZSk7IChTdHJpbmcgXCJpXCIpOyAocHJpbV9jYWxsIFwiaW5jXCIgW2lkeF0pXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoYXJnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKTsgKGxlbiAocmF3X2FyZ3MpKV0pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoc3hfZGljdF9zZXRfYiBrd2FyZ3MgKGtleXdvcmRfbmFtZSAoYXJnKSkgKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHJhd19hcmdzKSAoKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKSkpKSAoZW52KSkpKSkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcInNraXBcIik7IChCb29sIHRydWUpOyAoU3RyaW5nIFwiaVwiKTsgKHByaW1fY2FsbCBcImluY1wiIFtpZHhdKV0pKSBlbHNlIChsZXQgKCkgPSBpZ25vcmUgKChjaGlsZHJlbiA6PSBzeF9hcHBlbmRfYiAhY2hpbGRyZW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGFyZykgKGVudikpKSk7IE5pbCkpIGluIChwcmltX2NhbGwgXCJhc3NvY1wiIFtzdGF0ZTsgKFN0cmluZyBcImlcIik7IChwcmltX2NhbGwgXCJpbmNcIiBbaWR4XSldKSkpKSkpIChsZXQgX2QgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJpXCIpKSAoTnVtYmVyIDAuMCk7IEhhc2h0YmwucmVwbGFjZSBfZCAodmFsdWVfdG9fc3RyIChTdHJpbmcgXCJza2lwXCIpKSAoQm9vbCBmYWxzZSk7ICBEaWN0IF9kKSAoc3hfdG9fbGlzdCByYXdfYXJncykpKSBpbiAoTGlzdCBba3dhcmdzOyAhY2hpbGRyZW5dKSkpXG5cbigqIGNvbmQtc2NoZW1lPyAqKVxuYW5kIGNvbmRfc2NoZW1lX3AgY2xhdXNlcyA9XG4gIChCb29sIChMaXN0LmZvcl9hbGwgKGZ1biBjIC0+IHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGMpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChjKSk7IChOdW1iZXIgMi4wKV0pKSkpIChzeF90b19saXN0IGNsYXVzZXMpKSlcblxuKCogaXMtZWxzZS1jbGF1c2U/ICopXG5hbmQgaXNfZWxzZV9jbGF1c2UgdGVzdCA9XG4gIChsZXQgX29yID0gKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHRlc3QpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCJlbHNlXCIpXSkpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVzdCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsoc3ltYm9sX25hbWUgKHRlc3QpKTsgKFN0cmluZyBcImVsc2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICh0ZXN0KSk7IChTdHJpbmcgXCI6ZWxzZVwiKV0pKSkpXG5cbigqIHNmLW5hbWVkLWxldCAqKVxuYW5kIHNmX25hbWVkX2xldCBhcmdzIGVudiA9XG4gIChsZXQgbG9vcF9uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBiaW5kaW5ncyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcGFyYW1zID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCBpbml0cyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAoKGZpcnN0IChiaW5kaW5ncykpKSk7IChOdW1iZXIgMi4wKV0pKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gYmluZGluZyAtPiBpZ25vcmUgKChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKGZpcnN0IChiaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChiaW5kaW5nKSkpKSBlbHNlIChmaXJzdCAoYmluZGluZykpKTsgTmlsKSkgaW4gKGluaXRzIDo9IHN4X2FwcGVuZF9iICFpbml0cyAobnRoIChiaW5kaW5nKSAoKE51bWJlciAxLjApKSk7IE5pbCkpKSkgKHN4X3RvX2xpc3QgYmluZGluZ3MpOyBOaWwpIGVsc2UgKExpc3QuZm9sZF9sZWZ0IChmdW4gX2FjYyBwYWlyX2lkeCAtPiAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGJpbmRpbmdzKSAoKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpIGVsc2UgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSk7IE5pbCkpIGluIChpbml0cyA6PSBzeF9hcHBlbmRfYiAhaW5pdHMgKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiaW5jXCIgWyhwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKV0pKSk7IE5pbCkpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSkgaW4gKGxldCBsb29wX2JvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5KSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keSkpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5KSkpIGluIGxldCBsb29wX2ZuID0gKG1ha2VfbGFtYmRhICghcGFyYW1zKSAobG9vcF9ib2R5KSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNldF9sYW1iZGFfbmFtZSBsb29wX2ZuIChzeF90b19zdHJpbmcgbG9vcF9uYW1lKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCAobGFtYmRhX2Nsb3N1cmUgKGxvb3BfZm4pKSAoc3hfdG9fc3RyaW5nIGxvb3BfbmFtZSkgbG9vcF9mbikpIGluIChsZXQgaW5pdF92YWxzID0gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSkpIChzeF90b19saXN0ICFpbml0cykpKSBpbiAodHJhbXBvbGluZSAoY2FsbF9sYW1iZGEgKGxvb3BfZm4pIChpbml0X3ZhbHMpIChlbnYpKSkpKSkpKSlcblxuKCogc2YtbGFtYmRhICopXG5hbmQgc2ZfbGFtYmRhIGFyZ3MgZW52ID1cbiAgKGxldCBwYXJhbXNfZXhwciA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5X2V4cHJzID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgYm9keSA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHlfZXhwcnMpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKGZpcnN0IChib2R5X2V4cHJzKSkgZWxzZSAoY29ucyAoKG1ha2Vfc3ltYm9sICgoU3RyaW5nIFwiYmVnaW5cIikpKSkgKGJvZHlfZXhwcnMpKSkgaW4gbGV0IHBhcmFtX25hbWVzID0gKExpc3QgKExpc3QubWFwIChmdW4gcCAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChwKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKHApICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiYXNcIildKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgZWxzZSBwKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKSkpIGluIChtYWtlX2xhbWJkYSAocGFyYW1fbmFtZXMpIChib2R5KSAoZW52KSkpXG5cbigqIHNmLWRlZmNvbXAgKilcbmFuZCBzZl9kZWZjb21wIGFyZ3MgZW52ID1cbiAgKGxldCBuYW1lX3N5bSA9IChmaXJzdCAoYXJncykpIGluIGxldCBwYXJhbXNfcmF3ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKGxhc3QgKGFyZ3MpKSBpbiBsZXQgY29tcF9uYW1lID0gKHN0cmlwX3ByZWZpeCAoKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSAoKFN0cmluZyBcIn5cIikpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX2NvbXBfcGFyYW1zIChwYXJhbXNfcmF3KSkgaW4gbGV0IHBhcmFtcyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGhhc19jaGlsZHJlbiA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBwYXJhbV90eXBlcyA9IChudGggKHBhcnNlZCkgKChOdW1iZXIgMi4wKSkpIGluIGxldCBhZmZpbml0eSA9IChkZWZjb21wX2t3YXJnIChhcmdzKSAoKFN0cmluZyBcImFmZmluaXR5XCIpKSAoKFN0cmluZyBcImF1dG9cIikpKSBpbiAobGV0IGNvbXAgPSAobWFrZV9jb21wb25lbnQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpIChhZmZpbml0eSkpIGluIGxldCBlZmZlY3RzID0gKGRlZmNvbXBfa3dhcmcgKGFyZ3MpICgoU3RyaW5nIFwiZWZmZWN0c1wiKSkgKE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAocGFyYW1fdHlwZXMpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKHByaW1fY2FsbCBcImtleXNcIiBbcGFyYW1fdHlwZXNdKSkpKSkpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfcGFyYW1fdHlwZXNfYiAoY29tcCkgKHBhcmFtX3R5cGVzKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19uaWwgKGVmZmVjdHMpKSkpKSkpIHRoZW4gKGxldCBlZmZlY3RfbGlzdCA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChlZmZlY3RzKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2VdKSkpKSAoc3hfdG9fbGlzdCBlZmZlY3RzKSkpIGVsc2UgKExpc3QgWyhTdHJpbmcgKHN4X3N0ciBbZWZmZWN0c10pKV0pKSBpbiBsZXQgZWZmZWN0X2FubnMgPSAoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkpIHRoZW4gKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkpIGVsc2UgKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN4X2RpY3Rfc2V0X2IgZWZmZWN0X2FubnMgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpIGVmZmVjdF9saXN0KSkgaW4gKGVudl9iaW5kIGVudiAoc3hfdG9fc3RyaW5nIChTdHJpbmcgXCIqZWZmZWN0LWFubm90YXRpb25zKlwiKSkgZWZmZWN0X2FubnMpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChjb21wKSAoKGVudl9nZXQgKGVudikgKChTdHJpbmcgXCIqY3VycmVudC1maWxlKlwiKSkpKSkgZWxzZSBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBjb21wKSkgaW4gY29tcCkpKSkpKVxuXG4oKiBkZWZjb21wLWt3YXJnICopXG5hbmQgZGVmY29tcF9rd2FyZyBhcmdzIGtleSBkZWZhdWx0ID1cbiAgKGxldCBlbmQnID0gKHByaW1fY2FsbCBcIi1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoZGVmYXVsdCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGkgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKGkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpIChpKSkpKTsga2V5XSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIjxcIiBbKHByaW1fY2FsbCBcIitcIiBbaTsgKE51bWJlciAxLjApXSk7IGVuZCddKSkpKSB0aGVuIChsZXQgdmFsJyA9IChudGggKGFyZ3MpICgocHJpbV9jYWxsIFwiK1wiIFtpOyAoTnVtYmVyIDEuMCldKSkpIGluIChyZXN1bHQnIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICh2YWwnKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkpIHRoZW4gKGtleXdvcmRfbmFtZSAodmFsJykpIGVsc2UgdmFsJyk7IE5pbCkpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJyYW5nZVwiIFsoTnVtYmVyIDIuMCk7IGVuZCc7IChOdW1iZXIgMS4wKV0pKTsgTmlsKSkgaW4gIXJlc3VsdCcpKVxuXG4oKiBwYXJzZS1jb21wLXBhcmFtcyAqKVxuYW5kIHBhcnNlX2NvbXBfcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHBhcmFtX3R5cGVzID0gKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gcmVmICgoQm9vbCBmYWxzZSkpIGluIGxldCBpbl9rZXkgPSByZWYgKChCb29sIGZhbHNlKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHApKTsgKE51bWJlciAzLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocCkpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAocCkgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJhc1wiKV0pKSkpKSkgdGhlbiAobGV0IG5hbWUgPSAoc3ltYm9sX25hbWUgKChmaXJzdCAocCkpKSkgaW4gbGV0IHB0eXBlID0gKG50aCAocCkgKChOdW1iZXIgMi4wKSkpIGluIChsZXQgdHlwZV92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocHR5cGUpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocHR5cGUpKSBlbHNlIHB0eXBlKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKCFoYXNfY2hpbGRyZW4pKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpKSBpbiAoc3hfZGljdF9zZXRfYiBwYXJhbV90eXBlcyBuYW1lIHR5cGVfdmFsKSkgZWxzZSBOaWwpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChwKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZrZXlcIildKSkgdGhlbiAoaW5fa2V5IDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIiZyZXN0XCIpXSkpIHRoZW4gKGhhc19jaGlsZHJlbiA6PSAoQm9vbCB0cnVlKTsgTmlsKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCImY2hpbGRyZW5cIildKSkgdGhlbiAoaGFzX2NoaWxkcmVuIDo9IChCb29sIHRydWUpOyBOaWwpIGVsc2UgKGlmIHN4X3RydXRoeSAoIWhhc19jaGlsZHJlbikgdGhlbiBOaWwgZWxzZSAoaWYgc3hfdHJ1dGh5ICghaW5fa2V5KSB0aGVuIChwYXJhbXMgOj0gc3hfYXBwZW5kX2IgIXBhcmFtcyBuYW1lOyBOaWwpIGVsc2UgKHBhcmFtcyA6PSBzeF9hcHBlbmRfYiAhcGFyYW1zIG5hbWU7IE5pbCkpKSkpKSkgZWxzZSBOaWwpKSkpIChzeF90b19saXN0IHBhcmFtc19leHByKTsgTmlsKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFoYXNfY2hpbGRyZW47IHBhcmFtX3R5cGVzXSkpKVxuXG4oKiBzZi1kZWZpc2xhbmQgKilcbmFuZCBzZl9kZWZpc2xhbmQgYXJncyBlbnYgPVxuICAobGV0IG5hbWVfc3ltID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHBhcmFtc19yYXcgPSAobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGJvZHlfZXhwcnMgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAyLjApXSkgaW4gbGV0IGJvZHkgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChib2R5X2V4cHJzKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChmaXJzdCAoYm9keV9leHBycykpIGVsc2UgKGNvbnMgKChtYWtlX3N5bWJvbCAoKFN0cmluZyBcImJlZ2luXCIpKSkpIChib2R5X2V4cHJzKSkpIGluIGxldCBjb21wX25hbWUgPSAoc3RyaXBfcHJlZml4ICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpICgoU3RyaW5nIFwiflwiKSkpIGluIGxldCBwYXJzZWQgPSAocGFyc2VfY29tcF9wYXJhbXMgKHBhcmFtc19yYXcpKSBpbiBsZXQgcGFyYW1zID0gKGZpcnN0IChwYXJzZWQpKSBpbiBsZXQgaGFzX2NoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBpc2xhbmQgPSAobWFrZV9pc2xhbmQgKGNvbXBfbmFtZSkgKHBhcmFtcykgKGhhc19jaGlsZHJlbikgKGJvZHkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgoZW52X2hhcyAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpIHRoZW4gKGNvbXBvbmVudF9zZXRfZmlsZV9iIChpc2xhbmQpICgoZW52X2dldCAoZW52KSAoKFN0cmluZyBcIipjdXJyZW50LWZpbGUqXCIpKSkpKSBlbHNlIE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfYmluZCBlbnYgKHN4X3RvX3N0cmluZyAoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpIGlzbGFuZCkpIGluIGlzbGFuZCkpKSlcblxuKCogc2YtZGVmbWFjcm8gKilcbmFuZCBzZl9kZWZtYWNybyBhcmdzIGVudiA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgcGFyYW1zX3JhdyA9IChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSBpbiBsZXQgYm9keSA9IChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcGFyc2VkID0gKHBhcnNlX21hY3JvX3BhcmFtcyAocGFyYW1zX3JhdykpIGluIGxldCBwYXJhbXMgPSAoZmlyc3QgKHBhcnNlZCkpIGluIGxldCByZXN0X3BhcmFtID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBtYWMgPSAobWFrZV9tYWNybyAocGFyYW1zKSAocmVzdF9wYXJhbSkgKGJvZHkpIChlbnYpICgoc3ltYm9sX25hbWUgKG5hbWVfc3ltKSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChuYW1lX3N5bSkpKSBtYWMpKSBpbiBtYWMpKSlcblxuKCogcGFyc2UtbWFjcm8tcGFyYW1zICopXG5hbmQgcGFyc2VfbWFjcm9fcGFyYW1zIHBhcmFtc19leHByID1cbiAgKGxldCBwYXJhbXMgPSByZWYgKChMaXN0IFtdKSkgaW4gbGV0IHJlc3RfcGFyYW0gPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuZm9sZF9sZWZ0IChmdW4gc3RhdGUgcCAtPiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAocCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lIChwKSk7IChTdHJpbmcgXCImcmVzdFwiKV0pKSkgdGhlbiAocHJpbV9jYWxsIFwiYXNzb2NcIiBbc3RhdGU7IChTdHJpbmcgXCJpbi1yZXN0XCIpOyAoQm9vbCB0cnVlKV0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGdldCAoc3RhdGUpICgoU3RyaW5nIFwiaW4tcmVzdFwiKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChyZXN0X3BhcmFtIDo9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChwKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKHApKSBlbHNlIHApOyBOaWwpKSBpbiBzdGF0ZSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgocGFyYW1zIDo9IHN4X2FwcGVuZF9iICFwYXJhbXMgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKHApKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAocCkpIGVsc2UgcCk7IE5pbCkpIGluIHN0YXRlKSkpKSAobGV0IF9kID0gSGFzaHRibC5jcmVhdGUgMSBpbiBIYXNodGJsLnJlcGxhY2UgX2QgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIFwiaW4tcmVzdFwiKSkgKEJvb2wgZmFsc2UpOyAgRGljdCBfZCkgKHN4X3RvX2xpc3QgcGFyYW1zX2V4cHIpKSkgaW4gKExpc3QgWyFwYXJhbXM7ICFyZXN0X3BhcmFtXSkpKVxuXG4oKiBxcS1leHBhbmQgKilcbmFuZCBxcV9leHBhbmQgdGVtcGxhdGUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAodGVtcGxhdGUpKTsgKFN0cmluZyBcImxpc3RcIildKSkpKSkpIHRoZW4gdGVtcGxhdGUgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAodGVtcGxhdGUpKSkgdGhlbiAoTGlzdCBbXSkgZWxzZSAobGV0IGhlYWQgPSAoZmlyc3QgKHRlbXBsYXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhzeW1ib2xfbmFtZSAoaGVhZCkpOyAoU3RyaW5nIFwidW5xdW90ZVwiKV0pKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAodGVtcGxhdGUpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biByZXN1bHQnIGl0ZW0gLT4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGl0ZW0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChpdGVtKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGl0ZW0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKHN5bWJvbF9uYW1lICgoZmlyc3QgKGl0ZW0pKSkpOyAoU3RyaW5nIFwic3BsaWNlLXVucXVvdGVcIildKSkpKSkgdGhlbiAobGV0IHNwbGljZWQgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoaXRlbSkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoc3BsaWNlZCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSB0aGVuIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0Jzsgc3BsaWNlZF0pIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc3BsaWNlZCkpKSB0aGVuIHJlc3VsdCcgZWxzZSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW3Jlc3VsdCc7IChMaXN0IFtzcGxpY2VkXSldKSkpKSBlbHNlIChwcmltX2NhbGwgXCJjb25jYXRcIiBbcmVzdWx0JzsgKExpc3QgWyhxcV9leHBhbmQgKGl0ZW0pIChlbnYpKV0pXSkpKSAoTGlzdCBbXSkgKHN4X3RvX2xpc3QgdGVtcGxhdGUpKSkpKSlcblxuKCogc2YtbGV0cmVjICopXG5hbmQgc2ZfbGV0cmVjIGFyZ3MgZW52ID1cbiAgKGxldCBiaW5kaW5ncyA9IChmaXJzdCAoYXJncykpIGluIGxldCBib2R5ID0gKHJlc3QgKGFyZ3MpKSBpbiBsZXQgbG9jYWwgPSAoZW52X2V4dGVuZCAoZW52KSkgaW4gbGV0IG5hbWVzID0gcmVmICgoTGlzdCBbXSkpIGluIGxldCB2YWxfZXhwcnMgPSByZWYgKChMaXN0IFtdKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKExpc3QuaXRlciAoZnVuIGJpbmRpbmcgLT4gaWdub3JlICgobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGJpbmRpbmcpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKG5hbWVzIDo9IHN4X2FwcGVuZF9iICFuYW1lcyB2bmFtZTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHZhbF9leHBycyA6PSBzeF9hcHBlbmRfYiAhdmFsX2V4cHJzIChudGggKGJpbmRpbmcpICgoTnVtYmVyIDEuMCkpKTsgTmlsKSkgaW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgdm5hbWUpIE5pbCkpKSkpKSAoc3hfdG9fbGlzdCBiaW5kaW5ncyk7IE5pbCkgZWxzZSAoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIHBhaXJfaWR4IC0+IChsZXQgdm5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtwYWlyX2lkeDsgKE51bWJlciAyLjApXSkpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lICgobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSkgZWxzZSAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCIqXCIgW3BhaXJfaWR4OyAoTnVtYmVyIDIuMCldKSkpKSBpbiBsZXQgdmFsX2V4cHIgPSAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbcGFpcl9pZHg7IChOdW1iZXIgMi4wKV0pXSkpKSBpbiAobGV0ICgpID0gaWdub3JlICgobmFtZXMgOj0gc3hfYXBwZW5kX2IgIW5hbWVzIHZuYW1lOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgodmFsX2V4cHJzIDo9IHN4X2FwcGVuZF9iICF2YWxfZXhwcnMgdmFsX2V4cHI7IE5pbCkpIGluIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHZuYW1lKSBOaWwpKSkpKSBOaWwgKHN4X3RvX2xpc3QgKHByaW1fY2FsbCBcInJhbmdlXCIgWyhOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcIi9cIiBbKGxlbiAoYmluZGluZ3MpKTsgKE51bWJlciAyLjApXSldKSkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGxldCB2YWx1ZXMgPSAoTGlzdCAoTGlzdC5tYXAgKGZ1biBlIC0+ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAobG9jYWwpKSkpKSAoc3hfdG9fbGlzdCAhdmFsX2V4cHJzKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChMaXN0Lml0ZXIgKGZ1biBwYWlyIC0+IGlnbm9yZSAoKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKGZpcnN0IChwYWlyKSkpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwiemlwXCIgWyFuYW1lczsgdmFsdWVzXSkpOyBOaWwpKSBpbiAoTGlzdC5pdGVyIChmdW4gdmFsJyAtPiBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKHZhbCcpKSkgdGhlbiAoTGlzdC5pdGVyIChmdW4gbiAtPiBpZ25vcmUgKChlbnZfYmluZCAobGFtYmRhX2Nsb3N1cmUgKHZhbCcpKSAoc3hfdG9fc3RyaW5nIG4pIChlbnZfZ2V0IChsb2NhbCkgKG4pKSkpKSAoc3hfdG9fbGlzdCAhbmFtZXMpOyBOaWwpIGVsc2UgTmlsKSkpIChzeF90b19saXN0IHZhbHVlcyk7IE5pbCkpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGxvY2FsKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJzbGljZVwiIFtib2R5OyAoTnVtYmVyIDAuMCk7IChwcmltX2NhbGwgXCJkZWNcIiBbKGxlbiAoYm9keSkpXSldKSk7IE5pbCkpIGluIChtYWtlX3RodW5rICgobGFzdCAoYm9keSkpKSAobG9jYWwpKSkpKSlcblxuKCogc3RlcC1zZi1sZXRyZWMgKilcbmFuZCBzdGVwX3NmX2xldHJlYyBhcmdzIGVudiBrb250ID1cbiAgKGxldCB0aGsgPSAoc2ZfbGV0cmVjIChhcmdzKSAoZW52KSkgaW4gKG1ha2VfY2VrX3N0YXRlICgodGh1bmtfZXhwciAodGhrKSkpICgodGh1bmtfZW52ICh0aGspKSkgKGtvbnQpKSlcblxuKCogc2YtZHluYW1pYy13aW5kICopXG5hbmQgc2ZfZHluYW1pY193aW5kIGFyZ3MgZW52ID1cbiAgKGxldCBiZWZvcmUgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKGZpcnN0IChhcmdzKSkpIChlbnYpKSkpIGluIGxldCBib2R5ID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gbGV0IGFmdGVyID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKGFyZ3MpICgoTnVtYmVyIDIuMCkpKSkgKGVudikpKSkgaW4gKGR5bmFtaWNfd2luZF9jYWxsIChiZWZvcmUpIChib2R5KSAoYWZ0ZXIpIChlbnYpKSlcblxuKCogc2Ytc2NvcGUgKilcbmFuZCBzZl9zY29wZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3QgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbYXJnczsgKE51bWJlciAxLjApXSkgaW4gbGV0IHZhbCcgPSByZWYgKE5pbCkgaW4gbGV0IGJvZHlfZXhwcnMgPSByZWYgKE5pbCkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKHJlc3QpKTsgKE51bWJlciAyLjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAocmVzdCkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0KSkpKTsgKFN0cmluZyBcInZhbHVlXCIpXSkpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgodmFsJyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAocmVzdCkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKTsgTmlsKSkgaW4gKGJvZHlfZXhwcnMgOj0gKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3Q7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5X2V4cHJzIDo9IHJlc3Q7IE5pbCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKCF2YWwnKSkpIGluIChsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gZSAtPiBpZ25vcmUgKChyZXN1bHQnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByIChlKSAoZW52KSkpKTsgTmlsKSkpIChzeF90b19saXN0ICFib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSkpKVxuXG4oKiBzZi1wcm92aWRlICopXG5hbmQgc2ZfcHJvdmlkZSBhcmdzIGVudiA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keV9leHBycyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiBsZXQgcmVzdWx0JyA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2NvcGVfcHVzaCAobmFtZSkgKHZhbCcpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGUgLT4gaWdub3JlICgocmVzdWx0JyA6PSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoZSkgKGVudikpKSk7IE5pbCkpKSAoc3hfdG9fbGlzdCBib2R5X2V4cHJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHNjb3BlX3BvcCAobmFtZSkpKSBpbiAhcmVzdWx0JykpKSlcblxuKCogZXhwYW5kLW1hY3JvICopXG5hbmQgZXhwYW5kX21hY3JvIG1hYyByYXdfYXJncyBlbnYgPVxuICAobGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKG1hY3JvX2Nsb3N1cmUgKG1hYykpKSAoZW52KSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpOyAobGVuIChyYXdfYXJncykpXSkpIHRoZW4gKG50aCAocmF3X2FyZ3MpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpKSBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKExpc3QgKExpc3QubWFwaSAoZnVuIGkgcCAtPiBsZXQgaSA9IE51bWJlciAoZmxvYXRfb2ZfaW50IGkpIGluIChMaXN0IFtwOyBpXSkpIChzeF90b19saXN0IChtYWNyb19wYXJhbXMgKG1hYykpKSkpKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGlmIHN4X3RydXRoeSAoKG1hY3JvX3Jlc3RfcGFyYW0gKG1hYykpKSB0aGVuIChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIChtYWNyb19yZXN0X3BhcmFtIChtYWMpKSkgKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jhd19hcmdzOyAobGVuICgobWFjcm9fcGFyYW1zIChtYWMpKSkpXSkpIGVsc2UgTmlsKSkgaW4gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChtYWNyb19ib2R5IChtYWMpKSkgKGxvY2FsKSkpKSkpKVxuXG4oKiBjZWstcnVuIOKAlCBpdGVyYXRpdmUgdG8gYXZvaWQgT0NhbWwvV0FTTSBzdGFjayBvdmVyZmxvdyAqKVxuYW5kIGNla19ydW4gc3RhdGUgPVxuICBsZXQgcyA9IHJlZiBzdGF0ZSBpblxuICAodHJ5XG4gICAgd2hpbGUgbm90IChzeF90cnV0aHkgKGNla190ZXJtaW5hbF9wICFzKSkgZG9cbiAgICAgIHMgOj0gY2VrX3N0ZXAgIXNcbiAgICBkb25lO1xuICAgIGNla192YWx1ZSAhc1xuICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgKGlmICFfbGFzdF9lcnJvcl9rb250ID0gTmlsIHRoZW4gX2xhc3RfZXJyb3Jfa29udCA6PSBjZWtfa29udCAhcyk7XG4gICAgcmFpc2UgKEV2YWxfZXJyb3IgbXNnKSlcblxuKCogY2VrLXN0ZXAgKilcbmFuZCBjZWtfc3RlcCBzdGF0ZSA9XG4gIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhjZWtfcGhhc2UgKHN0YXRlKSk7IChTdHJpbmcgXCJldmFsXCIpXSkpIHRoZW4gKHN0ZXBfZXZhbCAoc3RhdGUpKSBlbHNlIChzdGVwX2NvbnRpbnVlIChzdGF0ZSkpKVxuXG4oKiBzdGVwLWV2YWwgKilcbmFuZCBzdGVwX2V2YWwgc3RhdGUgPVxuICAobGV0IGV4cHIgPSAoY2VrX2NvbnRyb2wgKHN0YXRlKSkgaW4gbGV0IGVudiA9IChjZWtfZW52IChzdGF0ZSkpIGluIGxldCBrb250ID0gKGNla19rb250IChzdGF0ZSkpIGluIChsZXQgX21hdGNoX3ZhbCA9ICh0eXBlX29mIChleHByKSkgaW4gKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwibnVtYmVyXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3RyaW5nXCIpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChleHByKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwiYm9vbGVhblwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcIm5pbFwiKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIF9tYXRjaF92YWwgPSAoU3RyaW5nIFwic3ltYm9sXCIpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChleHByKSkgaW4gKGxldCB2YWwnID0gKGlmIHN4X3RydXRoeSAoKGVudl9oYXMgKGVudikgKG5hbWUpKSkgdGhlbiAoZW52X2dldCAoZW52KSAobmFtZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX3ByaW1pdGl2ZSAobmFtZSkpKSB0aGVuIChnZXRfcHJpbWl0aXZlIChuYW1lKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwidHJ1ZVwiKV0pKSB0aGVuIChCb29sIHRydWUpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZhbHNlXCIpXSkpIHRoZW4gKEJvb2wgZmFsc2UpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm5pbFwiKV0pKSB0aGVuIE5pbCBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIlVuZGVmaW5lZCBzeW1ib2w6IFwiKTsgbmFtZV0pKSkpKSkpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChpc19uaWwgKHZhbCcpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwic3RhcnRzLXdpdGg/XCIgW25hbWU7IChTdHJpbmcgXCJ+XCIpXSkpKSB0aGVuIChkZWJ1Z19sb2cgKChTdHJpbmcgXCJDb21wb25lbnQgbm90IGZvdW5kOlwiKSkgKG5hbWUpKSBlbHNlIE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsJykgKGVudikgKGtvbnQpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImtleXdvcmRcIikgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChrZXl3b3JkX25hbWUgKGV4cHIpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImRpY3RcIikgdGhlbiAobGV0IGtzID0gKHByaW1fY2FsbCBcImtleXNcIiBbZXhwcl0pIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChrcykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgZmlyc3Rfa2V5ID0gKGZpcnN0IChrcykpIGluIGxldCByZW1haW5pbmdfZW50cmllcyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gayAtPiBpZ25vcmUgKChyZW1haW5pbmdfZW50cmllcyA6PSBzeF9hcHBlbmRfYiAhcmVtYWluaW5nX2VudHJpZXMgKExpc3QgW2s7IChnZXQgKGV4cHIpIChrKSldKTsgTmlsKSkpIChzeF90b19saXN0IChyZXN0IChrcykpKTsgTmlsKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChleHByKSAoZmlyc3Rfa2V5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kaWN0X2ZyYW1lICghcmVtYWluaW5nX2VudHJpZXMpICgoTGlzdCBbKExpc3QgW2ZpcnN0X2tleV0pXSkpIChlbnYpKSkgKGtvbnQpKSkpKSkpKSBlbHNlIChpZiBfbWF0Y2hfdmFsID0gKFN0cmluZyBcImxpc3RcIikgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoZXhwcikpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKExpc3QgW10pKSAoZW52KSAoa29udCkpIGVsc2UgKHN0ZXBfZXZhbF9saXN0IChleHByKSAoZW52KSAoa29udCkpKSBlbHNlIChtYWtlX2Nla192YWx1ZSAoZXhwcikgKGVudikgKGtvbnQpKSkpKSkpKSkpKSlcblxuKCogc3RlcC1ldmFsLWxpc3QgKilcbmFuZCBzdGVwX2V2YWxfbGlzdCBleHByIGVudiBrb250ID1cbiAgKGxldCBoZWFkID0gKGZpcnN0IChleHByKSkgaW4gbGV0IGFyZ3MgPSAocmVzdCAoZXhwcikpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGhlYWQpKTsgKFN0cmluZyBcImxhbWJkYVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwibGlzdFwiKV0pKSkpKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChleHByKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoZXhwcikpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfbWFwX2ZyYW1lIChOaWwpICgocmVzdCAoZXhwcikpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKHN5bWJvbF9uYW1lIChoZWFkKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfaWYgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwid2hlblwiKV0pKSB0aGVuIChzdGVwX3NmX3doZW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChzdGVwX3NmX2NvbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiY2FzZVwiKV0pKSB0aGVuIChzdGVwX3NmX2Nhc2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiYW5kXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYW5kIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm9yXCIpXSkpIHRoZW4gKHN0ZXBfc2Zfb3IgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGV0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldCpcIildKSkgdGhlbiAoc3RlcF9zZl9sZXQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibGFtYmRhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZuXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfbGFtYmRhIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChzdGVwX3NmX2RlZmluZSAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJkZWZjb21wXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmY29tcCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZmlzbGFuZFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2RlZmlzbGFuZCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRlZm1hY3JvXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfZGVmbWFjcm8gKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJiZWdpblwiKV0pKSB0aGVuIChzdGVwX3NmX2JlZ2luIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImRvXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfYmVnaW4gKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicXVvdGVcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gTmlsIGVsc2UgKGZpcnN0IChhcmdzKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInF1YXNpcXVvdGVcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChxcV9leHBhbmQgKChmaXJzdCAoYXJncykpKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiLT5cIildKSkgdGhlbiAoc3RlcF9zZl90aHJlYWRfZmlyc3QgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic2V0IVwiKV0pKSB0aGVuIChzdGVwX3NmX3NldF9iIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImxldHJlY1wiKV0pKSB0aGVuIChzdGVwX3NmX2xldHJlYyAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZXNldFwiKV0pKSB0aGVuIChzdGVwX3NmX3Jlc2V0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNoaWZ0XCIpXSkpIHRoZW4gKHN0ZXBfc2Zfc2hpZnQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZGVyZWZcIildKSkgdGhlbiAoc3RlcF9zZl9kZXJlZiAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJzY29wZVwiKV0pKSB0aGVuIChzdGVwX3NmX3Njb3BlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAoc3RlcF9zZl9wcm92aWRlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImNvbnRleHRcIildKSkgdGhlbiAoc3RlcF9zZl9jb250ZXh0IChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImVtaXQhXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJlbWl0dGVkXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfZW1pdHRlZCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJoYW5kbGVyLWJpbmRcIildKSkgdGhlbiAoc3RlcF9zZl9oYW5kbGVyX2JpbmQgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwicmVzdGFydC1jYXNlXCIpXSkpIHRoZW4gKHN0ZXBfc2ZfcmVzdGFydF9jYXNlIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcInNpZ25hbC1jb25kaXRpb25cIildKSkgdGhlbiAoc3RlcF9zZl9zaWduYWwgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiaW52b2tlLXJlc3RhcnRcIildKSkgdGhlbiAoc3RlcF9zZl9pbnZva2VfcmVzdGFydCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXRjaFwiKV0pKSB0aGVuIChzdGVwX3NmX21hdGNoIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImR5bmFtaWMtd2luZFwiKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKHNmX2R5bmFtaWNfd2luZCAoYXJncykgKGVudikpKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcFwiKV0pKSB0aGVuIChzdGVwX2hvX21hcCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJtYXAtaW5kZXhlZFwiKV0pKSB0aGVuIChzdGVwX2hvX21hcF9pbmRleGVkIChhcmdzKSAoZW52KSAoa29udCkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pKSB0aGVuIChzdGVwX2hvX2ZpbHRlciAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAoc3RlcF9ob19yZWR1Y2UgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pKSB0aGVuIChzdGVwX2hvX3NvbWUgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZXZlcnk/XCIpXSkpIHRoZW4gKHN0ZXBfaG9fZXZlcnkgKGFyZ3MpIChlbnYpIChrb250KSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwiZm9yLWVhY2hcIildKSkgdGhlbiAoc3RlcF9ob19mb3JfZWFjaCAoYXJncykgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCJoYXMta2V5P1wiIFtjdXN0b21fc3BlY2lhbF9mb3JtczsgbmFtZV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGNla19jYWxsICgoZ2V0IChjdXN0b21fc3BlY2lhbF9mb3JtcykgKG5hbWUpKSkgKExpc3QgW2FyZ3M7IGVudl0pKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChlbnZfaGFzIChlbnYpIChuYW1lKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGlzX21hY3JvICgoZW52X2dldCAoZW52KSAobmFtZSkpKSkpKSB0aGVuIChsZXQgbWFjID0gKGVudl9nZXQgKGVudikgKG5hbWUpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChleHBhbmRfbWFjcm8gKG1hYykgKGFyZ3MpIChlbnYpKSkgKGVudikgKGtvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSByZW5kZXJfY2hlY2sgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGNla19jYWxsIChyZW5kZXJfY2hlY2spIChMaXN0IFtleHByOyBlbnZdKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKGNla19jYWxsIChyZW5kZXJfZm4pIChMaXN0IFtleHByOyBlbnZdKSkpIChlbnYpIChrb250KSkgZWxzZSAoc3RlcF9ldmFsX2NhbGwgKGhlYWQpIChhcmdzKSAoZW52KSAoa29udCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSBlbHNlIChzdGVwX2V2YWxfY2FsbCAoaGVhZCkgKGFyZ3MpIChlbnYpIChrb250KSkpKSlcblxuKCogbWF0Y2gtZmluZC1jbGF1c2UgKilcbmFuZCBtYXRjaF9maW5kX2NsYXVzZSB2YWwnIGNsYXVzZXMgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNsYXVzZXMpKSkgdGhlbiBOaWwgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBwYXR0ZXJuID0gKGZpcnN0IChjbGF1c2UpKSBpbiBsZXQgYm9keSA9IChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAocGF0dGVybikgKHZhbCcpIChsb2NhbCkpKSB0aGVuIChMaXN0IFtsb2NhbDsgYm9keV0pIGVsc2UgKG1hdGNoX2ZpbmRfY2xhdXNlICh2YWwnKSAoKHJlc3QgKGNsYXVzZXMpKSkgKGVudikpKSkpXG5cbigqIG1hdGNoLXBhdHRlcm4gKilcbmFuZCBtYXRjaF9wYXR0ZXJuIHBhdHRlcm4gdmFsdWUgZW52ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbcGF0dGVybjsgKFN5bWJvbCBcIl9cIildKSkgdGhlbiAoQm9vbCB0cnVlKSBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChsaXN0X3AgKHBhdHRlcm4pKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsobGVuIChwYXR0ZXJuKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhmaXJzdCAocGF0dGVybikpOyAoU3ltYm9sIFwiP1wiKV0pKSkpIHRoZW4gKGxldCBwcmVkID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChudGggKHBhdHRlcm4pICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSkgaW4gKGNla19jYWxsIChwcmVkKSAoKExpc3QgW3ZhbHVlXSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAobGlzdF9wIChwYXR0ZXJuKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoZW1wdHlfcCAocGF0dGVybikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoZmlyc3QgKHBhdHRlcm4pKTsgKFN5bWJvbCBcInF1b3RlXCIpXSkpKSkgdGhlbiAocHJpbV9jYWxsIFwiPVwiIFt2YWx1ZTsgKG50aCAocGF0dGVybikgKChOdW1iZXIgMS4wKSkpXSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoc3ltYm9sX3AgKHBhdHRlcm4pKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgZW52IChzeF90b19zdHJpbmcgKHN5bWJvbF9uYW1lIChwYXR0ZXJuKSkpIHZhbHVlKSkgaW4gKEJvb2wgdHJ1ZSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGxpc3RfcCAocGF0dGVybikpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsaXN0X3AgKHZhbHVlKSkpKSB0aGVuIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocGF0dGVybikpOyAobGVuICh2YWx1ZSkpXSkpKSkpKSB0aGVuIChCb29sIGZhbHNlKSBlbHNlIChsZXQgcGFpcnMgPSAocHJpbV9jYWxsIFwiemlwXCIgW3BhdHRlcm47IHZhbHVlXSkgaW4gKEJvb2wgKExpc3QuZm9yX2FsbCAoZnVuIHBhaXIgLT4gc3hfdHJ1dGh5ICgobWF0Y2hfcGF0dGVybiAoKGZpcnN0IChwYWlyKSkpICgobnRoIChwYWlyKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIChzeF90b19saXN0IHBhaXJzKSkpKSkgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFtwYXR0ZXJuOyB2YWx1ZV0pKSkpKSlcblxuKCogc3RlcC1zZi1tYXRjaCAqKVxuYW5kIHN0ZXBfc2ZfbWF0Y2ggYXJncyBlbnYga29udCA9XG4gIChsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGNsYXVzZXMgPSAocmVzdCAoYXJncykpIGluIChsZXQgcmVzdWx0JyA9IChtYXRjaF9maW5kX2NsYXVzZSAodmFsJykgKGNsYXVzZXMpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChyZXN1bHQnKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwibWF0Y2g6IG5vIGNsYXVzZSBtYXRjaGVkIFwiKTsgKGluc3BlY3QgKHZhbCcpKV0pKSkpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVzdWx0JykgKChOdW1iZXIgMS4wKSkpKSAoKGZpcnN0IChyZXN1bHQnKSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1oYW5kbGVyLWJpbmQgKilcbmFuZCBzdGVwX3NmX2hhbmRsZXJfYmluZCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBoYW5kbGVyX3NwZWNzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBoYW5kbGVycyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKHNwZWMpKSkgKGVudikpKSk7ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChzcGVjKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpXSkpIChzeF90b19saXN0IGhhbmRsZXJfc3BlY3MpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9oYW5kbGVyX2ZyYW1lIChoYW5kbGVycykgKChyZXN0IChib2R5KSkpIChlbnYpKSkgKGtvbnQpKSkpKSlcblxuKCogc3RlcC1zZi1yZXN0YXJ0LWNhc2UgKilcbmFuZCBzdGVwX3NmX3Jlc3RhcnRfY2FzZSBhcmdzIGVudiBrb250ID1cbiAgKGxldCBib2R5ID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IHJlc3RhcnRfc3BlY3MgPSAocmVzdCAoYXJncykpIGluIGxldCByZXN0YXJ0cyA9IChMaXN0IChMaXN0Lm1hcCAoZnVuIHNwZWMgLT4gKExpc3QgWyhpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAoKGZpcnN0IChzcGVjKSkpKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoc3BlYykpKSkgZWxzZSAoZmlyc3QgKHNwZWMpKSk7IChudGggKHNwZWMpICgoTnVtYmVyIDEuMCkpKTsgKG50aCAoc3BlYykgKChOdW1iZXIgMi4wKSkpXSkpIChzeF90b19saXN0IHJlc3RhcnRfc3BlY3MpKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzdGFydF9mcmFtZSAocmVzdGFydHMpICgoTGlzdCBbXSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNpZ25hbCAqKVxuYW5kIHN0ZXBfc2Zfc2lnbmFsIGFyZ3MgZW52IGtvbnQgPVxuICAobGV0IGNvbmRpdGlvbiA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGhhbmRsZXJfZm4gPSAoa29udF9maW5kX2hhbmRsZXIgKGtvbnQpIChjb25kaXRpb24pKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChoYW5kbGVyX2ZuKSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5oYW5kbGVkIGNvbmRpdGlvbjogXCIpOyAoaW5zcGVjdCAoY29uZGl0aW9uKSldKSkpKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChoYW5kbGVyX2ZuKSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoZW52KSAoKExpc3QgW2NvbmRpdGlvbl0pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSAoZW52KSAoa29udCkpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWludm9rZS1yZXN0YXJ0ICopXG5hbmQgc3RlcF9zZl9pbnZva2VfcmVzdGFydCBhcmdzIGVudiBrb250ID1cbiAgKGxldCByZXN0YXJ0X25hbWUgPSAobGV0IHJuID0gKGlmIHN4X3RydXRoeSAoKHN5bWJvbF9wICgoZmlyc3QgKGFyZ3MpKSkpKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChhcmdzKSkpKSBlbHNlICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkpIGluIChpZiBzeF90cnV0aHkgKChzeW1ib2xfcCAocm4pKSkgdGhlbiAoc3ltYm9sX25hbWUgKHJuKSkgZWxzZSBybikpIGluIGxldCByZXN0YXJ0X2FyZyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGVsc2UgTmlsKSBpbiBsZXQgZm91bmQgPSAoa29udF9maW5kX3Jlc3RhcnQgKGtvbnQpIChyZXN0YXJ0X25hbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmb3VuZCkpKSB0aGVuIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vIHJlc3RhcnQgbmFtZWQ6IFwiKTsgKGluc3BlY3QgKHJlc3RhcnRfbmFtZSkpXSkpKSkpIGVsc2UgKGxldCBlbnRyeSA9IChmaXJzdCAoZm91bmQpKSBpbiBsZXQgcmVzdGFydF9mcmFtZSA9IChudGggKGZvdW5kKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IHJlc3Rfa29udCA9IChudGggKGZvdW5kKSAoKE51bWJlciAyLjApKSkgaW4gKGxldCBwYXJhbXMgPSAobnRoIChlbnRyeSkgKChOdW1iZXIgMS4wKSkpIGluIGxldCBib2R5ID0gKG50aCAoZW50cnkpICgoTnVtYmVyIDIuMCkpKSBpbiBsZXQgcmVzdGFydF9lbnYgPSAoZW52X2V4dGVuZCAoKGdldCAocmVzdGFydF9mcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGVtcHR5X3AgKHBhcmFtcykpKSkpKSkgdGhlbiAoZW52X2JpbmQgcmVzdGFydF9lbnYgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhcmFtcykpKSByZXN0YXJ0X2FyZykgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKGJvZHkpIChyZXN0YXJ0X2VudikgKHJlc3Rfa29udCkpKSkpKSlcblxuKCogc3RlcC1zZi1pZiAqKVxuYW5kIHN0ZXBfc2ZfaWYgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9pZl9mcmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj5cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobnRoIChhcmdzKSAoKE51bWJlciAyLjApKSkgZWxzZSBOaWwpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLXdoZW4gKilcbmFuZCBzdGVwX3NmX3doZW4gYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV93aGVuX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWJlZ2luICopXG5hbmQgc3RlcF9zZl9iZWdpbiBhcmdzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWxldCAqKVxuYW5kIHN0ZXBfc2ZfbGV0IGFyZ3MgZW52IGtvbnQgPVxuICBsZXQgcGFpcnMgPSByZWYgTmlsIGluIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGFyZ3MpKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbmFtZWRfbGV0IChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGJpbmRpbmdzID0gKGZpcnN0IChhcmdzKSkgaW4gbGV0IGJvZHkgPSAocmVzdCAoYXJncykpIGluIGxldCBsb2NhbCA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYmluZGluZ3MpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAoa29udCkpIGVsc2UgKGxldCBmaXJzdF9iaW5kaW5nID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoU3RyaW5nIFwibGlzdFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKChmaXJzdCAoYmluZGluZ3MpKSkpOyAoTnVtYmVyIDIuMCldKSkpIHRoZW4gKGZpcnN0IChiaW5kaW5ncykpIGVsc2UgKExpc3QgWyhmaXJzdCAoYmluZGluZ3MpKTsgKG50aCAoYmluZGluZ3MpICgoTnVtYmVyIDEuMCkpKV0pKSBpbiBsZXQgcmVzdF9iaW5kaW5ncyA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsobGVuICgoZmlyc3QgKGJpbmRpbmdzKSkpKTsgKE51bWJlciAyLjApXSkpKSB0aGVuIChyZXN0IChiaW5kaW5ncykpIGVsc2UgKGxldCBwYWlycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIGkgLT4gKHBhaXJzIDo9IHN4X2FwcGVuZF9iICFwYWlycyAoTGlzdCBbKG50aCAoYmluZGluZ3MpICgocHJpbV9jYWxsIFwiKlwiIFtpOyAoTnVtYmVyIDIuMCldKSkpOyAobnRoIChiaW5kaW5ncykgKChwcmltX2NhbGwgXCJpbmNcIiBbKHByaW1fY2FsbCBcIipcIiBbaTsgKE51bWJlciAyLjApXSldKSkpXSk7IE5pbCkpIE5pbCAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwicmFuZ2VcIiBbKE51bWJlciAxLjApOyAocHJpbV9jYWxsIFwiL1wiIFsobGVuIChiaW5kaW5ncykpOyAoTnVtYmVyIDIuMCldKV0pKSkpIGluICFwYWlycykpKSBpbiAobGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSk7IChTdHJpbmcgXCJzeW1ib2xcIildKSkgdGhlbiAoc3ltYm9sX25hbWUgKChmaXJzdCAoZmlyc3RfYmluZGluZykpKSkgZWxzZSAoZmlyc3QgKGZpcnN0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChmaXJzdF9iaW5kaW5nKSAoKE51bWJlciAxLjApKSkpIChsb2NhbCkgKChrb250X3B1c2ggKChtYWtlX2xldF9mcmFtZSAodm5hbWUpIChyZXN0X2JpbmRpbmdzKSAoYm9keSkgKGxvY2FsKSkpIChrb250KSkpKSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVmaW5lICopXG5hbmQgc3RlcF9zZl9kZWZpbmUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZV9zeW0gPSAoZmlyc3QgKGFyZ3MpKSBpbiBsZXQgaGFzX2VmZmVjdHMgPSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDQuMCldKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSk7IChTdHJpbmcgXCJlZmZlY3RzXCIpXSkpKSBpbiBsZXQgdmFsX2lkeCA9IChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI+PVwiIFsobGVuIChhcmdzKSk7IChOdW1iZXIgNC4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImtleXdvcmRcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAocHJpbV9jYWxsIFwiPVwiIFsoa2V5d29yZF9uYW1lICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpKTsgKFN0cmluZyBcImVmZmVjdHNcIildKSkpKSB0aGVuIChOdW1iZXIgMy4wKSBlbHNlIChOdW1iZXIgMS4wKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj49XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciA0LjApXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwia2V5d29yZFwiKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChwcmltX2NhbGwgXCI9XCIgWyhrZXl3b3JkX25hbWUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkpOyAoU3RyaW5nIFwiZWZmZWN0c1wiKV0pKSkpIHRoZW4gKG50aCAoYXJncykgKChOdW1iZXIgMi4wKSkpIGVsc2UgTmlsKSBpbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICh2YWxfaWR4KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9kZWZpbmVfZnJhbWUgKChzeW1ib2xfbmFtZSAobmFtZV9zeW0pKSkgKGVudikgKGhhc19lZmZlY3RzKSAoZWZmZWN0X2xpc3QpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLXNldCEgKilcbmFuZCBzdGVwX3NmX3NldF9iIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3NldF9mcmFtZSAoKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpKSAoZW52KSkpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWFuZCAqKVxuYW5kIHN0ZXBfc2ZfYW5kIGFyZ3MgZW52IGtvbnQgPVxuICAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYXJncykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYW5kX2ZyYW1lICgocmVzdCAoYXJncykpKSAoZW52KSkpIChrb250KSkpKSlcblxuKCogc3RlcC1zZi1vciAqKVxuYW5kIHN0ZXBfc2Zfb3IgYXJncyBlbnYga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCBmYWxzZSkpIChlbnYpIChrb250KSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfb3JfZnJhbWUgKChyZXN0IChhcmdzKSkpIChlbnYpKSkgKGtvbnQpKSkpKVxuXG4oKiBzdGVwLXNmLWNvbmQgKilcbmFuZCBzdGVwX3NmX2NvbmQgYXJncyBlbnYga29udCA9XG4gIChsZXQgc2NoZW1lX3AgPSAoY29uZF9zY2hlbWVfcCAoYXJncykpIGluIChpZiBzeF90cnV0aHkgKHNjaGVtZV9wKSB0aGVuIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChhcmdzKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IGNsYXVzZSA9IChmaXJzdCAoYXJncykpIGluIGxldCB0ZXN0ID0gKGZpcnN0IChjbGF1c2UpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGNsYXVzZSkgKChOdW1iZXIgMS4wKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICh0ZXN0KSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAoYXJncykgKGVudikgKChCb29sIHRydWUpKSkpIChrb250KSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI8XCIgWyhsZW4gKGFyZ3MpKTsgKE51bWJlciAyLjApXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkgZWxzZSAobGV0IHRlc3QgPSAoZmlyc3QgKGFyZ3MpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKHRlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKGFyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikgKGtvbnQpKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAodGVzdCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2NvbmRfZnJhbWUgKGFyZ3MpIChlbnYpICgoQm9vbCBmYWxzZSkpKSkgKGtvbnQpKSkpKSkpKSlcblxuKCogc3RlcC1zZi1jYXNlICopXG5hbmQgc3RlcF9zZl9jYXNlIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY2FzZV9mcmFtZSAoTmlsKSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi10aHJlYWQtZmlyc3QgKilcbmFuZCBzdGVwX3NmX3RocmVhZF9maXJzdCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3RocmVhZF9mcmFtZSAoKHJlc3QgKGFyZ3MpKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1sYW1iZGEgKilcbmFuZCBzdGVwX3NmX2xhbWJkYSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3ZhbHVlICgoc2ZfbGFtYmRhIChhcmdzKSAoZW52KSkpIChlbnYpIChrb250KSlcblxuKCogc3RlcC1zZi1zY29wZSAqKVxuYW5kIHN0ZXBfc2Zfc2NvcGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHJlc3RfYXJncyA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDEuMCldKSBpbiBsZXQgdmFsJyA9IHJlZiAoTmlsKSBpbiBsZXQgYm9keSA9IHJlZiAoTmlsKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAocmVzdF9hcmdzKSk7IChOdW1iZXIgMi4wKV0pIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKHJlc3RfYXJncykpKSk7IChTdHJpbmcgXCJrZXl3b3JkXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbKGtleXdvcmRfbmFtZSAoKGZpcnN0IChyZXN0X2FyZ3MpKSkpOyAoU3RyaW5nIFwidmFsdWVcIildKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKCh2YWwnIDo9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChyZXN0X2FyZ3MpICgoTnVtYmVyIDEuMCkpKSkgKGVudikpKSk7IE5pbCkpIGluIChib2R5IDo9IChwcmltX2NhbGwgXCJzbGljZVwiIFtyZXN0X2FyZ3M7IChOdW1iZXIgMi4wKV0pOyBOaWwpKSBlbHNlIChib2R5IDo9IHJlc3RfYXJnczsgTmlsKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wICghYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKCFib2R5KSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9zY29wZV9hY2NfZnJhbWUgKG5hbWUpICghdmFsJykgKChyZXN0ICghYm9keSkpKSAoZW52KSkpIChrb250KSkpKSkpKVxuXG4oKiBzdGVwLXNmLXByb3ZpZGUgKilcbmFuZCBzdGVwX3NmX3Byb3ZpZGUgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IHZhbCcgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBpbiBsZXQgYm9keSA9IChwcmltX2NhbGwgXCJzbGljZVwiIFthcmdzOyAoTnVtYmVyIDIuMCldKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoYm9keSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX3Byb3ZpZGVfZnJhbWUgKG5hbWUpICh2YWwnKSAoKHJlc3QgKGJvZHkpKSkgKGVudikpKSAoa29udCkpKSkpKVxuXG4oKiBzdGVwLXNmLWNvbnRleHQg4oCUIGNoZWNrIGtvbnQgcHJvdmlkZSBmcmFtZXMgZmlyc3QsIHRoZW4gZmFsbCBiYWNrIHRvIHNjb3BlX3N0YWNrcyAqKVxuYW5kIHN0ZXBfc2ZfY29udGV4dCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgZGVmYXVsdF92YWwgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPj1cIiBbKGxlbiAoYXJncykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpKSAoZW52KSkpKSBlbHNlIE5pbCkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9wcm92aWRlIChrb250KSAobmFtZSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX25pbCAoZnJhbWUpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoZW52KSAoa29udCkpIGVsc2UgKGxldCBzY29wZV92YWwgPSAoc3hfY29udGV4dCAobmFtZSkgKE5pbCkpIGluIChtYWtlX2Nla192YWx1ZSAoKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoc2NvcGVfdmFsKSkpIHRoZW4gZGVmYXVsdF92YWwgZWxzZSBzY29wZV92YWwpKSAoZW52KSAoa29udCkpKSkpXG5cbigqIHN0ZXAtc2YtZW1pdCAqKVxuYW5kIHN0ZXBfc2ZfZW1pdCBhcmdzIGVudiBrb250ID1cbiAgKGxldCBuYW1lID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoYXJncykpKSAoZW52KSkpKSBpbiBsZXQgdmFsJyA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgobnRoIChhcmdzKSAoKE51bWJlciAxLjApKSkpIChlbnYpKSkpIGluIGxldCBmcmFtZSA9IChrb250X2ZpbmRfc2NvcGVfYWNjIChrb250KSAobmFtZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKGZyYW1lKSB0aGVuIChzeF9kaWN0X3NldF9iIGZyYW1lIChTdHJpbmcgXCJlbWl0dGVkXCIpIChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW1pdHRlZFwiKSkpOyAoTGlzdCBbdmFsJ10pXSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChrb250KSkpKVxuXG4oKiBzdGVwLXNmLWVtaXR0ZWQgKilcbmFuZCBzdGVwX3NmX2VtaXR0ZWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgbmFtZSA9ICh0cmFtcG9saW5lICgoZXZhbF9leHByICgoZmlyc3QgKGFyZ3MpKSkgKGVudikpKSkgaW4gbGV0IGZyYW1lID0gKGtvbnRfZmluZF9zY29wZV9hY2MgKGtvbnQpIChuYW1lKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChmcmFtZSkpKSB0aGVuIChMaXN0IFtdKSBlbHNlIChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVtaXR0ZWRcIikpKSkpIChlbnYpIChrb250KSkpXG5cbigqIHN0ZXAtc2YtcmVzZXQgKilcbmFuZCBzdGVwX3NmX3Jlc2V0IGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVzZXRfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1zZi1zaGlmdCAqKVxuYW5kIHN0ZXBfc2Zfc2hpZnQgYXJncyBlbnYga29udCA9XG4gIChsZXQga19uYW1lID0gKHN5bWJvbF9uYW1lICgoZmlyc3QgKGFyZ3MpKSkpIGluIGxldCBib2R5ID0gKG50aCAoYXJncykgKChOdW1iZXIgMS4wKSkpIGluIGxldCBjYXB0dXJlZF9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkID0gKGZpcnN0IChjYXB0dXJlZF9yZXN1bHQpKSBpbiBsZXQgcmVzdF9rb250ID0gKG50aCAoY2FwdHVyZWRfcmVzdWx0KSAoKE51bWJlciAxLjApKSkgaW4gKGxldCBrID0gKG1ha2VfY2VrX2NvbnRpbnVhdGlvbiAoY2FwdHVyZWQpIChyZXN0X2tvbnQpKSBpbiAobGV0IHNoaWZ0X2VudiA9IChlbnZfZXh0ZW5kIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgc2hpZnRfZW52IChzeF90b19zdHJpbmcga19uYW1lKSBrKSkgaW4gKG1ha2VfY2VrX3N0YXRlIChib2R5KSAoc2hpZnRfZW52KSAocmVzdF9rb250KSkpKSkpXG5cbigqIHN0ZXAtc2YtZGVyZWYgKilcbmFuZCBzdGVwX3NmX2RlcmVmIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGVyZWZfZnJhbWUgKGVudikpKSAoa29udCkpKSlcblxuKCogY2VrLWNhbGwgKilcbmFuZCBjZWtfY2FsbCBmIGFyZ3MgPVxuICAobGV0IGEgPSAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChhcmdzKSkpIHRoZW4gKExpc3QgW10pIGVsc2UgYXJncykgaW4gKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoZikpKSB0aGVuIE5pbCBlbHNlIChpZiBzeF90cnV0aHkgKChsZXQgX29yID0gKGlzX2xhbWJkYSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoaXNfY2FsbGFibGUgKGYpKSkpIHRoZW4gKGNla19ydW4gKChjb250aW51ZV93aXRoX2NhbGwgKGYpIChhKSAoKG1ha2VfZW52ICgpKSkgKGEpICgoTGlzdCBbXSkpKSkpIGVsc2UgTmlsKSkpXG5cbigqIHJlYWN0aXZlLXNoaWZ0LWRlcmVmICopXG5hbmQgcmVhY3RpdmVfc2hpZnRfZGVyZWYgc2lnJyBlbnYga29udCA9XG4gIChsZXQgc2Nhbl9yZXN1bHQgPSAoa29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IChrb250KSkgaW4gbGV0IGNhcHR1cmVkX2ZyYW1lcyA9IChmaXJzdCAoc2Nhbl9yZXN1bHQpKSBpbiBsZXQgcmVzZXRfZnJhbWUgPSAobnRoIChzY2FuX3Jlc3VsdCkgKChOdW1iZXIgMS4wKSkpIGluIGxldCByZW1haW5pbmdfa29udCA9IChudGggKHNjYW5fcmVzdWx0KSAoKE51bWJlciAyLjApKSkgaW4gbGV0IHVwZGF0ZV9mbiA9IChnZXQgKHJlc2V0X2ZyYW1lKSAoKFN0cmluZyBcInVwZGF0ZS1mblwiKSkpIGluIChsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiAoKExpc3QgW10pKSBpbiAobGV0IHN1YnNjcmliZXIgPSAoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHN1Yl9kaXNwb3NlcnMgOj0gKExpc3QgW10pOyBOaWwpKSBpbiAobGV0IG5ld19yZXNldCA9IChtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIChlbnYpICh1cGRhdGVfZm4pICgoQm9vbCBmYWxzZSkpKSBpbiBsZXQgbmV3X2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW25ld19yZXNldF0pOyByZW1haW5pbmdfa29udF0pIGluICh3aXRoX2lzbGFuZF9zY29wZSAoKE5hdGl2ZUZuIChcIlxcMjA2XFwxODdcIiwgZnVuIF9hcmdzIC0+IG1hdGNoIF9hcmdzIHdpdGggW2RdIC0+IChmdW4gZCAtPiBsZXQgc3ViX2Rpc3Bvc2VycyA9IHJlZiBOaWwgaW4gKHN1Yl9kaXNwb3NlcnMgOj0gc3hfYXBwZW5kX2IgIXN1Yl9kaXNwb3NlcnMgZDsgTmlsKSkgZCB8IF8gLT4gTmlsKSkpICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChuZXdfa29udCkpKSkpICgpKSkpKSkpKSkgKCkpKSBpbiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX2FkZF9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKHJlZ2lzdGVyX2luX3Njb3BlICgoTmF0aXZlRm4gKFwiXFwyMDZcXDE4N1wiLCBmdW4gX2FyZ3MgLT4gKGZ1biAoKSAtPiAobGV0ICgpID0gaWdub3JlICgoc2lnbmFsX3JlbW92ZV9zdWJfYiAoc2lnJykgKHN1YnNjcmliZXIpKSkgaW4gKExpc3QuaXRlciAoZnVuIGQgLT4gaWdub3JlICgoY2VrX2NhbGwgKGQpIChOaWwpKSkpIChzeF90b19saXN0ICFzdWJfZGlzcG9zZXJzKTsgTmlsKSkpICgpKSkpKSkgaW4gKGxldCBpbml0aWFsX2tvbnQgPSAocHJpbV9jYWxsIFwiY29uY2F0XCIgW2NhcHR1cmVkX2ZyYW1lczsgKExpc3QgW3Jlc2V0X2ZyYW1lXSk7IHJlbWFpbmluZ19rb250XSkgaW4gKG1ha2VfY2VrX3ZhbHVlICgoc2lnbmFsX3ZhbHVlIChzaWcnKSkpIChlbnYpIChpbml0aWFsX2tvbnQpKSkpKSkpKVxuXG4oKiBzdGVwLWV2YWwtY2FsbCAqKVxuYW5kIHN0ZXBfZXZhbF9jYWxsIGhlYWQgYXJncyBlbnYga29udCA9XG4gIChsZXQgaG5hbWUgPSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoaGVhZCkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChoZWFkKSkgZWxzZSBOaWwpIGluIChtYWtlX2Nla19zdGF0ZSAoaGVhZCkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoTmlsKSAoKExpc3QgW10pKSAoYXJncykgKGVudikgKGFyZ3MpIChobmFtZSkpKSAoa29udCkpKSkpXG5cbigqIGhvLWZvcm0tbmFtZT8gKilcbmFuZCBob19mb3JtX25hbWVfcCBuYW1lID1cbiAgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwibWFwXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIChsZXQgX29yID0gKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZpbHRlclwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGxldCBfb3IgPSAocHJpbV9jYWxsIFwiPVwiIFtuYW1lOyAoU3RyaW5nIFwic29tZVwiKV0pIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAobGV0IF9vciA9IChwcmltX2NhbGwgXCI9XCIgW25hbWU7IChTdHJpbmcgXCJldmVyeT9cIildKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKHByaW1fY2FsbCBcIj1cIiBbbmFtZTsgKFN0cmluZyBcImZvci1lYWNoXCIpXSkpKSkpKSlcblxuKCogaG8tZm4/ICopXG5hbmQgaG9fZm5fcCB2ID1cbiAgKGxldCBfb3IgPSAoaXNfY2FsbGFibGUgKHYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2xhbWJkYSAodikpKVxuXG4oKiBoby1zd2FwLWFyZ3MgKilcbmFuZCBob19zd2FwX2FyZ3MgaG9fdHlwZSBldmFsZWQgPVxuICAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwicmVkdWNlXCIpXSkpIHRoZW4gKGxldCBhID0gKGZpcnN0IChldmFsZWQpKSBpbiBsZXQgYiA9IChudGggKGV2YWxlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGhvX2ZuX3AgKGEpKSkpKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2ZuX3AgKGIpKSkpIHRoZW4gKExpc3QgW2I7IChudGggKGV2YWxlZCkgKChOdW1iZXIgMi4wKSkpOyBhXSkgZWxzZSBldmFsZWQpKSBlbHNlIChsZXQgYSA9IChmaXJzdCAoZXZhbGVkKSkgaW4gbGV0IGIgPSAobnRoIChldmFsZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChob19mbl9wIChhKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChob19mbl9wIChiKSkpKSB0aGVuIChMaXN0IFtiOyBhXSkgZWxzZSBldmFsZWQpKSlcblxuKCogaG8tc2V0dXAtZGlzcGF0Y2ggKilcbmFuZCBob19zZXR1cF9kaXNwYXRjaCBob190eXBlIGV2YWxlZCBlbnYga29udCA9XG4gIChsZXQgb3JkZXJlZCA9IChob19zd2FwX2FyZ3MgKGhvX3R5cGUpIChldmFsZWQpKSBpbiAobGV0IGYgPSAoZmlyc3QgKG9yZGVyZWQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtob190eXBlOyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9tYXBfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoKExpc3QgW10pKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoTGlzdCBbXSkpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhOdW1iZXIgMC4wKTsgKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX21hcF9pbmRleGVkX2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChMaXN0IFtdKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2ZpbHRlcl9mcmFtZSAoZikgKChyZXN0IChjb2xsKSkpICgoTGlzdCBbXSkpICgoZmlyc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGluaXQgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAyLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKGluaXQpIChlbnYpIChrb250KSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW2luaXQ7IChmaXJzdCAoY29sbCkpXSkpIChlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9yZWR1Y2VfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcInNvbWVcIildKSkgdGhlbiAobGV0IGNvbGwgPSAobnRoIChvcmRlcmVkKSAoKE51bWJlciAxLjApKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGNvbGwpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX3NvbWVfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbaG9fdHlwZTsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBjb2xsID0gKG50aCAob3JkZXJlZCkgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChjb2xsKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoQm9vbCB0cnVlKSkgKGVudikgKGtvbnQpKSBlbHNlIChjb250aW51ZV93aXRoX2NhbGwgKGYpICgoTGlzdCBbKGZpcnN0IChjb2xsKSldKSkgKGVudikgKChMaXN0IFtdKSkgKChrb250X3B1c2ggKChtYWtlX2V2ZXJ5X2ZyYW1lIChmKSAoKHJlc3QgKGNvbGwpKSkgKGVudikpKSAoa29udCkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2hvX3R5cGU7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgY29sbCA9IChudGggKG9yZGVyZWQpICgoTnVtYmVyIDEuMCkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoY29sbCkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZW52KSAoa29udCkpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKGNvbGwpKV0pKSAoZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfZm9yX2VhY2hfZnJhbWUgKGYpICgocmVzdCAoY29sbCkpKSAoZW52KSkpIChrb250KSkpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiVW5rbm93biBITyB0eXBlOiBcIik7IGhvX3R5cGVdKSkpKSkpKSkpKSkpKSlcblxuKCogc3RlcC1oby1tYXAgKilcbmFuZCBzdGVwX2hvX21hcCBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwibWFwXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1tYXAtaW5kZXhlZCAqKVxuYW5kIHN0ZXBfaG9fbWFwX2luZGV4ZWQgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcIm1hcC1pbmRleGVkXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1maWx0ZXIgKilcbmFuZCBzdGVwX2hvX2ZpbHRlciBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwiZmlsdGVyXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1yZWR1Y2UgKilcbmFuZCBzdGVwX2hvX3JlZHVjZSBhcmdzIGVudiBrb250ID1cbiAgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGFyZ3MpKSkgKGVudikgKChrb250X3B1c2ggKChtYWtlX2hvX3NldHVwX2ZyYW1lICgoU3RyaW5nIFwicmVkdWNlXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1zb21lICopXG5hbmQgc3RlcF9ob19zb21lIGFyZ3MgZW52IGtvbnQgPVxuICAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAoYXJncykpKSAoZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaG9fc2V0dXBfZnJhbWUgKChTdHJpbmcgXCJzb21lXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1ldmVyeSAqKVxuYW5kIHN0ZXBfaG9fZXZlcnkgYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImV2ZXJ5XCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1oby1mb3ItZWFjaCAqKVxuYW5kIHN0ZXBfaG9fZm9yX2VhY2ggYXJncyBlbnYga29udCA9XG4gIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChhcmdzKSkpIChlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoKFN0cmluZyBcImZvci1lYWNoXCIpKSAoKHJlc3QgKGFyZ3MpKSkgKChMaXN0IFtdKSkgKGVudikpKSAoa29udCkpKSlcblxuKCogc3RlcC1jb250aW51ZSAqKVxuYW5kIHN0ZXBfY29udGludWUgc3RhdGUgPVxuICAobGV0IHZhbHVlID0gKGNla192YWx1ZSAoc3RhdGUpKSBpbiBsZXQgZW52ID0gKGNla19lbnYgKHN0YXRlKSkgaW4gbGV0IGtvbnQgPSAoY2VrX2tvbnQgKHN0YXRlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGtvbnRfZW1wdHlfcCAoa29udCkpKSB0aGVuIHN0YXRlIGVsc2UgKGxldCBmcmFtZSA9IChrb250X3RvcCAoa29udCkpIGluIGxldCByZXN0X2sgPSAoa29udF9wb3AgKGtvbnQpKSBpbiBsZXQgZnQgPSAoZnJhbWVfdHlwZSAoZnJhbWUpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImlmXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ0aGVuXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX25pbCAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWxzZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJ3aGVuXCIpXSkpIHRoZW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gdmFsdWUgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbmlsICh2YWx1ZSkpKSkpKSkpIHRoZW4gKGxldCBib2R5ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiYm9keVwiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGJvZHkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKGJvZHkpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKGJvZHkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChib2R5KSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfYmVnaW5fZnJhbWUgKChyZXN0IChib2R5KSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChlbnYpIChyZXN0X2spKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImJlZ2luXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKGxlbiAocmVtYWluaW5nKSk7IChOdW1iZXIgMS4wKV0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9iZWdpbl9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwibGV0XCIpXSkpIHRoZW4gKGxldCBuYW1lID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgYm9keSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImJvZHlcIikpKSBpbiBsZXQgbG9jYWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoc3RlcF9zZl9iZWdpbiAoYm9keSkgKGxvY2FsKSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHRfYmluZGluZyA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gbGV0IHZuYW1lID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKChmaXJzdCAobmV4dF9iaW5kaW5nKSkpKTsgKFN0cmluZyBcInN5bWJvbFwiKV0pKSB0aGVuIChzeW1ib2xfbmFtZSAoKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkpIGVsc2UgKGZpcnN0IChuZXh0X2JpbmRpbmcpKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2JpbmRpbmcpICgoTnVtYmVyIDEuMCkpKSkgKGxvY2FsKSAoKGtvbnRfcHVzaCAoKG1ha2VfbGV0X2ZyYW1lICh2bmFtZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGJvZHkpIChsb2NhbCkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRlZmluZVwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIGxldCBoYXNfZWZmZWN0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhhcy1lZmZlY3RzXCIpKSkgaW4gbGV0IGVmZmVjdF9saXN0ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZWZmZWN0LWxpc3RcIikpKSBpbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfbGFtYmRhICh2YWx1ZSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChpc19uaWwgKChsYW1iZGFfbmFtZSAodmFsdWUpKSkpKSkgdGhlbiAoc2V0X2xhbWJkYV9uYW1lIHZhbHVlIChzeF90b19zdHJpbmcgbmFtZSkpIGVsc2UgTmlsKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKGVudl9iaW5kIGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKGhhc19lZmZlY3RzKSB0aGVuIChsZXQgZWZmZWN0X25hbWVzID0gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGVmZmVjdF9saXN0KSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKExpc3QgKExpc3QubWFwIChmdW4gZSAtPiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsodHlwZV9vZiAoZSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkpIHRoZW4gKHN5bWJvbF9uYW1lIChlKSkgZWxzZSAoU3RyaW5nIChzeF9zdHIgW2VdKSkpKSAoc3hfdG9fbGlzdCBlZmZlY3RfbGlzdCkpKSBlbHNlIChMaXN0IFsoU3RyaW5nIChzeF9zdHIgW2VmZmVjdF9saXN0XSkpXSkpIGluIGxldCBlZmZlY3RfYW5ucyA9IChpZiBzeF90cnV0aHkgKChlbnZfaGFzIChmZW52KSAoKFN0cmluZyBcIiplZmZlY3QtYW5ub3RhdGlvbnMqXCIpKSkpIHRoZW4gKGVudl9nZXQgKGZlbnYpICgoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpKSBlbHNlIChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIGVmZmVjdF9hbm5zIG5hbWUgZWZmZWN0X25hbWVzKSkgaW4gKGVudl9iaW5kIGZlbnYgKHN4X3RvX3N0cmluZyAoU3RyaW5nIFwiKmVmZmVjdC1hbm5vdGF0aW9ucypcIikpIGVmZmVjdF9hbm5zKSkpIGVsc2UgTmlsKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInNldFwiKV0pKSB0aGVuIChsZXQgbmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcIm5hbWVcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChlbnZfc2V0IGZlbnYgKHN4X3RvX3N0cmluZyBuYW1lKSB2YWx1ZSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChlbnYpIChyZXN0X2spKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJhbmRcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKHZhbHVlKSkpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyhsZW4gKHJlbWFpbmluZykpOyAoTnVtYmVyIDEuMCldKSkgdGhlbiByZXN0X2sgZWxzZSAoa29udF9wdXNoICgobWFrZV9hbmRfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwib3JcIildKSkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKChCb29sIGZhbHNlKSkgKGVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkpICgoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFsobGVuIChyZW1haW5pbmcpKTsgKE51bWJlciAxLjApXSkpIHRoZW4gcmVzdF9rIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2Vfb3JfZnJhbWUgKChyZXN0IChyZW1haW5pbmcpKSkgKChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpKSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiY29uZFwiKV0pKSB0aGVuIChsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgc2NoZW1lX3AgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJzY2hlbWVcIikpKSBpbiAoaWYgc3hfdHJ1dGh5IChzY2hlbWVfcCkgdGhlbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKChmaXJzdCAocmVtYWluaW5nKSkpICgoTnVtYmVyIDEuMCkpKSkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF9jbGF1c2VzID0gKHJlc3QgKHJlbWFpbmluZykpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChuZXh0X2NsYXVzZXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChsZXQgbmV4dF9jbGF1c2UgPSAoZmlyc3QgKG5leHRfY2xhdXNlcykpIGluIGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHRfY2xhdXNlKSkgaW4gKGlmIHN4X3RydXRoeSAoKGlzX2Vsc2VfY2xhdXNlIChuZXh0X3Rlc3QpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChudGggKG5leHRfY2xhdXNlKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKG5leHRfdGVzdCkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9jb25kX2ZyYW1lIChuZXh0X2NsYXVzZXMpIChmZW52KSAoKEJvb2wgdHJ1ZSkpKSkgKHJlc3RfaykpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKHZhbHVlKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAocmVtYWluaW5nKSAoKE51bWJlciAxLjApKSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IG5leHQgPSAocHJpbV9jYWxsIFwic2xpY2VcIiBbcmVtYWluaW5nOyAoTnVtYmVyIDIuMCldKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPFwiIFsobGVuIChuZXh0KSk7IChOdW1iZXIgMi4wKV0pKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoTmlsKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBuZXh0X3Rlc3QgPSAoZmlyc3QgKG5leHQpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfZWxzZV9jbGF1c2UgKG5leHRfdGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoKG50aCAobmV4dCkgKChOdW1iZXIgMS4wKSkpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlIChuZXh0X3Rlc3QpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfY29uZF9mcmFtZSAobmV4dCkgKGZlbnYpICgoQm9vbCBmYWxzZSkpKSkgKHJlc3RfaykpKSkpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJjYXNlXCIpXSkpIHRoZW4gKGxldCBtYXRjaF92YWwgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJtYXRjaC12YWxcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoaXNfbmlsIChtYXRjaF92YWwpKSkgdGhlbiAoc2ZfY2FzZV9zdGVwX2xvb3AgKHZhbHVlKSAocmVtYWluaW5nKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKHNmX2Nhc2Vfc3RlcF9sb29wIChtYXRjaF92YWwpIChyZW1haW5pbmcpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwidGhyZWFkXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGxldCBmb3JtID0gKGZpcnN0IChyZW1haW5pbmcpKSBpbiBsZXQgcmVzdF9mb3JtcyA9IChyZXN0IChyZW1haW5pbmcpKSBpbiBsZXQgbmV3X2tvbnQgPSAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAoKHJlc3QgKHJlbWFpbmluZykpKSkpIHRoZW4gcmVzdF9rIGVsc2UgKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKHByaW1fY2FsbCBcIj1cIiBbKHR5cGVfb2YgKGZvcm0pKTsgKFN0cmluZyBcImxpc3RcIildKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAobGV0IF9hbmQgPSAoQm9vbCAobm90IChzeF90cnV0aHkgKChlbXB0eV9wIChmb3JtKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mICgoZmlyc3QgKGZvcm0pKSkpOyAoU3RyaW5nIFwic3ltYm9sXCIpXSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGhvX2Zvcm1fbmFtZV9wICgoc3ltYm9sX25hbWUgKChmaXJzdCAoZm9ybSkpKSkpKSkpKSkgdGhlbiAobWFrZV9jZWtfc3RhdGUgKChjb25zICgoZmlyc3QgKGZvcm0pKSkgKChjb25zICgoTGlzdCBbKFN5bWJvbCBcInF1b3RlXCIpOyB2YWx1ZV0pKSAoKHJlc3QgKGZvcm0pKSkpKSkpIChmZW52KSAobmV3X2tvbnQpKSBlbHNlIChsZXQgcmVzdWx0JyA9IChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgWyh0eXBlX29mIChmb3JtKSk7IChTdHJpbmcgXCJsaXN0XCIpXSkpIHRoZW4gKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKChmaXJzdCAoZm9ybSkpKSAoZmVudikpKSkgaW4gbGV0IHJhcmdzID0gKExpc3QgKExpc3QubWFwIChmdW4gYSAtPiAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAoYSkgKGZlbnYpKSkpKSAoc3hfdG9fbGlzdCAocmVzdCAoZm9ybSkpKSkpIGluIGxldCBhbGxfYXJncyA9IChjb25zICh2YWx1ZSkgKHJhcmdzKSkgaW4gKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2NhbGxhYmxlIChmKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpKSkpKSkgdGhlbiAoc3hfYXBwbHkgZiBhbGxfYXJncykgZWxzZSAoaWYgc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpIHRoZW4gKHRyYW1wb2xpbmUgKChjYWxsX2xhbWJkYSAoZikgKGFsbF9hcmdzKSAoZmVudikpKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCItPiBmb3JtIG5vdCBjYWxsYWJsZTogXCIpOyAoaW5zcGVjdCAoZikpXSkpKSkpKSkpIGVsc2UgKGxldCBmID0gKHRyYW1wb2xpbmUgKChldmFsX2V4cHIgKGZvcm0pIChmZW52KSkpKSBpbiAoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAoaXNfY2FsbGFibGUgKGYpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkpKSkpKSB0aGVuIChjZWtfY2FsbCAoZikgKExpc3QgW3ZhbHVlXSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGlzX2xhbWJkYSAoZikpKSB0aGVuICh0cmFtcG9saW5lICgoY2FsbF9sYW1iZGEgKGYpICgoTGlzdCBbdmFsdWVdKSkgKGZlbnYpKSkpIGVsc2UgKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsoU3RyaW5nIFwiLT4gZm9ybSBub3QgY2FsbGFibGU6IFwiKTsgKGluc3BlY3QgKGYpKV0pKSkpKSkpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlc3RfZm9ybXMpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfdmFsdWUgKHJlc3VsdCcpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfdGhyZWFkX2ZyYW1lIChyZXN0X2Zvcm1zKSAoZmVudikpKSAocmVzdF9rKSkpKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiYXJnXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCBldmFsZWQgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJldmFsZWRcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiBsZXQgcmF3X2FyZ3MgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyYXctYXJnc1wiKSkpIGluIGxldCBobmFtZSA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImhlYWQtbmFtZVwiKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19uaWwgKGYpKSkgdGhlbiAobGV0ICgpID0gaWdub3JlICgoaWYgc3hfdHJ1dGh5ICgobGV0IF9hbmQgPSAhX3N0cmljdF9yZWYgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgaG5hbWUpKSB0aGVuIChzdHJpY3RfY2hlY2tfYXJncyAoaG5hbWUpICgoTGlzdCBbXSkpKSBlbHNlIE5pbCkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAoY29udGludWVfd2l0aF9jYWxsICh2YWx1ZSkgKChMaXN0IFtdKSkgKGZlbnYpIChyYXdfYXJncykgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAodmFsdWUpICgoTGlzdCBbXSkpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGxldCBuZXdfZXZhbGVkID0gKHByaW1fY2FsbCBcImFwcGVuZFwiIFtldmFsZWQ7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9ICFfc3RyaWN0X3JlZiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSBobmFtZSkpIHRoZW4gKHN0cmljdF9jaGVja19hcmdzIChobmFtZSkgKG5ld19ldmFsZWQpKSBlbHNlIE5pbCkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChuZXdfZXZhbGVkKSAoZmVudikgKHJhd19hcmdzKSAocmVzdF9rKSkpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChtYWtlX2FyZ19mcmFtZSAoZikgKG5ld19ldmFsZWQpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSAocmF3X2FyZ3MpIChobmFtZSkpKSAocmVzdF9rKSkpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRpY3RcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGxldCBsYXN0X3Jlc3VsdCA9IChsYXN0IChyZXN1bHRzKSkgaW4gbGV0IGNvbXBsZXRlZCA9IChwcmltX2NhbGwgXCJhcHBlbmRcIiBbKHByaW1fY2FsbCBcInNsaWNlXCIgW3Jlc3VsdHM7IChOdW1iZXIgMC4wKTsgKHByaW1fY2FsbCBcImRlY1wiIFsobGVuIChyZXN1bHRzKSldKV0pOyAoTGlzdCBbKExpc3QgWyhmaXJzdCAobGFzdF9yZXN1bHQpKTsgdmFsdWVdKV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgZCA9IChEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSkgaW4gKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoc3hfZGljdF9zZXRfYiBkIChmaXJzdCAocGFpcikpIChudGggKHBhaXIpICgoTnVtYmVyIDEuMCkpKSkpKSAoc3hfdG9fbGlzdCBjb21wbGV0ZWQpOyBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKGQpIChmZW52KSAocmVzdF9rKSkpKSBlbHNlIChsZXQgbmV4dF9lbnRyeSA9IChmaXJzdCAocmVtYWluaW5nKSkgaW4gKG1ha2VfY2VrX3N0YXRlICgobnRoIChuZXh0X2VudHJ5KSAoKE51bWJlciAxLjApKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfZGljdF9mcmFtZSAoKHJlc3QgKHJlbWFpbmluZykpKSAoKHByaW1fY2FsbCBcImFwcGVuZFwiIFtjb21wbGV0ZWQ7IChMaXN0IFsoTGlzdCBbKGZpcnN0IChuZXh0X2VudHJ5KSldKV0pXSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwiaG8tc2V0dXBcIildKSkgdGhlbiAobGV0IGhvX3R5cGUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJoby10eXBlXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBldmFsZWQgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgWyhnZXQgKGZyYW1lKSAoKFN0cmluZyBcImV2YWxlZFwiKSkpOyAoTGlzdCBbdmFsdWVdKV0pIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChob19zZXR1cF9kaXNwYXRjaCAoaG9fdHlwZSkgKGV2YWxlZCkgKGZlbnYpIChyZXN0X2spKSBlbHNlIChtYWtlX2Nla19zdGF0ZSAoKGZpcnN0IChyZW1haW5pbmcpKSkgKGZlbnYpICgoa29udF9wdXNoICgobWFrZV9ob19zZXR1cF9mcmFtZSAoaG9fdHlwZSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGV2YWxlZCkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwicmVzZXRcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImRlcmVmXCIpXSkpIHRoZW4gKGxldCB2YWwnID0gdmFsdWUgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19zaWduYWwgKHZhbCcpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWwnKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIChyZXN0X2spKSkgdGhlbiAocmVhY3RpdmVfc2hpZnRfZGVyZWYgKHZhbCcpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0ICgpID0gaWdub3JlICgobGV0IGN0eCA9IChzeF9jb250ZXh0ICgoU3RyaW5nIFwic3gtcmVhY3RpdmVcIikpIChOaWwpKSBpbiAoaWYgc3hfdHJ1dGh5IChjdHgpIHRoZW4gKGxldCBkZXBfbGlzdCA9IHJlZiAoKGdldCAoY3R4KSAoKFN0cmluZyBcImRlcHNcIikpKSkgaW4gbGV0IG5vdGlmeV9mbiA9IChnZXQgKGN0eCkgKChTdHJpbmcgXCJub3RpZnlcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoQm9vbCAobm90IChzeF90cnV0aHkgKChwcmltX2NhbGwgXCJjb250YWlucz9cIiBbIWRlcF9saXN0OyB2YWwnXSkpKSkpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChkZXBfbGlzdCA6PSBzeF9hcHBlbmRfYiAhZGVwX2xpc3QgdmFsJzsgTmlsKSkgaW4gKHNpZ25hbF9hZGRfc3ViX2IgKHZhbCcpIChub3RpZnlfZm4pKSkgZWxzZSBOaWwpKSBlbHNlIE5pbCkpKSBpbiAobWFrZV9jZWtfdmFsdWUgKChzaWduYWxfdmFsdWUgKHZhbCcpKSkgKGZlbnYpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInJlYWN0aXZlLXJlc2V0XCIpXSkpIHRoZW4gKGxldCB1cGRhdGVfZm4gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ1cGRhdGUtZm5cIikpKSBpbiBsZXQgZmlyc3RfcCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZpcnN0LXJlbmRlclwiKSkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChsZXQgX2FuZCA9IHVwZGF0ZV9mbiBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKGZpcnN0X3ApKSkpKSkgdGhlbiAoY2VrX2NhbGwgKHVwZGF0ZV9mbikgKChMaXN0IFt2YWx1ZV0pKSkgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic2NvcGVcIildKSkgdGhlbiAobGV0IG5hbWUgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChsZXQgKCkgPSBpZ25vcmUgKChzY29wZV9wb3AgKG5hbWUpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGZlbnYpIChyZXN0X2spKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2Vfc2NvcGVfZnJhbWUgKG5hbWUpICgocmVzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcInByb3ZpZGVcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfcHJvdmlkZV9mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwibmFtZVwiKSkpKSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwidmFsdWVcIikpKSkgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic2NvcGUtYWNjXCIpXSkpIHRoZW4gKGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChlbXB0eV9wIChyZW1haW5pbmcpKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKG1ha2VfY2VrX3N0YXRlICgoZmlyc3QgKHJlbWFpbmluZykpKSAoZmVudikgKChrb250X3B1c2ggKChsZXQgbmV3X2ZyYW1lID0gKG1ha2Vfc2NvcGVfYWNjX2ZyYW1lICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJuYW1lXCIpKSkpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJ2YWx1ZVwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpIGluIChsZXQgKCkgPSBpZ25vcmUgKChzeF9kaWN0X3NldF9iIG5ld19mcmFtZSAoU3RyaW5nIFwiZW1pdHRlZFwiKSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbWl0dGVkXCIpKSkpKSBpbiBuZXdfZnJhbWUpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwibWFwXCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgcmVzdWx0cyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlc3VsdHNcIikpKSBpbiBsZXQgaW5kZXhlZCA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImluZGV4ZWRcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbmV3X3Jlc3VsdHMgPSAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFt2YWx1ZV0pXSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAobmV3X3Jlc3VsdHMpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobGV0IGNhbGxfYXJncyA9IChpZiBzeF90cnV0aHkgKGluZGV4ZWQpIHRoZW4gKExpc3QgWyhsZW4gKG5ld19yZXN1bHRzKSk7IChmaXJzdCAocmVtYWluaW5nKSldKSBlbHNlIChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIGluIGxldCBuZXh0X2ZyYW1lID0gKGlmIHN4X3RydXRoeSAoaW5kZXhlZCkgdGhlbiAobWFrZV9tYXBfaW5kZXhlZF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKG5ld19yZXN1bHRzKSAoZmVudikpIGVsc2UgKG1ha2VfbWFwX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAobmV3X3Jlc3VsdHMpIChmZW52KSkpIGluIChjb250aW51ZV93aXRoX2NhbGwgKGYpIChjYWxsX2FyZ3MpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAobmV4dF9mcmFtZSkgKHJlc3RfaykpKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJmaWx0ZXJcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCByZXN1bHRzID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVzdWx0c1wiKSkpIGluIGxldCBjdXJyZW50X2l0ZW0gPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJjdXJyZW50LWl0ZW1cIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChsZXQgbmV3X3Jlc3VsdHMgPSAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAocHJpbV9jYWxsIFwiYXBwZW5kXCIgW3Jlc3VsdHM7IChMaXN0IFtjdXJyZW50X2l0ZW1dKV0pIGVsc2UgcmVzdWx0cykgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAobmV3X3Jlc3VsdHMpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9maWx0ZXJfZnJhbWUgKGYpICgocmVzdCAocmVtYWluaW5nKSkpIChuZXdfcmVzdWx0cykgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSkpIChyZXN0X2spKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJyZWR1Y2VcIildKSkgdGhlbiAobGV0IGYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJmXCIpKSkgaW4gbGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgW3ZhbHVlOyAoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2VfcmVkdWNlX2ZyYW1lIChmKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJmb3ItZWFjaFwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICgoZW1wdHlfcCAocmVtYWluaW5nKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlIChOaWwpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9mb3JfZWFjaF9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSBlbHNlIChpZiBzeF90cnV0aHkgKChwcmltX2NhbGwgXCI9XCIgW2Z0OyAoU3RyaW5nIFwic29tZVwiKV0pKSB0aGVuIChsZXQgZiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImZcIikpKSBpbiBsZXQgcmVtYWluaW5nID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwicmVtYWluaW5nXCIpKSkgaW4gbGV0IGZlbnYgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSBpbiAoaWYgc3hfdHJ1dGh5ICh2YWx1ZSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGNvbnRpbnVlX3dpdGhfY2FsbCAoZikgKChMaXN0IFsoZmlyc3QgKHJlbWFpbmluZykpXSkpIChmZW52KSAoKExpc3QgW10pKSAoKGtvbnRfcHVzaCAoKG1ha2Vfc29tZV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImV2ZXJ5XCIpXSkpIHRoZW4gKGxldCBmID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIGxldCByZW1haW5pbmcgPSAoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJyZW1haW5pbmdcIikpKSBpbiBsZXQgZmVudiA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcImVudlwiKSkpIGluIChpZiBzeF90cnV0aHkgKChCb29sIChub3QgKHN4X3RydXRoeSAodmFsdWUpKSkpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgZmFsc2UpKSAoZmVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAoKEJvb2wgdHJ1ZSkpIChmZW52KSAocmVzdF9rKSkgZWxzZSAoY29udGludWVfd2l0aF9jYWxsIChmKSAoKExpc3QgWyhmaXJzdCAocmVtYWluaW5nKSldKSkgKGZlbnYpICgoTGlzdCBbXSkpICgoa29udF9wdXNoICgobWFrZV9ldmVyeV9mcmFtZSAoZikgKChyZXN0IChyZW1haW5pbmcpKSkgKGZlbnYpKSkgKHJlc3RfaykpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImhhbmRsZXJcIildKSkgdGhlbiAobGV0IHJlbWFpbmluZyA9IChnZXQgKGZyYW1lKSAoKFN0cmluZyBcInJlbWFpbmluZ1wiKSkpIGluIGxldCBmZW52ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZW52XCIpKSkgaW4gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKHJlbWFpbmluZykpKSB0aGVuIChtYWtlX2Nla192YWx1ZSAodmFsdWUpIChmZW52KSAocmVzdF9rKSkgZWxzZSAobWFrZV9jZWtfc3RhdGUgKChmaXJzdCAocmVtYWluaW5nKSkpIChmZW52KSAoKGtvbnRfcHVzaCAoKG1ha2VfaGFuZGxlcl9mcmFtZSAoKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpKSAoKHJlc3QgKHJlbWFpbmluZykpKSAoZmVudikpKSAocmVzdF9rKSkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJyZXN0YXJ0XCIpXSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICh2YWx1ZSkgKGVudikgKHJlc3RfaykpIGVsc2UgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbZnQ7IChTdHJpbmcgXCJzaWduYWwtcmV0dXJuXCIpXSkpIHRoZW4gKGxldCBzYXZlZF9rb250ID0gKGdldCAoZnJhbWUpICgoU3RyaW5nIFwiZlwiKSkpIGluIChtYWtlX2Nla192YWx1ZSAodmFsdWUpICgoZ2V0IChmcmFtZSkgKChTdHJpbmcgXCJlbnZcIikpKSkgKHNhdmVkX2tvbnQpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPVwiIFtmdDsgKFN0cmluZyBcImNvbXAtdHJhY2VcIildKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKHZhbHVlKSAoZW52KSAocmVzdF9rKSkgZWxzZSAocmFpc2UgKEV2YWxfZXJyb3IgKHZhbHVlX3RvX3N0ciAoU3RyaW5nIChzeF9zdHIgWyhTdHJpbmcgXCJVbmtub3duIGZyYW1lIHR5cGU6IFwiKTsgZnRdKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSlcblxuKCogY29udGludWUtd2l0aC1jYWxsICopXG5hbmQgY29udGludWVfd2l0aF9jYWxsIGYgYXJncyBlbnYgcmF3X2FyZ3Mga29udCA9XG4gIChpZiBzeF90cnV0aHkgKChjb250aW51YXRpb25fcCAoZikpKSB0aGVuIChsZXQgYXJnID0gKGlmIHN4X3RydXRoeSAoKGVtcHR5X3AgKGFyZ3MpKSkgdGhlbiBOaWwgZWxzZSAoZmlyc3QgKGFyZ3MpKSkgaW4gbGV0IGNvbnRfZGF0YSA9IChjb250aW51YXRpb25fZGF0YSAoZikpIGluIChsZXQgY2FwdHVyZWQgPSAoZ2V0IChjb250X2RhdGEpICgoU3RyaW5nIFwiY2FwdHVyZWRcIikpKSBpbiAobGV0IHJlc3VsdCcgPSAoY2VrX3J1biAoKG1ha2VfY2VrX3ZhbHVlIChhcmcpIChlbnYpIChjYXB0dXJlZCkpKSkgaW4gKG1ha2VfY2VrX3ZhbHVlIChyZXN1bHQnKSAoZW52KSAoa29udCkpKSkpIGVsc2UgKGlmIHN4X3RydXRoeSAoKGxldCBfYW5kID0gKGlzX2NhbGxhYmxlIChmKSkgaW4gaWYgbm90IChzeF90cnV0aHkgX2FuZCkgdGhlbiBfYW5kIGVsc2UgKGxldCBfYW5kID0gKEJvb2wgKG5vdCAoc3hfdHJ1dGh5ICgoaXNfbGFtYmRhIChmKSkpKSkpIGluIGlmIG5vdCAoc3hfdHJ1dGh5IF9hbmQpIHRoZW4gX2FuZCBlbHNlIChsZXQgX2FuZCA9IChCb29sIChub3QgKHN4X3RydXRoeSAoKGlzX2NvbXBvbmVudCAoZikpKSkpKSBpbiBpZiBub3QgKHN4X3RydXRoeSBfYW5kKSB0aGVuIF9hbmQgZWxzZSAoQm9vbCAobm90IChzeF90cnV0aHkgKChpc19pc2xhbmQgKGYpKSkpKSkpKSkpIHRoZW4gKG1ha2VfY2VrX3ZhbHVlICgoc3hfYXBwbHkgZiBhcmdzKSkgKGVudikgKGtvbnQpKSBlbHNlIChpZiBzeF90cnV0aHkgKChpc19sYW1iZGEgKGYpKSkgdGhlbiAobGV0IHBhcmFtcyA9IChsYW1iZGFfcGFyYW1zIChmKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGxhbWJkYV9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAoaWYgc3hfdHJ1dGh5ICgocHJpbV9jYWxsIFwiPlwiIFsobGVuIChhcmdzKSk7IChsZW4gKHBhcmFtcykpXSkpIHRoZW4gKHJhaXNlIChFdmFsX2Vycm9yICh2YWx1ZV90b19zdHIgKFN0cmluZyAoc3hfc3RyIFsobGV0IF9vciA9IChsYW1iZGFfbmFtZSAoZikpIGluIGlmIHN4X3RydXRoeSBfb3IgdGhlbiBfb3IgZWxzZSAoU3RyaW5nIFwibGFtYmRhXCIpKTsgKFN0cmluZyBcIiBleHBlY3RzIFwiKTsgKGxlbiAocGFyYW1zKSk7IChTdHJpbmcgXCIgYXJncywgZ290IFwiKTsgKGxlbiAoYXJncykpXSkpKSkpIGVsc2UgKGxldCAoKSA9IGlnbm9yZSAoKExpc3QuaXRlciAoZnVuIHBhaXIgLT4gaWdub3JlICgoZW52X2JpbmQgbG9jYWwgKHN4X3RvX3N0cmluZyAoZmlyc3QgKHBhaXIpKSkgKG50aCAocGFpcikgKChOdW1iZXIgMS4wKSkpKSkpIChzeF90b19saXN0IChwcmltX2NhbGwgXCJ6aXBcIiBbcGFyYW1zOyBhcmdzXSkpOyBOaWwpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIE5pbCkpKSAoc3hfdG9fbGlzdCAocHJpbV9jYWxsIFwic2xpY2VcIiBbcGFyYW1zOyAobGVuIChhcmdzKSldKSk7IE5pbCkpIGluIChtYXRjaCAhaml0X2NhbGxfaG9vaywgZiB3aXRoIHwgU29tZSBob29rLCBMYW1iZGEgbCB3aGVuIGwubF9uYW1lIDw+IE5vbmUgLT4gbGV0IGFyZ3NfbGlzdCA9IG1hdGNoIGFyZ3Mgd2l0aCBMaXN0IGEgfCBMaXN0UmVmIHsgY29udGVudHMgPSBhIH0gLT4gYSB8IF8gLT4gW10gaW4gKG1hdGNoIGhvb2sgZiBhcmdzX2xpc3Qgd2l0aCBTb21lIHJlc3VsdCAtPiBtYWtlX2Nla192YWx1ZSByZXN1bHQgbG9jYWwga29udCB8IE5vbmUgLT4gbWFrZV9jZWtfc3RhdGUgKGxhbWJkYV9ib2R5IGYpIGxvY2FsIGtvbnQpIHwgXyAtPiBtYWtlX2Nla19zdGF0ZSAoKGxhbWJkYV9ib2R5IChmKSkpIChsb2NhbCkgKGtvbnQpKSkpKSkgZWxzZSAoaWYgc3hfdHJ1dGh5ICgobGV0IF9vciA9IChpc19jb21wb25lbnQgKGYpKSBpbiBpZiBzeF90cnV0aHkgX29yIHRoZW4gX29yIGVsc2UgKGlzX2lzbGFuZCAoZikpKSkgdGhlbiAobGV0IHBhcnNlZCA9IChwYXJzZV9rZXl3b3JkX2FyZ3MgKHJhd19hcmdzKSAoZW52KSkgaW4gbGV0IGt3YXJncyA9IChmaXJzdCAocGFyc2VkKSkgaW4gbGV0IGNoaWxkcmVuID0gKG50aCAocGFyc2VkKSAoKE51bWJlciAxLjApKSkgaW4gbGV0IGxvY2FsID0gKGVudl9tZXJnZSAoKGNvbXBvbmVudF9jbG9zdXJlIChmKSkpIChlbnYpKSBpbiAobGV0ICgpID0gaWdub3JlICgoTGlzdC5pdGVyIChmdW4gcCAtPiBpZ25vcmUgKChlbnZfYmluZCBsb2NhbCAoc3hfdG9fc3RyaW5nIHApIChsZXQgX29yID0gKGRpY3RfZ2V0IChrd2FyZ3MpIChwKSkgaW4gaWYgc3hfdHJ1dGh5IF9vciB0aGVuIF9vciBlbHNlIE5pbCkpKSkgKHN4X3RvX2xpc3QgKGNvbXBvbmVudF9wYXJhbXMgKGYpKSk7IE5pbCkpIGluIChsZXQgKCkgPSBpZ25vcmUgKChpZiBzeF90cnV0aHkgKChjb21wb25lbnRfaGFzX2NoaWxkcmVuIChmKSkpIHRoZW4gKGVudl9iaW5kIGxvY2FsIChzeF90b19zdHJpbmcgKFN0cmluZyBcImNoaWxkcmVuXCIpKSBjaGlsZHJlbikgZWxzZSBOaWwpKSBpbiAobWFrZV9jZWtfc3RhdGUgKChjb21wb25lbnRfYm9keSAoZikpKSAobG9jYWwpICgoa29udF9wdXNoICgobWFrZV9jb21wX3RyYWNlX2ZyYW1lICgoY29tcG9uZW50X25hbWUgKGYpKSkgKChjb21wb25lbnRfZmlsZSAoZikpKSkpIChrb250KSkpKSkpKSBlbHNlIChyYWlzZSAoRXZhbF9lcnJvciAodmFsdWVfdG9fc3RyIChTdHJpbmcgKHN4X3N0ciBbKFN0cmluZyBcIk5vdCBjYWxsYWJsZTogXCIpOyAoaW5zcGVjdCAoZikpXSkpKSkpKSkpKVxuXG4oKiBzZi1jYXNlLXN0ZXAtbG9vcCAqKVxuYW5kIHNmX2Nhc2Vfc3RlcF9sb29wIG1hdGNoX3ZhbCBjbGF1c2VzIGVudiBrb250ID1cbiAgKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIjxcIiBbKGxlbiAoY2xhdXNlcykpOyAoTnVtYmVyIDIuMCldKSkgdGhlbiAobWFrZV9jZWtfdmFsdWUgKE5pbCkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdCA9IChmaXJzdCAoY2xhdXNlcykpIGluIGxldCBib2R5ID0gKG50aCAoY2xhdXNlcykgKChOdW1iZXIgMS4wKSkpIGluIChpZiBzeF90cnV0aHkgKChpc19lbHNlX2NsYXVzZSAodGVzdCkpKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChsZXQgdGVzdF92YWwgPSAodHJhbXBvbGluZSAoKGV2YWxfZXhwciAodGVzdCkgKGVudikpKSkgaW4gKGlmIHN4X3RydXRoeSAoKHByaW1fY2FsbCBcIj1cIiBbbWF0Y2hfdmFsOyB0ZXN0X3ZhbF0pKSB0aGVuIChtYWtlX2Nla19zdGF0ZSAoYm9keSkgKGVudikgKGtvbnQpKSBlbHNlIChzZl9jYXNlX3N0ZXBfbG9vcCAobWF0Y2hfdmFsKSAoKHByaW1fY2FsbCBcInNsaWNlXCIgW2NsYXVzZXM7IChOdW1iZXIgMi4wKV0pKSAoZW52KSAoa29udCkpKSkpKSlcblxuKCogZXZhbC1leHByLWNlayAqKVxuYW5kIGV2YWxfZXhwcl9jZWsgZXhwciBlbnYgPVxuICAoY2VrX3J1biAoKG1ha2VfY2VrX3N0YXRlIChleHByKSAoZW52KSAoKExpc3QgW10pKSkpKVxuXG4oKiB0cmFtcG9saW5lLWNlayAqKVxuYW5kIHRyYW1wb2xpbmVfY2VrIHZhbCcgPVxuICAoaWYgc3hfdHJ1dGh5ICgoaXNfdGh1bmsgKHZhbCcpKSkgdGhlbiAoZXZhbF9leHByX2NlayAoKHRodW5rX2V4cHIgKHZhbCcpKSkgKCh0aHVua19lbnYgKHZhbCcpKSkpIGVsc2UgdmFsJylcblxuKCogZXZhbC1leHByICopXG5hbmQgZXZhbF9leHByIGV4cHIgZW52ID1cbiAgKGNla19ydW4gKChtYWtlX2Nla19zdGF0ZSAoZXhwcikgKGVudikgKChMaXN0IFtdKSkpKSlcblxuXG4oKiBXaXJlIHVwIHRyYW1wb2xpbmUgdG8gcmVzb2x2ZSB0aHVua3MgdmlhIHRoZSBDRUsgbWFjaGluZSAqKVxubGV0ICgpID0gdHJhbXBvbGluZV9mbiA6PSAoZnVuIHYgLT5cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgVGh1bmsgKGV4cHIsIGVudikgLT4gZXZhbF9leHByIGV4cHIgKEVudiBlbnYpXG4gIHwgXyAtPiB2KVxuXG4oKiBXaXJlIHVwIHRoZSBwcmltaXRpdmVzIHRyYW1wb2xpbmUgc28gY2FsbF9hbnkgaW4gSE8gZm9ybXMgcmVzb2x2ZXMgVGh1bmtzICopXG5sZXQgKCkgPSBTeF9wcmltaXRpdmVzLl9zeF90cmFtcG9saW5lX2ZuIDo9ICF0cmFtcG9saW5lX2ZuXG5cbigqIENvbGxlY3QgY29tcG9uZW50IHRyYWNlIGZyb20gYSBrb250IHZhbHVlICopXG5sZXQgY29sbGVjdF9jb21wX3RyYWNlIGtvbnQgPVxuICBsZXQgdHJhY2UgPSByZWYgW10gaW5cbiAgbGV0IGsgPSByZWYga29udCBpblxuICB3aGlsZSAobWF0Y2ggIWsgd2l0aCBMaXN0IChfOjpfKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgZG9cbiAgICAobWF0Y2ggIWsgd2l0aFxuICAgICB8IExpc3QgKGZyYW1lIDo6IHJlc3QpIC0+XG4gICAgICAgKG1hdGNoIGZyYW1lIHdpdGhcbiAgICAgICAgfCBDZWtGcmFtZSBmIHdoZW4gZi5jZl90eXBlID0gXCJjb21wLXRyYWNlXCIgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGYuY2ZfbmFtZSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiIGluXG4gICAgICAgICAgbGV0IGZpbGUgPSBtYXRjaCBmLmNmX2VudiB3aXRoIFN0cmluZyBzIC0+IHMgfCBOaWwgLT4gXCJcIiB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIHRyYWNlIDo9IChuYW1lLCBmaWxlKSA6OiAhdHJhY2VcbiAgICAgICAgfCBEaWN0IGQgd2hlbiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidHlwZVwiIHdpdGggU29tZSAoU3RyaW5nIFwiY29tcC10cmFjZVwiKSAtPiB0cnVlIHwgXyAtPiBmYWxzZSkgLT5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcIm5hbWVcIiB3aXRoIFNvbWUgKFN0cmluZyBzKSAtPiBzIHwgXyAtPiBcIj9cIiBpblxuICAgICAgICAgIGxldCBmaWxlID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiZmlsZVwiIHdpdGggU29tZSAoU3RyaW5nIHMpIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICB0cmFjZSA6PSAobmFtZSwgZmlsZSkgOjogIXRyYWNlXG4gICAgICAgIHwgXyAtPiAoKSk7XG4gICAgICAgayA6PSBMaXN0IHJlc3RcbiAgICAgfCBfIC0+IGsgOj0gTGlzdCBbXSlcbiAgZG9uZTtcbiAgTGlzdC5yZXYgIXRyYWNlXG5cbigqIEZvcm1hdCBhIGNvbXAtdHJhY2UgaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyAqKVxubGV0IGZvcm1hdF9jb21wX3RyYWNlIHRyYWNlID1cbiAgbWF0Y2ggdHJhY2Ugd2l0aFxuICB8IFtdIC0+IFwiXCJcbiAgfCBlbnRyaWVzIC0+XG4gICAgbGV0IGxpbmVzID0gTGlzdC5tYXBpIChmdW4gaSAobmFtZSwgZmlsZSkgLT5cbiAgICAgIGxldCBwcmVmaXggPSBpZiBpID0gMCB0aGVuIFwiICBpbiBcIiBlbHNlIFwiICBjYWxsZWQgZnJvbSBcIiBpblxuICAgICAgaWYgZmlsZSA9IFwiXCIgdGhlbiBwcmVmaXggXiBcIn5cIiBeIG5hbWVcbiAgICAgIGVsc2UgcHJlZml4IF4gXCJ+XCIgXiBuYW1lIF4gXCIgKFwiIF4gZmlsZSBeIFwiKVwiXG4gICAgKSBlbnRyaWVzIGluXG4gICAgXCJcblwiIF4gU3RyaW5nLmNvbmNhdCBcIlxuXCIgbGluZXNcblxuKCogRW5oYW5jZSBhbiBlcnJvciBtZXNzYWdlIHdpdGggY29tcG9uZW50IHRyYWNlICopXG5sZXQgZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIG1zZyA9XG4gIGxldCB0cmFjZSA9IGNvbGxlY3RfY29tcF90cmFjZSAhX2xhc3RfZXJyb3Jfa29udCBpblxuICBfbGFzdF9lcnJvcl9rb250IDo9IE5pbDtcbiAgbXNnIF4gKGZvcm1hdF9jb21wX3RyYWNlIHRyYWNlKVxuXG5cblxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2VxdWFsIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwyIiwiYTEiLCJnbG9iYWxfZGF0YSIsIlN4X3J1bnRpbWUiLCJTeF90eXBlcyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0xpc3QiLCJTdGRsaWIiLCJTdGRsaWJfU3RyaW5nIiwiU3hfcHJpbWl0aXZlcyIsInRyYW1wb2xpbmVfZm4iLCJ2IiwidHJhbXBvbGluZSIsInN0cmljdF9yZWYiLCJzdHJpY3QiLCJwcmltX3BhcmFtX3R5cGVzX3JlZiIsInByaW1fcGFyYW1fdHlwZXMiLCJjc3RfZXZhbCIsIm1ha2VfY2VrX3N0YXRlIiwiY29udHJvbCIsImVudiIsImtvbnQiLCJjc3RfY29udGludWUiLCJtYWtlX2Nla192YWx1ZSIsInZhbHVlIiwiY3N0IiwiY3N0X2tvbnQiLCJjc3RfcGhhc2UiLCJjZWtfdGVybWluYWxfcCIsInN0YXRlIiwiYW5kIiwiY2VrX2NvbnRyb2wiLCJzIiwiY3N0X2VudiIsImNla19lbnYiLCJjZWtfa29udCIsImNla19waGFzZSIsImNzdF92YWx1ZSIsImNla192YWx1ZSIsImNzdF9pZiIsIm1ha2VfaWZfZnJhbWUiLCJ0aGVuX2V4cHIiLCJlbHNlX2V4cHIiLCJjc3Rfd2hlbiIsIm1ha2Vfd2hlbl9mcmFtZSIsImJvZHlfZXhwcnMiLCJjc3RfYmVnaW4iLCJtYWtlX2JlZ2luX2ZyYW1lIiwicmVtYWluaW5nIiwiY3N0X2xldCIsIm1ha2VfbGV0X2ZyYW1lIiwibmFtZSIsImJvZHkiLCJsb2NhbCIsImNzdF9kZWZpbmUiLCJtYWtlX2RlZmluZV9mcmFtZSIsImhhc19lZmZlY3RzIiwiZWZmZWN0X2xpc3QiLCJjc3Rfc2V0IiwibWFrZV9zZXRfZnJhbWUiLCJjc3RfYXJnIiwibWFrZV9hcmdfZnJhbWUiLCJldmFsZWQiLCJyYXdfYXJncyIsImhlYWRfbmFtZSIsIm1ha2VfY2FsbF9mcmFtZSIsImFyZ3MiLCJjc3RfY29uZCIsIm1ha2VfY29uZF9mcmFtZSIsInNjaGVtZV9wIiwiY3N0X2Nhc2UiLCJtYWtlX2Nhc2VfZnJhbWUiLCJtYXRjaF92YWwiLCJjc3RfdGhyZWFkIiwibWFrZV90aHJlYWRfZnJhbWUiLCJjc3RfbWFwIiwibWFrZV9tYXBfZnJhbWUiLCJyZXN1bHRzIiwibWFrZV9tYXBfaW5kZXhlZF9mcmFtZSIsImNzdF9maWx0ZXIiLCJtYWtlX2ZpbHRlcl9mcmFtZSIsImN1cnJlbnRfaXRlbSIsImNzdF9yZWR1Y2UiLCJtYWtlX3JlZHVjZV9mcmFtZSIsImNzdF9mb3JfZWFjaCIsIm1ha2VfZm9yX2VhY2hfZnJhbWUiLCJjc3Rfc29tZSIsIm1ha2Vfc29tZV9mcmFtZSIsImNzdF9ldmVyeSIsIm1ha2VfZXZlcnlfZnJhbWUiLCJjc3Rfc2NvcGUiLCJtYWtlX3Njb3BlX2ZyYW1lIiwiY3N0X3Byb3ZpZGUiLCJtYWtlX3Byb3ZpZGVfZnJhbWUiLCJjc3Rfc2NvcGVfYWNjIiwibWFrZV9zY29wZV9hY2NfZnJhbWUiLCJjc3RfcmVzZXQiLCJtYWtlX3Jlc2V0X2ZyYW1lIiwiY3N0X2RpY3QiLCJtYWtlX2RpY3RfZnJhbWUiLCJjc3RfYW5kIiwibWFrZV9hbmRfZnJhbWUiLCJjc3Rfb3IiLCJtYWtlX29yX2ZyYW1lIiwiY3N0X2R5bmFtaWNfd2luZCIsIm1ha2VfZHluYW1pY193aW5kX2ZyYW1lIiwicGhhc2UiLCJib2R5X3RodW5rIiwiYWZ0ZXJfdGh1bmsiLCJjc3RfcmVhY3RpdmVfcmVzZXQiLCJtYWtlX3JlYWN0aXZlX3Jlc2V0X2ZyYW1lIiwidXBkYXRlX2ZuIiwiZmlyc3RfcmVuZGVyX3AiLCJjc3RfZGVyZWYiLCJtYWtlX2RlcmVmX2ZyYW1lIiwiY3N0X2hvX3NldHVwIiwibWFrZV9ob19zZXR1cF9mcmFtZSIsImhvX3R5cGUiLCJyZW1haW5pbmdfYXJncyIsImV2YWxlZF9hcmdzIiwiY3N0X2NvbXBfdHJhY2UiLCJtYWtlX2NvbXBfdHJhY2VfZnJhbWUiLCJmaWxlIiwiY3N0X2ZpbGUiLCJjc3RfbmFtZSIsImtvbnRfY29sbGVjdF9jb21wX3RyYWNlIiwiZnJhbWUiLCJkIiwiY3N0X2hhbmRsZXIiLCJtYWtlX2hhbmRsZXJfZnJhbWUiLCJoYW5kbGVycyIsImNzdF9yZXN0YXJ0IiwibWFrZV9yZXN0YXJ0X2ZyYW1lIiwicmVzdGFydHMiLCJjc3Rfc2lnbmFsX3JldHVybiIsIm1ha2Vfc2lnbmFsX3JldHVybl9mcmFtZSIsInNhdmVkX2tvbnQiLCJmaW5kX21hdGNoaW5nX2hhbmRsZXIiLCJjb25kaXRpb24iLCJwYWlyIiwicHJlZCIsImhhbmRsZXJfZm4iLCJjc3RfZiIsImtvbnRfZmluZF9oYW5kbGVyIiwibWF0Y2giLCJmaW5kX25hbWVkX3Jlc3RhcnQiLCJlbnRyeSIsImtvbnRfZmluZF9yZXN0YXJ0IiwiY3N0X3R5cGUiLCJmcmFtZV90eXBlIiwia29udF9wdXNoIiwia29udF90b3AiLCJrb250X3BvcCIsImtvbnRfZW1wdHlfcCIsImNzdF9hcHBlbmQiLCJjYXB0dXJlZCIsImtvbnRfY2FwdHVyZV90b19yZXNldCIsImsiLCJvciIsImtvbnRfZmluZF9wcm92aWRlIiwia29udF9maW5kX3Njb3BlX2FjYyIsImhhc19yZWFjdGl2ZV9yZXNldF9mcmFtZV9wIiwia29udF9jYXB0dXJlX3RvX3JlYWN0aXZlX3Jlc2V0IiwiY3VzdG9tX3NwZWNpYWxfZm9ybXMiLCJyZWdpc3Rlcl9zcGVjaWFsX2Zvcm0iLCJoYW5kbGVyIiwic2V0X3N0cmljdF9iIiwidmFsIiwic2V0X3ByaW1fcGFyYW1fdHlwZXNfYiIsInR5cGVzIiwiY3N0X2Jvb2xlYW4iLCJjc3Rfa2V5d29yZCIsImNzdF9sYW1iZGEiLCJjc3RfbGlzdCIsImNzdF9uaWwiLCJjc3RfbnVtYmVyIiwiY3N0X3NsaWNlIiwiY3N0X3N0cmluZyIsImNzdF9zeW1ib2wiLCJ2YWx1ZV9tYXRjaGVzX3R5cGVfcCIsImV4cGVjdGVkX3R5cGUiLCJjc3RfZXhwZWN0ZWQiLCJjc3RfZ290IiwiY3N0X1R5cGVfZXJyb3IiLCJzdHJpY3RfY2hlY2tfYXJncyIsInNwZWMiLCJwb3NpdGlvbmFsIiwicmVzdF90eXBlIiwiaSIsInAiLCJpZHgiLCJwYXJhbSIsInBfbmFtZSIsInBfdHlwZSIsImNzdF9hcmdzX2dvdCIsImNzdF9leHBlY3RzIiwiY3N0X3ppcCIsImNhbGxfbGFtYmRhIiwiY2FsbGVyX2VudiIsInBhcmFtcyIsImNzdF9jaGlsZHJlbiIsImNhbGxfY29tcG9uZW50IiwiY29tcCIsInBhcnNlZCIsImt3YXJncyIsImNoaWxkcmVuIiwiY3N0X2Fzc29jIiwiY3N0X2kiLCJjc3RfaW5jIiwiY3N0X3NraXAiLCJwYXJzZV9rZXl3b3JkX2FyZ3MiLCJhcmciLCJza2lwIiwiY29uZF9zY2hlbWVfcCIsImNsYXVzZXMiLCJjIiwiY3N0X2Vsc2UiLCJpc19lbHNlX2NsYXVzZSIsInRlc3QiLCJjc3RfcmFuZ2UiLCJzZl9uYW1lZF9sZXQiLCJsb29wX25hbWUiLCJiaW5kaW5ncyIsImluaXRzIiwiYmluZGluZyIsImFjYyIsInBhaXJfaWR4IiwibG9vcF9ib2R5IiwibG9vcF9mbiIsImluaXRfdmFscyIsImUiLCJjc3RfYXMiLCJzZl9sYW1iZGEiLCJwYXJhbXNfZXhwciIsInBhcmFtX25hbWVzIiwiY3N0X2N1cnJlbnRfZmlsZSIsImNzdF9lZmZlY3RfYW5ub3RhdGlvbnMiLCJjc3RfZWZmZWN0cyIsImNzdF9rZXlzIiwic2ZfZGVmY29tcCIsIm5hbWVfc3ltIiwicGFyYW1zX3JhdyIsImNvbXBfbmFtZSIsImhhc19jaGlsZHJlbiIsInBhcmFtX3R5cGVzIiwiYWZmaW5pdHkiLCJlZmZlY3RzIiwiZWZmZWN0X2FubnMiLCJkZWZjb21wX2t3YXJnIiwia2V5IiwiZGVmYXVsdCQiLCJlbmQiLCJyZXN1bHQiLCJjc3RfcmVzdCIsInBhcnNlX2NvbXBfcGFyYW1zIiwiaW5fa2V5IiwicHR5cGUiLCJ0eXBlX3ZhbCIsInNmX2RlZmlzbGFuZCIsImlzbGFuZCIsInNmX2RlZm1hY3JvIiwicmVzdF9wYXJhbSIsIm1hYyIsImNzdF9pbl9yZXN0IiwicGFyc2VfbWFjcm9fcGFyYW1zIiwiY3N0X2NvbmNhdCIsInFxX2V4cGFuZCIsInRlbXBsYXRlIiwiaGVhZCIsIml0ZW0iLCJzcGxpY2VkIiwiY3N0X2RlYyIsInNmX2xldHJlYyIsIm5hbWVzIiwidmFsX2V4cHJzIiwidm5hbWUiLCJ2YWxfZXhwciIsInZhbHVlcyIsIm4iLCJzdGVwX3NmX2xldHJlYyIsInRoayIsInNmX2R5bmFtaWNfd2luZCIsImJlZm9yZSIsImFmdGVyIiwic2Zfc2NvcGUiLCJyZXN0Iiwic2ZfcHJvdmlkZSIsImV4cGFuZF9tYWNybyIsImxhc3RfZXJyb3Jfa29udCIsImNla19ydW4iLCJleG4iLCJtc2ciLCJjZWtfc3RlcCIsInN0ZXBfZXZhbCIsImV4cHIiLCJrcyIsImZpcnN0X2tleSIsInJlbWFpbmluZ19lbnRyaWVzIiwiY3N0X2VtaXR0ZWQiLCJjc3RfbWFwX2luZGV4ZWQiLCJjc3RfcXVvdGUiLCJyZW5kZXJfY2hlY2siLCJyZW5kZXJfZm4iLCJzdGVwX2V2YWxfbGlzdCIsIm1hdGNoX2ZpbmRfY2xhdXNlIiwiY2xhdXNlIiwicGF0dGVybiIsIm1hdGNoX3BhdHRlcm4iLCJwYWlycyIsInN0ZXBfc2ZfbWF0Y2giLCJzdGVwX3NmX2hhbmRsZXJfYmluZCIsImhhbmRsZXJfc3BlY3MiLCJzdGVwX3NmX3Jlc3RhcnRfY2FzZSIsInJlc3RhcnRfc3BlY3MiLCJzdGVwX3NmX3NpZ25hbCIsInN0ZXBfc2ZfaW52b2tlX3Jlc3RhcnQiLCJybiIsInJlc3RhcnRfbmFtZSIsInJlc3RhcnRfYXJnIiwiZm91bmQiLCJyZXN0YXJ0X2ZyYW1lIiwicmVzdF9rb250IiwicmVzdGFydF9lbnYiLCJzdGVwX3NmX2lmIiwic3RlcF9zZl93aGVuIiwic3RlcF9zZl9iZWdpbiIsInN0ZXBfc2ZfbGV0IiwiZmlyc3RfYmluZGluZyIsInJlc3RfYmluZGluZ3MiLCJzdGVwX3NmX2RlZmluZSIsInZhbF9pZHgiLCJzdGVwX3NmX3NldF9iIiwic3RlcF9zZl9hbmQiLCJzdGVwX3NmX29yIiwic3RlcF9zZl9jb25kIiwic3RlcF9zZl9jYXNlIiwic3RlcF9zZl90aHJlYWRfZmlyc3QiLCJzdGVwX3NmX2xhbWJkYSIsInN0ZXBfc2Zfc2NvcGUiLCJyZXN0X2FyZ3MiLCJzdGVwX3NmX3Byb3ZpZGUiLCJzdGVwX3NmX2NvbnRleHQiLCJkZWZhdWx0X3ZhbCIsInNjb3BlX3ZhbCIsInN0ZXBfc2ZfZW1pdCIsInN0ZXBfc2ZfZW1pdHRlZCIsInN0ZXBfc2ZfcmVzZXQiLCJzdGVwX3NmX3NoaWZ0Iiwia19uYW1lIiwiY2FwdHVyZWRfcmVzdWx0Iiwic2hpZnRfZW52Iiwic3RlcF9zZl9kZXJlZiIsImNla19jYWxsIiwiYSIsImNzdF91cGRhdGVfZm4iLCJyZWFjdGl2ZV9zaGlmdF9kZXJlZiIsInNpZyIsInNjYW5fcmVzdWx0IiwiY2FwdHVyZWRfZnJhbWVzIiwicmVzZXRfZnJhbWUiLCJyZW1haW5pbmdfa29udCIsInN1YnNjcmliZXIiLCJuZXdfcmVzZXQiLCJuZXdfa29udCIsImluaXRpYWxfa29udCIsInN0ZXBfZXZhbF9jYWxsIiwiaG5hbWUiLCJob19mb3JtX25hbWVfcCIsImhvX2ZuX3AiLCJob19zd2FwX2FyZ3MiLCJiIiwiaG9fc2V0dXBfZGlzcGF0Y2giLCJvcmRlcmVkIiwiY29sbCIsImluaXQiLCJzdGVwX2hvX21hcCIsInN0ZXBfaG9fbWFwX2luZGV4ZWQiLCJzdGVwX2hvX2ZpbHRlciIsInN0ZXBfaG9fcmVkdWNlIiwic3RlcF9ob19zb21lIiwic3RlcF9ob19ldmVyeSIsInN0ZXBfaG9fZm9yX2VhY2giLCJjc3RfZm9ybV9ub3RfY2FsbGFibGUiLCJjc3RfYm9keSIsImNzdF9ldmFsZWQiLCJjc3RfcmVtYWluaW5nIiwiY3N0X3Jlc3VsdHMiLCJzdGVwX2NvbnRpbnVlIiwicmVzdF9rIiwiZnQiLCJmZW52IiwibmV4dF9iaW5kaW5nIiwiZWZmZWN0X25hbWVzIiwibmV4dCIsIm5leHRfdGVzdCIsIm5leHRfY2xhdXNlcyIsIm5leHRfY2xhdXNlIiwiZm9ybSIsInJlc3RfZm9ybXMiLCJyYXJncyIsImFsbF9hcmdzIiwibmV3X2V2YWxlZCIsImxhc3RfcmVzdWx0IiwiY29tcGxldGVkIiwibmV4dF9lbnRyeSIsImN0eCIsImRlcF9saXN0Iiwibm90aWZ5X2ZuIiwiZmlyc3RfcCIsIm5ld19mcmFtZSIsImluZGV4ZWQiLCJuZXdfcmVzdWx0cyIsImNhbGxfYXJncyIsIm5leHRfZnJhbWUiLCJqaXRfY2FsbF9ob29rIiwiY29udGludWVfd2l0aF9jYWxsIiwiY29udF9kYXRhIiwibCIsImhvb2siLCJhcmdzX2xpc3QiLCJzZl9jYXNlX3N0ZXBfbG9vcCIsInRlc3RfdmFsIiwiZXZhbF9leHByX2NlayIsInRyYW1wb2xpbmVfY2VrIiwiZXZhbF9leHByIiwiY29sbGVjdF9jb21wX3RyYWNlIiwidHJhY2UiLCJmb3JtYXRfY29tcF90cmFjZSIsImxpbmVzIiwicHJlZml4IiwiZW5oYW5jZV9lcnJvcl93aXRoX3RyYWNlIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLHNCQUFBO0FBQUEsWUFBQUMsV0FBQUMsR0FBQUM7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFGLEdBQUFDLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUEsYUFBQUMsR0NTeUQsU0FBQztBQUFBLFlBQUFDLFdBQUFELEdBQ3ZDLHNDQUFnQjtBQUFBO0FBQUEsSUFBQUUsYURWbkM7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsdUJBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxZQUFBQyxlQUFBQyxTQUFBQyxLQUFBQztBQUFBQSxJQ2tDRTtBQUFBLEdBQW9HO0FBQUEsT0FBQUMsZURsQ3RHO0FBQUEsWUFBQUMsZUFBQUMsT0FBQUosS0FBQUM7QUFBQUEsSUNzQ0U7QUFBQSxHQUFzRztBQUFBO0FBQUEsSUFBQUksTUR0Q3hHO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxlQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDMEM4QjtBQUFBLEtBQUFDLE1BQWhCO0FBQUEsSUFBa0YsbUNBQXNCO0FBQUEsWUFBbUI7QUFBQSxJQUFpQyxtQ0FBRTtBQUFBO0FBQUEsV0QxQzVLO0FBQUEsWUFBQUMsWUFBQUMsR0M4Q0Usc0NBQThCO0FBQUEsT0FBQUMsVUQ5Q2hDO0FBQUEsWUFBQUMsUUFBQUYsR0NrREUsc0NBQTBCO0FBQUEsV0RsRDVCO0FBQUEsWUFBQUcsU0FBQUgsR0NzREUsc0NBQTJCO0FBQUEsV0R0RDdCO0FBQUEsWUFBQUksVUFBQUosR0MwREUsc0NBQTRCO0FBQUEsT0FBQUssWUQxRDlCO0FBQUEsWUFBQUMsVUFBQU4sR0M4REUsc0NBQTRCO0FBQUEsT0FBQU8sU0Q5RDlCO0FBQUEsWUFBQUMsY0FBQUMsV0FBQUMsV0FBQXRCO0FBQUFBLElDa0VFO0FBQUEsR0FBdUw7QUFBQSxPQUFBdUIsV0RsRXpMO0FBQUEsWUFBQUMsZ0JBQUFDLFlBQUF6QjtBQUFBQSxJQ3NFRTtBQUFBLEdBQW9MO0FBQUEsT0FBQTBCLFlEdEV0TDtBQUFBLFlBQUFDLGlCQUFBQyxXQUFBNUI7QUFBQUEsSUMwRUU7QUFBQSxHQUFvTDtBQUFBLE9BQUE2QixVRDFFdEw7QUFBQSxZQUFBQyxlQUFBQyxNQUFBSCxXQUFBSSxNQUFBQztBQUFBQSxJQzhFRTtBQUFBLEdBQXNMO0FBQUEsT0FBQUMsYUQ5RXhMO0FBQUEsWUFBQUMsa0JBQUFKLE1BQUEvQixLQUFBb0MsYUFBQUM7QUFBQUEsSUNrRkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBZ007QUFBQSxPQUFBQyxVRGxGbE07QUFBQSxZQUFBQyxlQUFBUixNQUFBL0I7QUFBQUEsSUNzRkU7QUFBQSxHQUE2SztBQUFBLE9BQUF3QyxVRHRGL0s7QUFBQSxZQUFBQyxlQUFBL0QsR0FBQWdFLFFBQUFkLFdBQUE1QixLQUFBMkMsVUFBQUM7QUFBQUEsUUFBQUEsY0MwRjhMO0FBQUEsSUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUF1QztBQUFBLFlBQUFDLGdCQUFBbkUsR0FBQW9FLE1BQUE5QztBQUFBQSxJQUloUDtBQUFBLEdBQTRLO0FBQUEsT0FBQStDLFdEOUY5SztBQUFBLFlBQUFDLGdCQUFBcEIsV0FBQTVCLEtBQUFpRDtBQUFBQSxJQ2tHRTtBQUFBLEdBQXdMO0FBQUEsT0FBQUMsV0RsRzFMO0FBQUEsWUFBQUMsZ0JBQUFDLFdBQUF4QixXQUFBNUI7QUFBQUEsSUNzR0U7QUFBQSxHQUF5TDtBQUFBLE9BQUFxRCxhRHRHM0w7QUFBQSxZQUFBQyxrQkFBQTFCLFdBQUE1QjtBQUFBQSxJQzBHRTtBQUFBLEdBQXFMO0FBQUEsT0FBQXVELFVEMUd2TDtBQUFBLFlBQUFDLGVBQUE5RSxHQUFBa0QsV0FBQTZCLFNBQUF6RDtBQUFBQSxJQzhHRTtBQUFBLEdBQTZMO0FBQUEsV0Q5Ry9MO0FBQUEsWUFBQTBELHVCQUFBaEYsR0FBQWtELFdBQUE2QixTQUFBekQ7QUFBQUEsSUNrSEU7QUFBQSxHQUE0TDtBQUFBLE9BQUEyRCxhRGxIOUw7QUFBQSxZQUFBQyxrQkFBQWxGLEdBQUFrRCxXQUFBNkIsU0FBQUksY0FBQTdEO0FBQUFBLElDc0hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQWdNO0FBQUEsT0FBQThELGFEdEhsTTtBQUFBLFlBQUFDLGtCQUFBckYsR0FBQWtELFdBQUE1QjtBQUFBQSxJQzBIRTtBQUFBLEdBQW1MO0FBQUEsT0FBQWdFLGVEMUhyTDtBQUFBLFlBQUFDLG9CQUFBdkYsR0FBQWtELFdBQUE1QjtBQUFBQSxJQzhIRTtBQUFBLEdBQXFMO0FBQUEsT0FBQWtFLFdEOUh2TDtBQUFBLFlBQUFDLGdCQUFBekYsR0FBQWtELFdBQUE1QjtBQUFBQSxJQ2tJRTtBQUFBLEdBQWlMO0FBQUEsT0FBQW9FLFlEbEluTDtBQUFBLFlBQUFDLGlCQUFBM0YsR0FBQWtELFdBQUE1QjtBQUFBQSxJQ3NJRTtBQUFBLEdBQWtMO0FBQUEsT0FBQXNFLFlEdElwTDtBQUFBLFlBQUFDLGlCQUFBeEMsTUFBQUgsV0FBQTVCO0FBQUFBLElDMElFO0FBQUEsR0FBcUw7QUFBQSxPQUFBd0UsY0QxSXZMO0FBQUEsWUFBQUMsbUJBQUExQyxNQUFBM0IsT0FBQXdCLFdBQUE1QjtBQUFBQSxJQzhJRTtBQUFBLEdBQXlMO0FBQUEsT0FBQTBFLGdCRDlJM0w7QUFBQSxZQUFBQyxxQkFBQTVDLE1BQUEzQixPQUFBd0IsV0FBQTVCO0FBQUFBLFFBQUFJLFVDa0oyTDtBQUFBLElBQWE7QUFBQTtBQUFBLEdBQTZDO0FBQUEsT0FBQXdFLFlEbEpyUDtBQUFBLFlBQUFDLGlCQUFBN0U7QUFBQUEsSUNzSkU7QUFBQSxHQUE4SztBQUFBLE9BQUE4RSxXRHRKaEw7QUFBQSxZQUFBQyxnQkFBQW5ELFdBQUE2QixTQUFBekQ7QUFBQUEsSUMwSkU7QUFBQSxHQUF1TDtBQUFBLE9BQUFnRixVRDFKekw7QUFBQSxZQUFBQyxlQUFBckQsV0FBQTVCO0FBQUFBLElDOEpFO0FBQUEsR0FBa0w7QUFBQSxPQUFBa0YsU0Q5SnBMO0FBQUEsWUFBQUMsY0FBQXZELFdBQUE1QjtBQUFBQSxJQ2tLRTtBQUFBLEdBQWlMO0FBQUEsT0FBQW9GLG1CRGxLbkw7QUFBQSxZQUFBQyx3QkFBQUMsT0FBQUMsWUFBQUMsYUFBQXhGLEtDc0tFO0FBQUEsR0FBdUw7QUFBQSxPQUFBeUYscUJEdEt6TDtBQUFBLFlBQUFDLDBCQUFBMUYsS0FBQTJGLFdBQUFDO0FBQUFBLElDMEtFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXdNO0FBQUEsT0FBQUMsWUQxSzFNO0FBQUEsWUFBQUMsaUJBQUE5RjtBQUFBQSxJQzhLRTtBQUFBLEdBQThLO0FBQUEsT0FBQStGLGVEOUtoTDtBQUFBLFlBQUFDLG9CQUFBQyxTQUFBQyxnQkFBQUMsYUFBQW5HO0FBQUFBLElDa0xFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQXdNO0FBQUEsT0FBQW9HLGlCRGxMMU07QUFBQSxZQUFBQyxzQkFBQXRFLE1BQUF1RTtBQUFBQSxJQ3NMRTtBQUFBLEdBQXFMO0FBQUE7QUFBQSxJQUFBQyxXRHRMdkw7QUFBQSxJQUFBQyxXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyx3QkFBQXhHO0FBQUFBLFFBQUFBLE9DMExFO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBa0M7QUFBQTtBQUFBLE1BQUF5RyxRQUE0QjtBQUFBLFVBQWlEO0FBQUEsVUFBakI7QUFBQSxLQUFWO0FBQUE7QUFBQSxXQUFvUCx3QkFBMEI7QUFBQSxPQUFBQyxJQUE5SztBQUFBLFdBQThDO0FBQUEsTUFBMUI7QUFBQSxjQUFxRjtBQUFBLE1BQTFCO0FBQUEsTUFBeUQsMkNBQTBHO0FBQUE7QUFBQSxTQUFBMUcsU0FBbkI7QUFBQSxLQUFlO0FBQUE7QUFBQSxHQUFJO0FBQUEsT0FBQTJHLGNEMUw1YTtBQUFBLFlBQUFDLG1CQUFBQyxVQUFBbEYsV0FBQTVCO0FBQUFBLElDOExFO0FBQUEsR0FBMkw7QUFBQSxPQUFBK0csY0Q5TDdMO0FBQUEsWUFBQUMsbUJBQUFDLFVBQUFyRixXQUFBNUI7QUFBQUEsSUNrTUU7QUFBQSxHQUEyTDtBQUFBLE9BQUFrSCxvQkRsTTdMO0FBQUEsWUFBQUMseUJBQUFuSCxLQUFBb0g7QUFBQUEsSUNzTUU7QUFBQSxHQUE2TDtBQUFBLFdEdE0vTDtBQUFBLFlBQUFDLHNCQUFBUCxZQUFBUTtBQUFBQSxRQUFBUixXQzBNRTtBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQXNDO0FBQUE7QUFBQSxNQUFBUyxPQUFxQjtBQUFBLE1BQUFDLE9BQWtDO0FBQUEsTUFBQUMsYUFBbUM7QUFBQSxVQUE2QztBQUFBLEtBQVYsK0JBQXdEO0FBQUEsU0FBQVgsYUFBdUM7QUFBQSxLQUFtQjtBQUFBO0FBQUEsR0FBaUI7QUFBQSxPQUFBWSxRRDFNNVM7QUFBQSxZQUFBQyxrQkFBQTFILFFBQUFxSDtBQUFBQSxRQUFBckgsT0M4TUU7QUFBQTtBQUFBLGFBQWM7QUFBQSxLQUFWLCtCQUFrQztBQUFBO0FBQUEsTUFBQXlHLFFBQXNCO0FBQUEsVUFBaUQ7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQTtBQUFBLE9BQUFrQjtBQUFBQSxTQUEwRixzQkFBdUI7QUFBQSxXQUE2RDtBQUFBLE1BQVYsaUNBQXdGO0FBQUEsVUFBQTNILFNBQWxDO0FBQUEsTUFBZTtBQUFBO0FBQUEsY0FBQUEsU0FBb0QsaUNBQWU7QUFBQTtBQUFBLEdBQWdCO0FBQUEsWUFBQTRILG1CQUFBWixZQUFBbEY7QUFBQUEsUUFBQWtGLFdBSTlZO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBc0M7QUFBQTtBQUFBLE1BQUFhLFFBQXNCO0FBQUEsVUFBcUQ7QUFBQSxVQUFqQjtBQUFBLEtBQVYsK0JBQXlEO0FBQUEsU0FBQWIsYUFBK0I7QUFBQSxLQUFtQjtBQUFBO0FBQUEsR0FBVztBQUFBLFdEbE5sTjtBQUFBLFlBQUFjLGtCQUFBOUgsUUFBQThCO0FBQUFBLFFBQUE5QixPQ3NORTtBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQWtDO0FBQUE7QUFBQSxNQUFBeUcsUUFBc0I7QUFBQSxVQUFpRDtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBO0FBQUEsT0FBQWtCLFFBQTBGLG1CQUFvQjtBQUFBLFdBQXdEO0FBQUEsTUFBVjtBQUFBLE9BQXlHO0FBQUEsK0VBQWE7QUFBQSxVQUFBM0gsU0FBaEU7QUFBQSxNQUFlO0FBQUE7QUFBQSxjQUFBQSxTQUE4RSxpQ0FBZTtBQUFBO0FBQUEsR0FBVztBQUFBLE9BQUErSCxXRHRON1o7QUFBQSxZQUFBQyxXQUFBdkosR0MwTkUsc0NBQTJCO0FBQUEsWUFBQXdKLFVBQUF4QixPQUFBekc7QUFBQUEsSUFJM0IsNkNBQXFCO0FBQUE7QUFBQSxZQUFBa0ksU0FBQWxJLE1BSXJCLHNDQUFjO0FBQUEsWUFBQW1JLFNBQUFuSSxNQUlkLHNDQUFhO0FBQUEsWUFBQW9JLGFBQUFwSSxNQUliLHNDQUFnQjtBQUFBO0FBQUEsSUFBQXFJLGFEMU9sQjtBQUFBLElBQUFDLFdBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxzQkFBQXZJO0FBQUFBLFFBQUF3SSxJQzhPb2UsTUFBQUYsYUFBQTtBQUFBO0FBQUEsYUFBamI7QUFBQSxLQUFWO0FBQUEsY0FBa0Q7QUFBQSxNQUF1RDtBQUFBO0FBQUE7QUFBQSxNQUFBN0IsUUFBcUI7QUFBQSxVQUF5RDtBQUFBLE1BQUFnQyxLQUFoQjtBQUFBLEtBQStEO0FBQUEsVUFBQUEsT0FBYTtBQUFBO0FBQUE7QUFBQSxXQUErQjtBQUFBLE9BQUFBLE9BQWhCO0FBQUEsS0FBakg7QUFBQSxNQUEyTSxpRUFBVTtBQUFBO0FBQUEsTUFBQUg7QUFBQUEsUUFBMkI7QUFBQTtBQUFBLE1BQUFFLE1BQWI7QUFBQSxLQUFZO0FBQUE7QUFBQTtBQUFBLEdBQXFGO0FBQUEsV0Q5TzlmO0FBQUEsWUFBQUUsa0JBQUExSSxRQUFBOEI7QUFBQUEsUUFBQTlCLE9Da1BFO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBa0M7QUFBQTtBQUFBLE1BQUF5RyxRQUFzQjtBQUFBLFVBQTZEO0FBQUEsTUFBQWhHLE1BQWhCO0FBQUEsS0FBcUU7QUFBQTtBQUFBLFdBQWdEO0FBQUEsV0FBaEI7QUFBQTtBQUFBLGNBQWhCO0FBQUEsS0FBNUcsK0JBQTJMO0FBQUEsU0FBQVQsU0FBOEI7QUFBQSxLQUFlO0FBQUE7QUFBQSxHQUFXO0FBQUEsV0RsUHZVO0FBQUEsWUFBQTJJLG9CQUFBM0ksUUFBQThCO0FBQUFBLFFBQUE5QixPQ3NQRTtBQUFBO0FBQUEsYUFBYztBQUFBLEtBQVYsK0JBQWtDO0FBQUE7QUFBQSxNQUFBeUcsUUFBc0I7QUFBQSxVQUE2RDtBQUFBLE1BQUFoRyxNQUFoQjtBQUFBLEtBQXVFO0FBQUE7QUFBQSxXQUFnRDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBLEtBQTlHLCtCQUE2TDtBQUFBLFNBQUFULFNBQWdDO0FBQUEsS0FBZTtBQUFBO0FBQUEsR0FBVztBQUFBLFdEdFAzVTtBQUFBLFlBQUE0SSwyQkFBQTVJO0FBQUFBLFFBQUFBLE9DMFBFO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBa0M7QUFBQTtBQUFBLFVBQTZELElBQVosV0FBWTtBQUFBLFVBQTdCO0FBQUEsS0FBViwrQkFBNEY7QUFBQSxTQUFBQSxTQUE2QztBQUFBLEtBQWU7QUFBQTtBQUFBLEdBQUc7QUFBQTtBQUFBLElBQUFzSSxhRDFQek47QUFBQTtBQUFBO0FBQUEsWUFBQU8sK0JBQUE3STtBQUFBQSxRQUFBd0ksSUM4UHNaLE1BQUFGLFdBQUE7QUFBQTtBQUFBLGFBQW5XO0FBQUEsS0FBVjtBQUFBLGNBQWtEO0FBQUEsTUFBeUU7QUFBQTtBQUFBO0FBQUEsTUFBQTdCLFFBQXFCO0FBQUEsVUFBOEM7QUFBQSxVQUFqQjtBQUFBLEtBQVY7QUFBQSxNQUEyRztBQUFBLDhFQUFVO0FBQUE7QUFBQSxNQUFBNkI7QUFBQUEsUUFBMkI7QUFBQTtBQUFBLE1BQUFFLE1BQWI7QUFBQSxLQUFZO0FBQUE7QUFBQTtBQUFBLEdBQXFGO0FBQUEsT0FBQU0sdUJEOVBoYjtBQUFBLFlBQUFDLHNCQUFBakgsTUFBQWtIO0FBQUFBLElDc1FFLG9FQUFpRDtBQUFBO0FBQUEsWUFBQUMsYUFBQUMsS0FlakQscUJBQXFCLFNBQUc7QUFBQSxZQUFBQyx1QkFBQUM7QUFBQUEsSUFPeEI7QUFBQSxJQUFnQztBQUFBLEdBQUc7QUFBQTtBQUFBLElBQUFoSixRRDVSckM7QUFBQSxJQUFBQSxRQUFBO0FBQUEsSUFBQWlKLGNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxxQkFBQVosS0FBQWE7QUFBQUEsUUFBQUEsZ0JDZ1NFO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBaUU7QUFBQSxhQUErQjtBQUFBLEtBQVYsK0JBQW9FLHFDQUFxdUM7QUFBQSxhQUFoc0M7QUFBQSxLQUFWLCtCQUFvRSxxQ0FBc29DO0FBQUEsYUFBam1DO0FBQUEsS0FBViwrQkFBcUUscUNBQXNpQztBQUFBLGFBQWhnQztBQUFBLEtBQVYsK0JBQWlFLHNDQUF5OEI7QUFBQSxhQUF0NkI7QUFBQSxLQUFWLCtCQUFrRSxxQ0FBODJCO0FBQUEsYUFBMzBCO0FBQUEsS0FBViwrQkFBa0UscUNBQW14QjtBQUFBLGFBQWh2QjtBQUFBLEtBQVYsK0JBQW9FLHNDQUFzckI7QUFBQSxhQUFocEI7QUFBQSxLQUFWO0FBQUEsY0FBb0Y7QUFBQSxNQUFnQix1Q0FBc2pCO0FBQUE7QUFBQSxhQUE3Z0I7QUFBQSxLQUFWO0FBQUEsY0FBcUY7QUFBQSxNQUFnQix1Q0FBa2I7QUFBQTtBQUFBO0FBQUEsTUFBQXRKLE1BQTNYO0FBQUE7QUFBQSxRQUFxQztBQUFBLFdBQWdDO0FBQUE7QUFBQSxLQUE1RixpQ0FBNFg7QUFBQSxTQUFBZ0ksS0FBdk47QUFBQSxLQUFzQixnQ0FBbUI7QUFBQTtBQUFBO0FBQUEsUUFBd0c7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUFoQjtBQUFBLE1BQUFzQixrQkFBbEQ7QUFBQSxLQUFnSTtBQUFBO0FBQUEsR0FBOEI7QUFBQTtBQUFBLElBQUEzSixRRGhTcjRDO0FBQUEsSUFBQTRKLGVBQUE7QUFBQSxJQUFBNUosUUFBQTtBQUFBLElBQUE2SixVQUFBO0FBQUEsSUFBQTdKLFFBQUE7QUFBQSxJQUFBQSxRQUFBO0FBQUEsSUFBQThKLGlCQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxrQkFBQXJJLE1BQUFlO0FBQUFBO0FBQUFBLEtBQUFwQyxNQ29TRTtBQUFBLFNBQWtEO0FBQUEsSUFBOUMsaUNBQSs4RDtBQUFBLFFBQUEySixPQUF2MUQ7QUFBQSxJQUE2QyxvQ0FBK3hEO0FBQUE7QUFBQSxLQUFBQyxhQUF2dkQ7QUFBQSxLQUFBQyxZQUF3RDtBQUFBLElBQTZEO0FBQUE7QUFBQSxVQUF1dUI7QUFBQTtBQUFBLFFBQXpFO0FBQUE7QUFBQTtBQUFBLG9CQUFBQyxHQUFBQyxPQUFBRCxNQUFzRCxRQUFJLGdDQUFhO0FBQUE7QUFBQSxVQUF6RjtBQUFBLEtBQS9tQjtBQUFBO0FBQUEsZ0JBQUFqRDtBQUFBQTtBQUFBQSxTQUFBbUQsTUFBMEM7QUFBQSxTQUFBQyxRQUE4QjtBQUFBLFNBQUFDLFNBQTRDO0FBQUEsU0FBQUMsU0FBZ0M7QUFBQSxhQUFvRTtBQUFBLGFBQXRCO0FBQUEsUUFBVjtBQUFBO0FBQUEsVUFBQTFCLE1BQWlFO0FBQUEsY0FBMkQ7QUFBQSxjQUFYO0FBQUEsU0FBdEI7QUFBQTtBQUFBLGVBQStSO0FBQUE7QUFBQSxhQUF6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBMUg7QUFBQSxlQUF0QjtBQUFBLFVBQTJOO0FBQUE7QUFBQTtBQUFBLFFBQTdXO0FBQUEsT0FBc1k7QUFBQTtBQUFBO0FBQUEsSUFBMkw7QUFBQTtBQUFBLE1BQUFtQixlQUFnRztBQUFBLFVBQWxDO0FBQUEsVUFBZDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLElBQTNELGlDQUE0MUI7QUFBQTtBQUFBLEtBQUFBLGVBQTFEO0FBQUEsU0FBbEM7QUFBQSxTQUExQjtBQUFBLFNBQVo7QUFBQTtBQUFBLE9BQXpFO0FBQUE7QUFBQTtBQUFBLG1CQUFBRSxHQUFBakwsT0FBQWlMLE1BQXNELFFBQUksZ0NBQWE7QUFBQTtBQUFBLFNBQXpGO0FBQUEsSUFBamM7QUFBQTtBQUFBLGVBQUFqRDtBQUFBQTtBQUFBQSxRQUFBbUQsTUFBMEM7QUFBQSxRQUFBdkIsTUFBNkI7QUFBQSxZQUFvRTtBQUFBLFlBQVg7QUFBQSxPQUF0QixpQ0FBK1U7QUFBQTtBQUFBLFlBQTFDO0FBQUE7QUFBQSxVQUF6QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBN0g7QUFBQSxZQUF0QjtBQUFBLE9BQThOO0FBQUEsTUFBYztBQUFBO0FBQUEsSUFBbU47QUFBQSxHQUF1QztBQUFBO0FBQUEsSUFBQTJCLGVEcFN6OUQ7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsWUFBQXZNLEdBQUFvRSxNQUFBb0k7QUFBQUE7QUFBQUEsS0FBQUMsU0N3U2dCO0FBQUEsU0FBOEM7QUFBQSxLQUFBbEosUUFBWDtBQUFBLFNBQWdHO0FBQUEsU0FBZDtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBbVE7QUFBQSxVQUF4QztBQUFBLE1BQUF5RyxLQUE5RjtBQUFBLE1BQUFBLE9BQXdCO0FBQUEsVUFBNUM7QUFBQSxVQUF0QjtBQUFBLEtBQWdNO0FBQUE7QUFBQTtBQUFBLFNBQW1KO0FBQUEsU0FBWjtBQUFBLElBQTVHO0FBQUE7QUFBQSxlQUFBbkI7QUFBQUE7QUFBQUEsUUFBQSxJQUE2RTtBQUFBLFlBQWhCO0FBQUEsWUFBZDtBQUFBLE9BQWpCO0FBQUEsT0FBNEU7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUF5TDtBQUFBLFNBQTVCO0FBQUEsU0FBWjtBQUFBLElBQXBFO0FBQUE7QUFBQSxlQUFBa0Q7QUFBQUEsV0FBQSxJQUE0QztBQUFBLE9BQWpCO0FBQUEsT0FBdUM7QUFBQTtBQUFBO0FBQUEsWUFBZ0Y7QUFBQSxJQUFtQix3Q0FBYTtBQUFBO0FBQUEsT0FBQVcsZUR4U2p3QjtBQUFBLFlBQUFDLGVBQUFDLE1BQUEzSSxVQUFBM0M7QUFBQUE7QUFBQUEsS0FBQXVMLFNDNFNnQjtBQUFBLEtBQUFDLFNBQXNEO0FBQUEsS0FBQUMsV0FBbUM7QUFBQSxTQUF3RDtBQUFBLEtBQUF4SixRQUFYO0FBQUEsU0FBMk47QUFBQSxTQUFaO0FBQUEsSUFBMUk7QUFBQTtBQUFBLGVBQUF3STtBQUFBQTtBQUFBQSxRQUFBL0IsS0FBd0U7QUFBQSxRQUFBQSxPQUE4QjtBQUFBLFlBQTFEO0FBQUEsT0FBakI7QUFBQSxPQUE2RztBQUFBO0FBQUE7QUFBQSxZQUFtRjtBQUFBLElBQVY7QUFBQSxhQUFpRTtBQUFBLEtBQWhCO0FBQUE7QUFBQSxZQUF1RjtBQUFBLElBQXlCLHdDQUFZO0FBQUE7QUFBQTtBQUFBLElBQUFnRCxZRDVTemxCO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsbUJBQUFuSixVQUFBM0M7QUFBQUE7QUFBQUEsS0FBQXdMLFNDZ1RzQjtBQUFBLFNBQXVtQztBQUFBLEtBQUE3RSxJQUEzSjtBQUFBLFNBQXVDO0FBQUEsSUFBbkI7QUFBQSxZQUFnRjtBQUFBLElBQW5CO0FBQUEsUUFBQThFLFdBQXRnQztBQUFBLElBQTJFO0FBQUE7QUFBQSxlQUFBaEwsT0FBQXNMO0FBQUFBO0FBQUFBLFFBQUFyQixNQUE4QztBQUFBLFFBQUFzQixPQUEyQztBQUFBLE9BQXVDO0FBQUE7QUFBQTtBQUFBLFdBQThGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBdUIsNkNBQXltQjtBQUFBO0FBQUE7QUFBQSxZQUF0akI7QUFBQSxRQUFBdEwsTUFBaEI7QUFBQSxPQUFnRTtBQUFBO0FBQUEsYUFBeUU7QUFBQSxhQUF6QjtBQUFBLGFBQWhCO0FBQUE7QUFBQSxnQkFBaEI7QUFBQSxPQUF2RztBQUFBO0FBQUEsYUFBZ1M7QUFBQTtBQUFBLFdBQXpDLFdBQVksVUFBWTtBQUFBLGFBQTdDO0FBQUEsUUFBdkI7QUFBQTtBQUFBO0FBQUEsV0FBc007QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUF1Qiw2Q0FBcUw7QUFBQTtBQUFBLGVBQXZILFdBQVk7QUFBQSxPQUFsQztBQUFBO0FBQUE7QUFBQSxVQUFnSDtBQUFBO0FBQUE7QUFBQSxPQUF1Qiw2Q0FBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQWtNO0FBQUEsR0FBNEI7QUFBQSxZRGhUcHJDO0FBQUEsWUFBQXVMLGNBQUFDO0FBQUFBLFFBQUEsSUNvVCtMO0FBQUEsSUFBdkw7QUFBQTtBQUFBO0FBQUEsdUJBQUFDO0FBQUFBO0FBQUFBLGdCQUFBLElBQStEO0FBQUEsZ0JBQUF6TCxNQUFoQjtBQUFBLGVBQTJEO0FBQUE7QUFBQSxxQkFBZ0Q7QUFBQSxxQkFBaEI7QUFBQTtBQUFBLHdCQUFoQjtBQUFBLGdEQUEyRDtBQUFBO0FBQUEsaUJBQXVCO0FBQUEsR0FBQztBQUFBO0FBQUEsSUFBQTBMLFdEcFRyTjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxlQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDd1R5QztBQUFBLEtBQUE1TCxNQUFoQjtBQUFBLElBQWlFO0FBQUE7QUFBQSxVQUFnRDtBQUFBLE1BQUFnSSxLQUFoQjtBQUFBO0FBQUEsU0FBQUEsS0FBaEI7QUFBQSxJQUFnRixnQ0FBbUI7QUFBQTtBQUFBLFNBQXFDO0FBQUEsS0FBQWhJLFFBQWhCO0FBQUEsSUFBZ0UscUNBQXNCO0FBQUE7QUFBQSxTQUFxQztBQUFBLEtBQUFnSSxPQUFoQjtBQUFBLElBQThELGtDQUFtQjtBQUFBLFlBQXlCO0FBQUEsSUFBb0IsdUNBQXVCO0FBQUE7QUFBQTtBQUFBLElBQUFySSxRRHhUbGU7QUFBQSxJQUFBQSxRQUFBO0FBQUEsSUFBQWtNLFlBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsYUFBQTFKLE1BQUE5QztBQUFBQTtBQUFBQSxLQUFBLElDNFRnQztBQUFBLEtBQUF5TSxZQUFiO0FBQUEsS0FBQUMsV0FBaUQ7QUFBQSxLQUFBMUssT0FBMEM7QUFBQSxTQUFpTDtBQUFBLFNBQVQ7QUFBQSxLQUFBdEIsTUFBaEI7QUFBQSxJQUE0RTtBQUFBO0FBQUEsVUFBcUQ7QUFBQSxVQUFMO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsUUFBQXlLLFNBQXhNLFNBQUF3QixRQUFnQztBQUFBLElBQXFEO0FBQUEsYUFBMGY7QUFBQSxLQUFwVDtBQUFBO0FBQUEsZ0JBQUFDO0FBQUFBO0FBQUFBLFNBQUEsSUFBMkg7QUFBQSxhQUFUO0FBQUEsYUFBakI7QUFBQSxRQUFWO0FBQUE7QUFBQSxjQUFpRztBQUFBLGNBQWI7QUFBQTtBQUFBLGlCQUF1QztBQUFBLFFBQW5KO0FBQUEsZ0JBQTZNO0FBQUEsUUFBbkI7QUFBQSxRQUFtRDtBQUFBLE9BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBQTJrQjtBQUFBLFVBQWhCO0FBQUEsVUFBbEM7QUFBQSxVQUFaO0FBQUEsS0FBMWU7QUFBQTtBQUFBLGdCQUFBQyxLQUFBQztBQUFBQTtBQUFBQSxTQUFBLElBQWdKO0FBQUEsYUFBakI7QUFBQSxhQUFUO0FBQUEsYUFBakI7QUFBQSxRQUFWO0FBQUE7QUFBQSxjQUE0SjtBQUFBLGNBQWpCO0FBQUEsY0FBYjtBQUFBO0FBQUE7QUFBQSxjQUFpRztBQUFBLGNBQWhCO0FBQUEsUUFBdk87QUFBQTtBQUFBLGFBQThXO0FBQUEsYUFBbkI7QUFBQSxhQUFoQjtBQUFBLFFBQW5CO0FBQUEsUUFBb0c7QUFBQSxPQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUE4SjtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLFNBQUFDLFlBQThEO0FBQUE7QUFBQTtBQUFBLFVBQTBCO0FBQUEsTUFBQUEsWUFBTjtBQUFBO0FBQUEsS0FBQUMsVUFBbUU7QUFBQSxTQUF3RjtBQUFBLElBQTFCO0FBQUE7QUFBQSxTQUErRztBQUFBLFNBQTNCO0FBQUEsSUFBWDtBQUFBO0FBQUEsU0FBNko7QUFBQSxLQUFBQztBQUFBQSxPQUExRDtBQUFBO0FBQUEseUJBQUFDLEdBQWdDLE9BQXVCLFdBQXZCLGtCQUF3QjtBQUFBLElBQXVDLE9BQXlDLFdBQXpDLHFDQUFnRDtBQUFBO0FBQUE7QUFBQSxJQUFBQyxTRDVULzNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsVUFBQXRLLE1BQUE5QztBQUFBQTtBQUFBQSxLQUFBcU4sY0NnVXFCO0FBQUEsS0FBQTVMLGFBQW1DO0FBQUEsU0FBMkQ7QUFBQSxTQUFqQjtBQUFBLElBQVY7QUFBQSxTQUFBTyxPQUFvRTtBQUFBO0FBQUE7QUFBQSxVQUFnQztBQUFBLE1BQUFBLE9BQU47QUFBQTtBQUFBLFNBQXVwQjtBQUFBLEtBQUFzTDtBQUFBQSxPQUFwa0I7QUFBQTtBQUFBO0FBQUEsbUJBQUE3QztBQUFBQTtBQUFBQSxZQUFBLElBQW1EO0FBQUEsZ0JBQWpCO0FBQUEsV0FBViwrQkFBb0UsaUNBQXNlO0FBQUE7QUFBQSxnQkFBcGE7QUFBQSxZQUFBL0osTUFBaEI7QUFBQSxXQUEyRDtBQUFBO0FBQUEsaUJBQTREO0FBQUEsYUFBQUEsUUFBaEI7QUFBQSxZQUFvRDtBQUFBO0FBQUEsa0JBQXFFO0FBQUEsa0JBQVQ7QUFBQSxjQUFBQSxRQUFoQjtBQUFBLGFBQXFGO0FBQUE7QUFBQSxtQkFBOEQ7QUFBQSxtQkFBZDtBQUFBLG1CQUFoQjtBQUFBO0FBQUEsc0JBQWhCO0FBQUE7QUFBQTtBQUFBLHFCQUFqSTtBQUFBO0FBQUE7QUFBQSxvQkFBaEc7QUFBQSxXQUFsRyxpQ0FBd2M7QUFBQSxtQkFBcEI7QUFBQSxXQUFhLGlDQUFVO0FBQUE7QUFBQTtBQUFBLElBQWdDLHNEQUF5QztBQUFBO0FBQUE7QUFBQSxJQUFBNk0sbUJEaFVwNUI7QUFBQSxJQUFBQyx5QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQXJOLFFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXNOLFdBQUE3SyxNQUFBOUM7QUFBQUE7QUFBQUEsS0FBQTROLFdDb1VrQjtBQUFBLEtBQUFDLGFBQW1DO0FBQUEsS0FBQTdMLE9BQTBDO0FBQUEsU0FBK0M7QUFBQSxLQUFBOEwsWUFBZDtBQUFBLEtBQUF2QyxTQUF5RTtBQUFBLEtBQUFKLFNBQWlEO0FBQUEsS0FBQTRDLGVBQXVDO0FBQUEsS0FBQUMsY0FBbUQ7QUFBQSxLQUFBQyxXQUFnRDtBQUFBLEtBQUEzQztBQUFBQSxPQUE4RTtBQUFBO0FBQUEsS0FBQTRDLFVBQThGO0FBQUEsU0FBd0g7QUFBQSxLQUFBeE4sTUFBWDtBQUFBLElBQWlEO0FBQUEsYUFBZ0U7QUFBQSxLQUFWO0FBQUE7QUFBQTtBQUFBLFNBQWlMO0FBQUEsU0FBWDtBQUFBLElBQXRCO0FBQUE7QUFBQSxVQUFpSDtBQUFBLFVBQWpCO0FBQUEsS0FBVjtBQUFBO0FBQUEsV0FBeU47QUFBQSxPQUFBMkI7QUFBQUEsU0FBcUI7QUFBQSxVQUFoSztBQUFBO0FBQUEscUJBQUE2SztBQUFBQTtBQUFBQSxjQUFBLElBQW1EO0FBQUEsa0JBQWpCO0FBQUEsYUFBVjtBQUFBLHVCQUFvRTtBQUFBLDJCQUErQixvQ0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBQTdLO0FBQUFBLFNBQStELFlBQWxCO0FBQUE7QUFBQSxVQUEwRDtBQUFBLE1BQUE4TDtBQUFBQSxRQUFWO0FBQUEsV0FBbUU7QUFBQSxlQUE2RDtBQUFBLFVBQXFFO0FBQUEsS0FBNUI7QUFBQSxhQUFvRjtBQUFBLEtBQWQ7QUFBQTtBQUFBLFlBQTBIO0FBQUEsSUFBVjtBQUFBLGFBQTBGO0FBQUEsS0FBN0I7QUFBQTtBQUFBO0FBQUEsU0FBd0k7QUFBQSxTQUFkO0FBQUEsSUFBZjtBQUFBLElBQWlFO0FBQUEsR0FBVTtBQUFBO0FBQUEsU0RwVWgzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGNBQUF0TCxNQUFBdUwsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQSxJQ3dVOEI7QUFBQSxLQUFBQyxNQUFoQjtBQUFBLEtBQUFDLFNBQWdEO0FBQUEsU0FBK2xCO0FBQUEsU0FBWjtBQUFBLElBQWppQjtBQUFBO0FBQUEsZUFBQWhFO0FBQUFBO0FBQUFBLFFBQUEsSUFBZ0Y7QUFBQSxZQUFUO0FBQUEsUUFBQTlKLE1BQWhCO0FBQUEsUUFBQUwsUUR4VXZLO0FBQUEsT0N3VW9QO0FBQUE7QUFBQSxhQUEwRTtBQUFBLGFBQWQ7QUFBQSxTQUFBSyxRQUFoQjtBQUFBLFFBQW1FO0FBQUE7QUFBQSxjQUFnRDtBQUFBLGNBQWhCO0FBQUE7QUFBQSxpQkFBaEI7QUFBQTtBQUFBO0FBQUEsZ0JBQS9HO0FBQUEsT0FBcEg7QUFBQTtBQUFBLGFBQTZVO0FBQUEsU0FBQXlJLE1BQVo7QUFBQSxhQUErRjtBQUFBLGFBQWpCO0FBQUEsYUFBViw2QkFBd0U7QUFBQSxRQUFOO0FBQUE7QUFBQSxPQUF4SjtBQUFBLE1BQWdOO0FBQUE7QUFBQSxJQUFnRjtBQUFBLEdBQVU7QUFBQTtBQUFBLElBQUFzRixXRHhVenVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxrQkFBQXJCO0FBQUFBO0FBQUFBLEtBQUFXLGNDNFUyRDtBQUFBLFNBQTRvRDtBQUFBLEtBQUE3QyxTQUFyc0Q7QUFBQSxLQUFBNEMsZUFBZ0Y7QUFBQSxLQUFBWSxTQUF5QztBQUFBLElBQXNEO0FBQUE7QUFBQSxlQUFBbEU7QUFBQUE7QUFBQUEsUUFBQSxJQUF1RTtBQUFBLFFBQUEvSixNQUFoQjtBQUFBLE9BQTJEO0FBQUE7QUFBQSxhQUE0RDtBQUFBLFNBQUFBLFFBQWhCO0FBQUEsUUFBb0Q7QUFBQTtBQUFBLGNBQXFFO0FBQUEsY0FBVDtBQUFBLFVBQUFBLFFBQWhCO0FBQUEsU0FBdUU7QUFBQTtBQUFBLGVBQXFFO0FBQUEsZUFBVDtBQUFBLFdBQUFBLFFBQWhCO0FBQUEsVUFBcUY7QUFBQTtBQUFBLGdCQUE4RDtBQUFBLGdCQUFkO0FBQUEsZ0JBQWhCO0FBQUE7QUFBQSxtQkFBaEI7QUFBQTtBQUFBO0FBQUEsa0JBQWpJO0FBQUE7QUFBQTtBQUFBLGlCQUFuSDtBQUFBO0FBQUE7QUFBQSxnQkFBaEc7QUFBQSxPQUFsRztBQUFBO0FBQUEsYUFBb2pCO0FBQUEsU0FBQXFCLE9BQWI7QUFBQSxTQUFBNk0sUUFBMkM7QUFBQSxhQUEyRTtBQUFBLGFBQWpCO0FBQUEsU0FBQUM7QUFBQUEsV0FBViw2QkFBd0U7QUFBQSxhQUErRDtBQUFBLFFBQXRCO0FBQUEsU0FBdUY7QUFBQSxTQUFtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBMkY7QUFBQSxhQUFqQjtBQUFBLFFBQVY7QUFBQTtBQUFBLFVBQUE5TSxTQUFnRjtBQUFBLGNBQW1DO0FBQUEsU0FBVjtBQUFBLFVBQXlEO0FBQUE7QUFBQSxrQkFBZ0Q7QUFBQSxVQUFWO0FBQUEsV0FBMEQ7QUFBQTtBQUFBLG1CQUFzRDtBQUFBLFdBQVY7QUFBQSxZQUE4RDtBQUFBLHFCQUE0QztBQUFBLFlBQTRDO0FBQUEsYUFBb0M7QUFBQTtBQUFBLGFBQStDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUEvNkI7QUFBQSxNQUErOUI7QUFBQTtBQUFBLElBQXFDO0FBQUEsR0FBOEM7QUFBQTtBQUFBLFNENVV4eEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUErTSxhQUFBaE0sTUFBQTlDO0FBQUFBO0FBQUFBLEtBQUE0TixXQ2dWa0I7QUFBQSxLQUFBQyxhQUFtQztBQUFBLEtBQUFwTSxhQUFnRDtBQUFBLFNBQXNGO0FBQUEsU0FBakI7QUFBQSxJQUFWO0FBQUEsU0FBQU8sT0FBb0U7QUFBQTtBQUFBO0FBQUEsVUFBZ0M7QUFBQSxNQUFBQSxPQUFOO0FBQUE7QUFBQSxTQUF5RjtBQUFBLEtBQUE4TCxZQUFkO0FBQUEsS0FBQXZDLFNBQXlFO0FBQUEsS0FBQUosU0FBaUQ7QUFBQSxLQUFBNEMsZUFBdUM7QUFBQSxLQUFBZ0I7QUFBQUEsT0FBK0M7QUFBQSxTQUFrRztBQUFBLElBQVY7QUFBQSxhQUE0RjtBQUFBLEtBQS9CO0FBQUE7QUFBQTtBQUFBLFNBQTBJO0FBQUEsU0FBZDtBQUFBLElBQWY7QUFBQSxJQUFtRTtBQUFBLEdBQVU7QUFBQSxZRGhWeDJCO0FBQUEsWUFBQUMsWUFBQWxNLE1BQUE5QztBQUFBQTtBQUFBQSxLQUFBNE4sV0NvVmtCO0FBQUEsS0FBQUMsYUFBbUM7QUFBQSxLQUFBN0wsT0FBMEM7QUFBQSxLQUFBdUosU0FBNEM7QUFBQSxLQUFBSixTQUFrRDtBQUFBLEtBQUE4RCxhQUFxQztBQUFBLFNBQTJGO0FBQUEsS0FBQUMsTUFBL0M7QUFBQSxTQUE0SDtBQUFBLFNBQWQ7QUFBQSxJQUFmO0FBQUEsSUFBZ0U7QUFBQSxHQUFNO0FBQUE7QUFBQSxJQUFBQyxjRHBWbmI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxtQkFBQS9CO0FBQUFBO0FBQUFBLEtBQUEsSUN3VjYwQjtBQUFBLEtBQUExRyxJQUFqRztBQUFBLFNBQXVDO0FBQUEsSUFBbkI7QUFBQSxRQUFBd0UsU0FBOXZCLFNBQUE4RCxhQUFpQztBQUFBLElBQStDO0FBQUE7QUFBQSxlQUFBeE8sT0FBQWdLO0FBQUFBO0FBQUFBLFFBQUEsSUFBNEU7QUFBQSxRQUFBL0osTUFBaEI7QUFBQSxPQUE2RDtBQUFBO0FBQUEsYUFBZ0Q7QUFBQSxhQUFoQjtBQUFBO0FBQUEsZ0JBQWhCO0FBQUEsT0FBcEc7QUFBQSxRQUFpTCwwREFBd2I7QUFBQSxlQUF4VztBQUFBLE9BQVY7QUFBQTtBQUFBLGFBQW9IO0FBQUEsYUFBakI7QUFBQSxhQUFWLDZCQUFvRTtBQUFBLFFBQU47QUFBQSxRQUEwQztBQUFBO0FBQUE7QUFBQSxZQUE0RjtBQUFBLFlBQWpCO0FBQUEsWUFBViw2QkFBb0U7QUFBQSxPQUE1RjtBQUFBLE9BQWdJO0FBQUEsTUFBUTtBQUFBO0FBQUE7QUFBQSxJQUEySTtBQUFBLEdBQStCO0FBQUE7QUFBQSxJQUFBMk8sYUR4VjE0QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFVBQUFDLFVBQUF2UDtBQUFBQTtBQUFBQSxLQUFBLElDNFZ3RDtBQUFBLFNBQWpCO0FBQUEsU0FBWDtBQUFBLElBQXRCLCtCQUFvRztBQUFBLFlBQTRCO0FBQUEsSUFBViwrQkFBc0M7QUFBQTtBQUFBLEtBQUF3UCxPQUEyQjtBQUFBLFNBQWlFO0FBQUEsS0FBQTlPLE1BQWhCO0FBQUEsSUFBZ0U7QUFBQTtBQUFBLFVBQWdEO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBdkc7QUFBQSxLQUFpTixPQUF5QztBQUFBLGNBQXJELFVBQVksOENBQTQ1QjtBQUFBLFlBQTFCO0FBQUEsSUFBcUI7QUFBQTtBQUFBLHNCQUFBOE4sUUFBQWlCO0FBQUFBO0FBQUFBLGVBQUEsSUFBdnhCO0FBQUEsZUFBQS9PLE1BQWhCO0FBQUEsY0FBOEQ7QUFBQTtBQUFBLG9CQUE0RDtBQUFBLGdCQUFBQSxRQUFoQjtBQUFBLGVBQXVEO0FBQUE7QUFBQSxxQkFBcUU7QUFBQSxxQkFBVDtBQUFBLGlCQUFBQSxRQUFoQjtBQUFBLGdCQUEwRTtBQUFBO0FBQUEsc0JBQTZEO0FBQUEsc0JBQWI7QUFBQSxzQkFBaEI7QUFBQTtBQUFBLHlCQUFoQjtBQUFBO0FBQUE7QUFBQSx3QkFBdEg7QUFBQTtBQUFBO0FBQUEsdUJBQW5HO0FBQUEsY0FBckc7QUFBQSx1QkFBZ3dCO0FBQUEsZUFBd0IsOENBQUs7QUFBQTtBQUFBO0FBQUEsZUFBQWdQO0FBQUFBLGlCQUEzVztBQUFBLG1CQUFZLFVBQVk7QUFBQSxtQkFBeUU7QUFBQSxtQkFBakI7QUFBQSxjQUFWO0FBQUEsZUFBd0U7QUFBQSx1RUFBNk47QUFBQSxzQkFBbEs7QUFBQSxjQUFWO0FBQUE7QUFBQSx3QkFBaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxtRUFBMkg7QUFBQTtBQUFBO0FBQUEsZUFBc0M7QUFBQTtBQUFBO0FBQUEsSUFBQUMsVUQ1VnAwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFVBQUE5TSxNQUFBOUM7QUFBQUE7QUFBQUEsS0FBQTBNLFdDZ1drQjtBQUFBLEtBQUExSyxPQUE2QjtBQUFBLEtBQUFDLFFBQTZCO0FBQUEsU0FBOEo7QUFBQSxTQUFUO0FBQUEsS0FBQXZCLE1BQWhCO0FBQUEsSUFBNEU7QUFBQTtBQUFBLFVBQXFEO0FBQUEsVUFBTDtBQUFBLFVBQWhCO0FBQUE7QUFBQSxhQUFoQjtBQUFBLFFBQUFtUCxRQUEzTSxTQUFBQyxZQUErQjtBQUFBLElBQXlEO0FBQUEsYUFBd2xCO0FBQUEsS0FBbFo7QUFBQTtBQUFBLGdCQUFBbEQ7QUFBQUE7QUFBQUEsU0FBQSxJQUF1RjtBQUFBLGFBQVQ7QUFBQSxhQUFqQjtBQUFBLFFBQVY7QUFBQTtBQUFBLGNBQWlHO0FBQUEsVUFBQW1ELFFBQWI7QUFBQTtBQUFBLGFBQUFBLFFBQXVDO0FBQUEsUUFBa0Q7QUFBQSxnQkFBMEY7QUFBQSxRQUF2QjtBQUFBLGdCQUFnRjtBQUFBLFFBQWhCO0FBQUEsUUFBeUM7QUFBQSxPQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUFvc0I7QUFBQSxVQUFoQjtBQUFBLFVBQWxDO0FBQUEsVUFBWjtBQUFBLEtBQW5tQjtBQUFBO0FBQUEsZ0JBQUFsRCxLQUFBQztBQUFBQTtBQUFBQSxTQUFBLElBQTRHO0FBQUEsYUFBakI7QUFBQSxhQUFUO0FBQUEsYUFBakI7QUFBQSxRQUFWO0FBQUE7QUFBQSxjQUE0SjtBQUFBLGNBQWpCO0FBQUEsVUFBQWlELFFBQWI7QUFBQTtBQUFBO0FBQUEsY0FBaUc7QUFBQSxVQUFBQSxRQUFoQjtBQUFBO0FBQUEsYUFBa0g7QUFBQSxhQUFuQjtBQUFBLFNBQUFDLFdBQWhCO0FBQUEsUUFBK0c7QUFBQSxRQUFtRTtBQUFBLGdCQUEwRDtBQUFBLFFBQW9CLDhDQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQWdOO0FBQUEsS0FBQUM7QUFBQUEsT0FBNUQ7QUFBQTtBQUFBLHlCQUFBL0MsR0FBZ0MsT0FBeUIsV0FBekIsb0JBQTBCO0FBQUEsU0FBMEs7QUFBQSxTQUFaO0FBQUEsSUFBNUc7QUFBQTtBQUFBLGVBQUEzRjtBQUFBQTtBQUFBQSxRQUFBLElBQTZFO0FBQUEsWUFBaEI7QUFBQSxZQUFkO0FBQUEsT0FBakI7QUFBQSxPQUE0RTtBQUFBO0FBQUE7QUFBQSxZQUFtUjtBQUFBLElBQXROO0FBQUE7QUFBQSxlQUFBNEI7QUFBQUEsV0FBQSxJQUE2QztBQUFBLE9BQVY7QUFBQSxnQkFBNkk7QUFBQSxRQUF4RztBQUFBO0FBQUEsbUJBQUErRztBQUFBQTtBQUFBQSxZQUFBLElBQStFO0FBQUEsZ0JBQWpCO0FBQUEsZ0JBQXhCO0FBQUEsV0FBWDtBQUFBLFdBQTJFO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBN0c7QUFBQSxNQUFtSjtBQUFBO0FBQUE7QUFBQSxTQUFnTTtBQUFBLFNBQWxCO0FBQUEsU0FBeEM7QUFBQSxTQUFaO0FBQUEsSUFBckU7QUFBQSxxQkFBQWhELEdBQTJCLFdBQWEsc0JBQTJCO0FBQUEsWUFBZ0g7QUFBQSxJQUFlLHdDQUFhO0FBQUE7QUFBQSxZQUFBaUQsZUFBQXJOLE1BQUE5QyxLQUFBQztBQUFBQSxRQUFBbVEsTUFJbHdFLDBCQUFpRTtBQUFBLElBQXJCLE9BQW9CLGVBQXBCLHNDQUFpRDtBQUFBO0FBQUEsWURwVzFHO0FBQUEsWUFBQUMsZ0JBQUF2TixNQUFBOUM7QUFBQUE7QUFBQUEsS0FBQXNRLFNDd1dnQixXQUFZLFVBQVk7QUFBQSxLQUFBdE8sT0FBd0MsV0FBWSxVQUFZO0FBQUEsS0FBQXVPLFFBQXNELFdBQVksVUFBWTtBQUFBLElBQTBDLDJEQUFrRDtBQUFBO0FBQUE7QUFBQSxJQUFBbFEsUUR4V2xSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQW1RLFNBQUExTixNQUFBOUM7QUFBQUE7QUFBQUEsS0FBQStCLE9DNFdjLFdBQVksVUFBWTtBQUFBLEtBQUEwTyxPQUF3QztBQUFBLFNBQWdLO0FBQUEsS0FBQS9QLE1BQWpCO0FBQUEsSUFBd0Q7QUFBQTtBQUFBLFVBQXFFO0FBQUEsVUFBVDtBQUFBLE1BQUFBLFFBQWhCO0FBQUEsS0FBMkU7QUFBQTtBQUFBLFdBQThEO0FBQUEsV0FBZDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUF2SDtBQUFBLElBQS9GO0FBQUE7QUFBQSxVQUE2VSxXQUFZLFVBQVk7QUFBQSxNQUFBZSxhQUFnRTtBQUFBLE1BQUEwSCxNQUEwQztBQUFBO0FBQUEsU0FBQTFILGFBQW5LLE1BQUEwSCxNQUFBO0FBQUEsSUFBOE47QUFBQSxZQUFxSyxzQ0FBQXFGLFNBQXBJO0FBQUEsSUFBK0M7QUFBQTtBQUFBLGVBQUF0QixHQUFvRCxZQUFaLFdBQVksb0JBQTBCLFNBQUs7QUFBQTtBQUFBLElBQXNEO0FBQUEsSUFBd0I7QUFBQSxHQUFjO0FBQUEsWUQ1Vy84QjtBQUFBLFlBQUF3RCxXQUFBNU4sTUFBQTlDO0FBQUFBO0FBQUFBLEtBQUErQixPQ2dYYyxXQUFZLFVBQVk7QUFBQSxLQUFBb0gsTUFBd0MsV0FBWSxVQUFZO0FBQUEsS0FBQTFILGFBQTJEO0FBQUEsSUFBd0Y7QUFBQSxZQUF3SSxzQ0FBQStNLFNBQXBMO0FBQUEsSUFBK0Y7QUFBQTtBQUFBLGVBQUF0QixHQUFvRCxZQUFaLFdBQVksb0JBQTBCLFNBQUs7QUFBQTtBQUFBLElBQXFEO0FBQUEsSUFBd0I7QUFBQSxHQUFZO0FBQUEsWURoWHhkO0FBQUEsWUFBQXlELGFBQUF6QixLQUFBdk0sVUFBQTNDO0FBQUFBO0FBQUFBLEtBQUEsSUNvWDBCO0FBQUEsS0FBQWlDLFFBQVg7QUFBQSxTQUFxWTtBQUFBLFNBQVo7QUFBQTtBQUFBLE9BQXpFO0FBQUE7QUFBQTtBQUFBLG1CQUFBdUksR0FBQUMsT0FBQUQsTUFBc0QsUUFBSSxnQ0FBYTtBQUFBO0FBQUEsU0FBekY7QUFBQSxJQUE5TjtBQUFBO0FBQUEsZUFBQWpEO0FBQUFBO0FBQUFBLFFBQUEsSUFBeUk7QUFBQSxZQUE3QjtBQUFBLFlBQWpCO0FBQUEsT0FBVjtBQUFBO0FBQUEsYUFBaUc7QUFBQSxhQUFoQjtBQUFBO0FBQUEsZ0JBQW9EO0FBQUE7QUFBQSxZQUF6SjtBQUFBLFlBQWQ7QUFBQSxPQUFqQjtBQUFBLE9BQThMO0FBQUE7QUFBQTtBQUFBLFlBQTRLO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBcUk7QUFBQSxVQUFMO0FBQUEsVUFBOUI7QUFBQSxVQUExQjtBQUFBLFVBQWQ7QUFBQSxLQUFoQjtBQUFBO0FBQUEsSUFBNEosT0FBOEIsV0FBMUMsVUFBWSxxQ0FBa0M7QUFBQTtBQUFBLE9BQUFxSixrQkRwWHJyQjtBQUFBLFlBQUFDLFFBQUFwUTtBQUFBQSxRQUFBRyxJQ3dYRTtBQUFBLElBQ0E7QUFBQTtBQUFBLGNBQ3VCO0FBQUEsTUFBWCx1Q0FHVjtBQUFBLE1BRk87QUFBQTtBQUFBO0FBQUEsVUFBQWtRO0FBQUFBLFNBQUFBLE1EM1hYO0FBQUE7QUFBQSxTQUFBQyxNQUFBO0FBQUEsS0MrWEksNkJBQXFEO0FBQUEsS0FDckQ7QUFBQTtBQUFBLEdBQXVCO0FBQUEsWURoWTNCO0FBQUEsWUFBQUMsU0FBQXZRO0FBQUFBLFFBQUEsSUNvWWlDLCtCQUFqQjtBQUFBLElBQVY7QUFBQSxjQUF3RTtBQUFBLGNBQXlCLG9CQUF3QjtBQUFBO0FBQUE7QUFBQSxTRHBZL0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUF3USxVQUFBeFE7QUFBQUE7QUFBQUEsS0FBQXlRLE9Dd1ljO0FBQUEsS0FBQWxSLE1BQW1DO0FBQUEsS0FBQUMsT0FBZ0M7QUFBQSxLQUFBbUQsWUFBd0M7QUFBQSxJQUF3Qiw4QkFBb0Msc0NBQXM5RDtBQUFBLElBQXg2RCw4QkFBb0Msc0NBQW80RDtBQUFBLElBQXQxRCw4QkFBcUMsc0NBQWl6RDtBQUFBLElBQW53RCw4QkFBaUMsbUNBQWt1RDtBQUFBLElBQXJyRDtBQUFBLEtBQTR6QjtBQUFBLE1BQXFELE9BQXVCLGVBQXZCLHlDQUFvMEI7QUFBQSxLQUFyeEI7QUFBQTtBQUFBLE9BQUErTixLQUE0QztBQUFBLFdBQTJDO0FBQUEsTUFBVjtBQUFBLE9BQXVELE9BQWtCO0FBQUEsb0JBQWxCLCtDQUFpcEI7QUFBQTtBQUFBLE9BQUFDLFlBQXhsQjtBQUFBLFdBQWdOO0FBQUEsV0FBWjtBQUFBLE9BQUFDLG9CQUFwTDtBQUFBLE1BQThEO0FBQUE7QUFBQSxpQkFBQTVJO0FBQUFBLGFBQUEsSUFBMkY7QUFBQSxTQUF6QztBQUFBO0FBQUEsU0FBNkQ7QUFBQSxRQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBc0Y7QUFBQSxXQUFZO0FBQUE7QUFBQTtBQUFBLE1BQTdDLE9BQTBCO0FBQUEsZUFBMUIsbURBQWlXO0FBQUE7QUFBQSxLQUFoTixnQ0FBa0ssc0NBQThDO0FBQUEsYUFBaEs7QUFBQSxLQUFWO0FBQUEsZUFBa0M7QUFBQSxlQUErQywrQkFBeUY7QUFBQTtBQUFBO0FBQUEsS0FBQTFHLE9BQXJvRDtBQUFBLFNBQWtEO0FBQUEsSUFBVjtBQUFBLFNBQUFvSCxNQUF3QztBQUFBO0FBQUEsYUFBMEM7QUFBQSxLQUFWO0FBQUEsVUFBQUEsTUFBdUM7QUFBQTtBQUFBLGNBQTBDO0FBQUEsTUFBVjtBQUFBLFdBQUFBLE1BQW1EO0FBQUE7QUFBQSxlQUFxQztBQUFBLE9BQVY7QUFBQSxZQUFBQSxNQUFvRDtBQUFBO0FBQUEsZ0JBQXNDO0FBQUEsUUFBVjtBQUFBO0FBQUEsY0FBMEc7QUFBQSxjQUF0QjtBQUFBLFNBQXNFO0FBQUE7QUFBQSxZQUFBQSxNQUFsRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFBQXpJLE1BQTBKO0FBQUEsSUFBMEI7QUFBQSxLQUFnQztBQUFBLElBQTBILHFDQUEwNkI7QUFBQTtBQUFBO0FBQUEsSUFBQTRRLGNEeFkzb0U7QUFBQSxJQUFBbE4sY0FBQTtBQUFBLElBQUFtTixrQkFBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLGVBQUFULE1BQUFsUixLQUFBQztBQUFBQTtBQUFBQSxLQUFBdVAsT0M0WWM7QUFBQSxLQUFBMU0sT0FBNkI7QUFBQSxTQUFrRjtBQUFBLEtBQUE0RixLQUFoQjtBQUFBLElBQTREO0FBQUEsU0FBQUEsT0FBYTtBQUFBO0FBQUE7QUFBQSxXQUEwQztBQUFBLE1BQUFBLE9BQWhCO0FBQUEsS0FBNEQ7QUFBQSxVQUFBQSxPQUFhO0FBQUE7QUFBQTtBQUFBLFlBQStCO0FBQUEsT0FBQUEsT0FBaEI7QUFBQTtBQUFBLFlBQWxOO0FBQUEsSUFBdEI7QUFBQSxhQUFzVDtBQUFBLEtBQVYsK0JBQWtDLG9DQUFzaEw7QUFBQTtBQUFBO0FBQUEsUUFBaDhLO0FBQUEsVUFBWSxrQkFBdUI7QUFBQSxLQUExRCxPQUFnQixlQUFoQix3Q0FBdTlLO0FBQUE7QUFBQTtBQUFBLFNBQTEwSztBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLEtBQXV6Syw0Q0FBOEM7QUFBQTtBQUFBLEtBQUEzRyxPQUFseEs7QUFBQSxTQUFzQztBQUFBLElBQVYsK0JBQXVELGtDQUErcks7QUFBQSxZQUEzb0s7QUFBQSxJQUFWLCtCQUF5RCxvQ0FBNGxLO0FBQUEsWUFBdGlLO0FBQUEsSUFBViwrQkFBeUQsb0NBQXUvSjtBQUFBLFlBQWo4SjtBQUFBLElBQVYsK0JBQXlELG9DQUFrNUo7QUFBQSxZQUE1MUo7QUFBQSxJQUFWLCtCQUF3RCxtQ0FBOHlKO0FBQUEsWUFBenZKO0FBQUEsSUFBViwrQkFBdUQsa0NBQTRzSjtBQUFBLFlBQXhwSjtBQUFBLElBQVYsK0JBQXdELG1DQUEwbUo7QUFBQSxZQUFyako7QUFBQSxJQUFWLCtCQUF5RCxtQ0FBc2dKO0FBQUEsWUFBajlJO0FBQUEsSUFBViwrQkFBMkQsc0NBQWc2STtBQUFBLFlBQXgySTtBQUFBLElBQVYsK0JBQXVELHNDQUEyekk7QUFBQSxZQUFud0k7QUFBQSxJQUFWLCtCQUEyRCxzQ0FBa3RJO0FBQUEsWUFBMXBJO0FBQUEsSUFBVjtBQUFBLEtBQTRFLE9BQTJCLGVBQTNCLGlDQUF3bEk7QUFBQSxZQUEzaEk7QUFBQSxJQUFWO0FBQUEsS0FBOEUsT0FBNkIsZUFBN0IsbUNBQXU5SDtBQUFBLFlBQXg1SDtBQUFBLElBQVY7QUFBQSxLQUE2RSxPQUE0QixlQUE1QixrQ0FBcTFIO0FBQUEsWUFBdnhIO0FBQUEsSUFBViwrQkFBMEQscUNBQXV1SDtBQUFBLFlBQWhySDtBQUFBLElBQVYsK0JBQXVELHFDQUFtb0g7QUFBQSxZQUE1a0g7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUF5RjtBQUFBLFVBQVYsaUNBQTJDO0FBQUEsS0FBZixtQ0FBMitHO0FBQUE7QUFBQSxZQUExNkc7QUFBQSxJQUFWO0FBQUEsS0FBMkYsT0FBd0I7QUFBQSxjQUFwQyxVQUFZLGlEQUF5MUc7QUFBQSxZQUEveEc7QUFBQSxJQUFWO0FBQUEsS0FBdUQsNENBQWt2RztBQUFBLFlBQXByRztBQUFBLElBQVYsK0JBQXlELHFDQUFxb0c7QUFBQSxZQUE5a0c7QUFBQSxJQUFWLCtCQUEyRCxzQ0FBNmhHO0FBQUEsWUFBcitGO0FBQUEsSUFBViwrQkFBMEQscUNBQXE3RjtBQUFBLFlBQTkzRjtBQUFBLElBQVYsK0JBQTBELHFDQUE4MEY7QUFBQSxZQUF2eEY7QUFBQSxJQUFWLCtCQUEwRCxxQ0FBdXVGO0FBQUEsWUFBaHJGO0FBQUEsSUFBViwrQkFBMEQscUNBQWdvRjtBQUFBLFlBQXprRjtBQUFBLElBQVYsK0JBQTRELHVDQUF1aEY7QUFBQSxZQUE5OUU7QUFBQSxJQUFWLCtCQUE0RCx1Q0FBNDZFO0FBQUEsWUFBbjNFO0FBQUEsSUFBViwrQkFBMEQsb0NBQW0wRTtBQUFBLFlBQTd3RTtBQUFBLElBQVYsK0JBQTRELHVDQUEydEU7QUFBQSxZQUFscUU7QUFBQSxJQUFWO0FBQUEsS0FBaUUsNENBQTJtRTtBQUFBLFlBQTdpRTtBQUFBLElBQVY7QUFBQSxLQUFpRSw0Q0FBcy9EO0FBQUEsWUFBeDdEO0FBQUEsSUFBViwrQkFBcUUsc0NBQTYzRDtBQUFBLFlBQXIwRDtBQUFBLElBQVY7QUFBQSxLQUFtRSw4Q0FBNHdEO0FBQUEsWUFBNXNEO0FBQUEsSUFBViwrQkFBMEQscUNBQTRwRDtBQUFBLFlBQXJtRDtBQUFBLElBQVY7QUFBQSxLQUFpRixPQUFnQyxlQUFoQyxzQ0FBOGhEO0FBQUEsWUFBNTlDO0FBQUEsSUFBViwrQkFBd0QsbUNBQTg2QztBQUFBLFlBQXozQztBQUFBLElBQVY7QUFBQSxLQUFnRSwyQ0FBbTBDO0FBQUEsWUFBdHdDO0FBQUEsSUFBViwrQkFBMkQsc0NBQXF0QztBQUFBLFlBQTdwQztBQUFBLElBQVYsK0JBQTJELHNDQUE0bUM7QUFBQSxZQUFwakM7QUFBQSxJQUFWLCtCQUF5RCxvQ0FBcWdDO0FBQUEsWUFBLzhCO0FBQUEsSUFBViwrQkFBMkQscUNBQTg1QjtBQUFBLFlBQXYyQjtBQUFBLElBQVYsK0JBQTZELHdDQUFvekI7QUFBQTtBQUFBO0FBQUEsT0FBMXZCO0FBQUE7QUFBQSxJQUFWO0FBQUEsS0FBZ0csT0FBMEQ7QUFBQSxjQUFyRTtBQUFBLGdCQUFXO0FBQUE7QUFBQTtBQUFBLG1CQUFvcUI7QUFBQSxRQUFBckIsTUFBM2pCO0FBQUEsSUFBaUM7QUFBQTtBQUFBLFVBQTBDO0FBQUEsVUFBVjtBQUFBO0FBQUEsYUFBaEI7QUFBQSxJQUF4RTtBQUFBLFNBQUF3TyxNQUE4STtBQUFBLEtBQTBDLE9BQW1DLGVBQW5DLHdDQUEwWjtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQWhUO0FBQUEsVUFBZ0M7QUFBQTtBQUFBLElBQTlFO0FBQUEsY0FBNkw7QUFBQSxlQUEzQztBQUFBLGNBQStELHFDQUE2STtBQUFBO0FBQUEsWUQ1WXA2TDtBQUFBLFlBQUEwQyxrQkFBQXpJLEtBQUErQyxXQUFBbE07QUFBQUEsUUFBQWtNLFVDZ1pFO0FBQUE7QUFBQSxhQUFjO0FBQUEsS0FBViwrQkFBcUM7QUFBQTtBQUFBLE1BQUEyRixTQUF1QjtBQUFBLE1BQUFDLFVBQW1DO0FBQUEsTUFBQTlQLE9BQStCO0FBQUEsTUFBQUMsUUFBNkM7QUFBQSxVQUFvQztBQUFBLEtBQVYsK0JBQTBEO0FBQUEsU0FBQWlLLFlBQW9EO0FBQUEsS0FBa0I7QUFBQTtBQUFBLEdBQVU7QUFBQTtBQUFBLFNEaFpyVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUE2RixjQUFBRCxTQUFBMVIsT0FBQUo7QUFBQUEsUUFBQSxJQ29aZ0I7QUFBQSxJQUFWLCtCQUF5RDtBQUFBLFFBQUFVLE1BQTRDO0FBQUEsSUFBNkI7QUFBQTtBQUFBLFVBQTREO0FBQUEsTUFBQUEsUUFBaEI7QUFBQSxLQUEwRDtBQUFBO0FBQUEsV0FBZ0Q7QUFBQSxXQUFoQjtBQUFBO0FBQUEsY0FBaEI7QUFBQTtBQUFBO0FBQUEsYUFBdEc7QUFBQSxJQUFwRTtBQUFBO0FBQUEsTUFBQThHO0FBQUFBLFFBQWdRLFdBQVksVUFBWTtBQUFBLEtBQTZDLHlDQUF5N0I7QUFBQTtBQUFBLFFBQUE5RyxRQUFyM0I7QUFBQSxJQUE2QjtBQUFBO0FBQUEsVUFBa0U7QUFBQSxNQUFBQSxRQUFYO0FBQUEsS0FBOEM7QUFBQTtBQUFBLFdBQWdEO0FBQUEsV0FBaEI7QUFBQTtBQUFBLGNBQWhCO0FBQUE7QUFBQTtBQUFBLGFBQXJHO0FBQUEsSUFBcEU7QUFBQSxhQUE4UTtBQUFBLEtBQThCLHVDQUFnbUI7QUFBQTtBQUFBLFlBQTFrQjtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQW9GO0FBQUEsVUFBZDtBQUFBLEtBQWY7QUFBQSxLQUFpRTtBQUFBO0FBQUE7QUFBQSxLQUFBQSxRQUE2QztBQUFBO0FBQUEsT0FBNkI7QUFBQSxVQUFnQztBQUFBO0FBQUEsSUFBcEY7QUFBQSxLQUFpYSxpRUFBcUM7QUFBQTtBQUFBLFNBQW5SO0FBQUEsU0FBakI7QUFBQSxTQUFqQjtBQUFBLFNBQVg7QUFBQSxJQUF0QiwrQkFBNkY7QUFBQTtBQUFBLEtBQUFzUixRQUErQjtBQUFBLFNBQXlKO0FBQUEsSUFBN0c7QUFBQTtBQUFBO0FBQUEsdUJBQUF6SztBQUFBQTtBQUFBQSxnQkFBQSxJQUFzRTtBQUFBLG9CQUFqQyxjQUFnQjtBQUFBLGVBQXNEO0FBQUE7QUFBQSxpQkFBcUI7QUFBQSxHQUE4QztBQUFBLFlEcFpsMUM7QUFBQSxZQUFBMEssY0FBQW5QLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBa0osTUN3WmMsV0FBWSxVQUFZO0FBQUEsS0FBQStDLFVBQTJDO0FBQUEsS0FBQXNDLFNBQWdDO0FBQUEsU0FBNEQ7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUE0SDtBQUFBLFVBQS9DO0FBQUEsVUFBdEI7QUFBQSxLQUF5RjtBQUFBO0FBQUEsWUFBeUQ7QUFBQSxJQUFqQyxPQUFnQyxlQUFoQywrQ0FBK0Q7QUFBQTtBQUFBLFlEeFoxWTtBQUFBLFlBQUEwRCxxQkFBQXBQLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBa1MsZ0JDNFp1QjtBQUFBLEtBQUFuUSxPQUE2QjtBQUFBLFNBQXlMO0FBQUEsS0FBQThFO0FBQUFBLE9BQW5KO0FBQUE7QUFBQTtBQUFBLG1CQUFBdUQ7QUFBQUE7QUFBQUEsWUFBQTtBQUFBLGNBQXlHO0FBQUEsZUFBeEIsV0FBWSxVQUFZO0FBQUE7QUFBQSxXQUFuRDtBQUFBO0FBQUEsb0JBQXhCLFdBQVksVUFBWTtBQUFBLHVCQUF5QjtBQUFBLFVBQWtFO0FBQUE7QUFBQSxTQUFnRDtBQUFBLElBQVYsK0JBQWtDLG1DQUErSjtBQUFBO0FBQUE7QUFBQSxPQUEvRTtBQUFBLFNBQVksNkJBQWdDO0FBQUE7QUFBQSxJQUFuRSxPQUFnQixlQUFoQix3Q0FBc0c7QUFBQTtBQUFBLFlENVpsZDtBQUFBLFlBQUErSCxxQkFBQXRQLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBK0IsT0NnYWM7QUFBQSxLQUFBcVEsZ0JBQXNDO0FBQUEsU0FBc087QUFBQSxLQUFBcEw7QUFBQUEsT0FBaE07QUFBQTtBQUFBO0FBQUEsbUJBQUFvRDtBQUFBQTtBQUFBQSxZQUFBLElBQWlLO0FBQUEsZ0JBQTdCO0FBQUEsZ0JBQTdFO0FBQUEsZ0JBQVg7QUFBQSxXQUFWO0FBQUE7QUFBQSxpQkFBMEQ7QUFBQSxpQkFBYjtBQUFBO0FBQUEsb0JBQW9DO0FBQUEsV0FBMUM7QUFBQSxVQUFxSDtBQUFBO0FBQUEsSUFBMkUsT0FBNEQ7QUFBQTtBQUFBO0FBQUEsYUFBeEUsVUFBWSw2Q0FBOEQ7QUFBQTtBQUFBLFlEaGFqYTtBQUFBLFlBQUFpSSxlQUFBeFAsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUFxSCxZQ29hbUIsV0FBWSxVQUFZO0FBQUEsS0FBQUcsYUFBOEM7QUFBQSxTQUF3RDtBQUFBLElBQVY7QUFBQSxLQUF5UCxPQUFrRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBOUQsVUFBWSwyQ0FBcUQ7QUFBQTtBQUFBLFNBQW5MO0FBQUEsU0FBM0M7QUFBQSxTQUF0QjtBQUFBLElBQTBGO0FBQUEsR0FBMEo7QUFBQTtBQUFBLFNEcGFyYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQThLLHVCQUFBelAsTUFBQTlDLEtBQUFDO0FBQUFBLFFBQUEsSUN3YXlELHFDQUFYO0FBQUEsSUFBVjtBQUFBLGFBQTBELGlDQUFBdVMsS0FBYjtBQUFBO0FBQUEsU0FBQUEsS0FBb0MsV0FBWSxVQUFZO0FBQUE7QUFBQSxTQUE0QztBQUFBLEtBQUFDO0FBQUFBLE9BQVYsNkJBQWlDO0FBQUEsU0FBa0Y7QUFBQSxTQUFsQjtBQUFBLEtBQUFDO0FBQUFBLE9BQVY7QUFBQSxVQUErRCxXQUFZLFVBQVk7QUFBQTtBQUFBLEtBQUFDLFFBQWdFO0FBQUEsU0FBMkQ7QUFBQSxJQUFWO0FBQUE7QUFBQSxVQUFtSDtBQUFBLFVBQXhDO0FBQUEsVUFBdEI7QUFBQSxLQUEwRjtBQUFBO0FBQUE7QUFBQSxLQUFBN0ssUUFBcUI7QUFBQSxLQUFBOEssZ0JBQXVDO0FBQUEsS0FBQUMsWUFBZ0Q7QUFBQSxLQUFBMUgsU0FBOEM7QUFBQSxLQUFBbkosT0FBMkM7QUFBQSxTQUE4RDtBQUFBLEtBQUE4USxjQUFaO0FBQUEsU0FBZ0g7QUFBQSxTQUFYO0FBQUEsSUFBdEI7QUFBQTtBQUFBLFVBQW1HO0FBQUEsVUFBZDtBQUFBLEtBQXRCO0FBQUE7QUFBQSxJQUFpRixtREFBc0Q7QUFBQTtBQUFBLFlEeGF6bUM7QUFBQSxZQUFBQyxXQUFBalEsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUM0YW1JO0FBQUEsU0FBakI7QUFBQSxTQUFWLDZCQUE4RDtBQUFBO0FBQUEsT0FBN0g7QUFBQSxTQUFZLGNBQWdCO0FBQUEsSUFBbkQsT0FBZ0IsZUFBaEIsd0NBQTRNO0FBQUE7QUFBQSxZQUFBK1MsYUFBQWxRLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0FJckwsVUFBWSxnQkFBa0I7QUFBQSxJQUFyRCxPQUFnQixlQUFoQix3Q0FBc0Y7QUFBQTtBQUFBLFlEaGJ4RztBQUFBLFlBQUFnVCxjQUFBblEsTUFBQTlDLEtBQUFDO0FBQUFBLFFBQUEsSUNvYmdCO0FBQUEsSUFBViwrQkFBa0MsbUNBQXdRO0FBQUE7QUFBQSxTQUFoTTtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBLEtBQThFLE9BQWdCLGVBQWhCLDJDQUE2STtBQUFBO0FBQUE7QUFBQSxPQUFsRSxVQUFZLGlCQUFtQjtBQUFBLElBQXRELE9BQWdCLGVBQWhCLHdDQUF5RjtBQUFBO0FBQUE7QUFBQSxTRHBiaFQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBaVQsWUFBQXBRLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDd2JpRTtBQUFBLFNBQVQ7QUFBQSxTQUFqQjtBQUFBLElBQVY7QUFBQSxLQUFpRyxPQUE2QixlQUE3QixtQ0FBNjhDO0FBQUE7QUFBQSxLQUFBeU0sV0FBNTRDO0FBQUEsS0FBQTFLLE9BQTZCO0FBQUEsS0FBQUMsUUFBNkI7QUFBQSxTQUFvQztBQUFBLElBQVYsK0JBQXNDLHVDQUFreEM7QUFBQTtBQUFBLFNBQTlwQztBQUFBLFNBQVQ7QUFBQSxLQUFBdkIsTUFBaEI7QUFBQSxJQUE0RTtBQUFBO0FBQUEsVUFBcUQ7QUFBQSxVQUFMO0FBQUEsVUFBaEI7QUFBQTtBQUFBLGFBQWhCO0FBQUEsSUFBbkg7QUFBQSxTQUFBeVMsZ0JBQXFNO0FBQUE7QUFBQTtBQUFBLFVBQW1EO0FBQUEsTUFBQUEsZ0JBQUYsUUFBbEI7QUFBQTtBQUFBLFNBQWtJO0FBQUEsU0FBVDtBQUFBLEtBQUF6UyxRQUFoQjtBQUFBLElBQTRFO0FBQUE7QUFBQSxVQUFxRDtBQUFBLFVBQUw7QUFBQSxVQUFoQjtBQUFBO0FBQUEsYUFBaEI7QUFBQSxJQUFuSDtBQUFBLFNBQUEwUyxnQkFBcU07QUFBQTtBQUFBO0FBQUEsVUFBc1Y7QUFBQSxVQUFoQjtBQUFBLFVBQWxDO0FBQUEsVUFBWjtBQUFBLE1BQUFwQixRQUFqUTtBQUFBLEtBQWlEO0FBQUE7QUFBQSxnQkFBQW5GLEtBQUFyQztBQUFBQTtBQUFBQSxTQUFBLElBQTZKO0FBQUEsYUFBbkI7QUFBQSxhQUFoQjtBQUFBLGFBQXRDO0FBQUEsYUFBaEI7QUFBQSxRQUExQjtBQUFBLFFBQTRKO0FBQUEsT0FBSTtBQUFBO0FBQUE7QUFBQSxTQUFBNEksZ0JBQTZHO0FBQUE7QUFBQTtBQUFBLFNBQWtFO0FBQUEsU0FBVDtBQUFBLFNBQWpCO0FBQUEsSUFBVjtBQUFBO0FBQUEsVUFBdUc7QUFBQSxNQUFBckQsUUFBYjtBQUFBO0FBQUEsU0FBQUEsUUFBNkM7QUFBQTtBQUFBLFNBQTJGLFVBQVk7QUFBQSxJQUEzRCxPQUFzQztBQUFBLGFBQXRDLHVEQUFtSTtBQUFBO0FBQUE7QUFBQSxTRHhiM2tEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFzRCxlQUFBdlEsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEyTixXQzRia0I7QUFBQSxTQUFpRTtBQUFBLEtBQUFsTixNQUFqQjtBQUFBLElBQXdEO0FBQUE7QUFBQSxVQUFxRTtBQUFBLFVBQVQ7QUFBQSxNQUFBQSxRQUFoQjtBQUFBLEtBQXdGO0FBQUE7QUFBQSxXQUE4RDtBQUFBLFdBQWQ7QUFBQSxPQUFBMEIsY0FBaEI7QUFBQTtBQUFBLFVBQUFBLGNBQWhCO0FBQUE7QUFBQTtBQUFBLFNBQUFBLGNBQXBJO0FBQUE7QUFBQSxTQUFzUztBQUFBLEtBQUExQixRQUFqQjtBQUFBLElBQXdEO0FBQUE7QUFBQSxVQUFxRTtBQUFBLFVBQVQ7QUFBQSxNQUFBQSxRQUFoQjtBQUFBLEtBQXdGO0FBQUE7QUFBQSxXQUE4RDtBQUFBLFdBQWQ7QUFBQSxXQUFoQjtBQUFBO0FBQUEsY0FBaEI7QUFBQTtBQUFBO0FBQUEsYUFBcEk7QUFBQTtBQUFBLEtBQUE0UyxVQUEvRjtBQUFBLFNBQSthO0FBQUEsS0FBQTVTLFFBQWpCO0FBQUEsSUFBd0Q7QUFBQTtBQUFBLFVBQXFFO0FBQUEsVUFBVDtBQUFBLE1BQUFBLFFBQWhCO0FBQUEsS0FBd0Y7QUFBQTtBQUFBLFdBQThEO0FBQUEsV0FBZDtBQUFBLFdBQWhCO0FBQUE7QUFBQSxjQUFoQjtBQUFBO0FBQUE7QUFBQSxhQUFwSTtBQUFBO0FBQUEsS0FBQTJCO0FBQUFBLE9BQS9GLDZCQUE4VTtBQUFBO0FBQUEsT0FBd0Y7QUFBQSxTQUFZO0FBQUEsV0FBb0I7QUFBQTtBQUFBLElBQS9ELE9BQXdCLGVBQXhCLGlEQUF3STtBQUFBO0FBQUEsWUQ1Yjl4QztBQUFBLFlBQUFrUixjQUFBelEsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUNnY2lHO0FBQUEsU0FBM0MsVUFBWSxlQUFpQjtBQUFBLElBQWpFLE9BQTZCLGVBQTdCLDRDQUFtSDtBQUFBO0FBQUEsWURoY3JJO0FBQUEsWUFBQXVULFlBQUExUSxNQUFBOUMsS0FBQUM7QUFBQUEsUUFBQSxJQ29jZ0I7QUFBQSxJQUFWLCtCQUFrQyxvQ0FBdUo7QUFBQTtBQUFBLFNBQS9ELFVBQVksZUFBaUI7QUFBQSxJQUFwRCxPQUFnQixlQUFoQix3Q0FBc0Y7QUFBQTtBQUFBLFlEcGMvTDtBQUFBLFlBQUF3VCxXQUFBM1EsTUFBQTlDLEtBQUFDO0FBQUFBLFFBQUEsSUN3Y2dCO0FBQUEsSUFBViwrQkFBa0Msb0NBQXVKO0FBQUE7QUFBQSxTQUE5RCxVQUFZLGNBQWdCO0FBQUEsSUFBbkQsT0FBZ0IsZUFBaEIsd0NBQXFGO0FBQUE7QUFBQTtBQUFBLFNEeGMvTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXlULGFBQUE1USxNQUFBOUMsS0FBQUM7QUFBQUEsUUFBQWdELFdDNGNrQjtBQUFBLElBQThCO0FBQUEsYUFBd0M7QUFBQSxLQUFWLCtCQUFrQyxtQ0FBZ3FCO0FBQUE7QUFBQSxNQUFBNE8sU0FBem1CO0FBQUEsTUFBQXZGLE9BQTZCO0FBQUEsVUFBa0M7QUFBQSxLQUFWO0FBQUEsZUFBd0Y7QUFBQSxnQkFBL0I7QUFBQSxlQUFtSjtBQUFBLDJCQUFuRSxVQUFZLHNDQUErWjtBQUFBO0FBQUE7QUFBQSxTQUEvVDtBQUFBLFNBQWpCO0FBQUEsSUFBViwrQkFBOEQsbUNBQTRSO0FBQUEsUUFBQUEsU0FBdk8scUNBQWdDO0FBQUEsSUFBVjtBQUFBLGNBQXNGLGVBQTdCO0FBQUEsY0FBa0o7QUFBQSw0QkFBcEUsVUFBWSxzQ0FBOEQ7QUFBQTtBQUFBLFlBQUFxSCxhQUFBN1EsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQUl2dUI7QUFBQSxTQUFZLG1CQUF3QjtBQUFBLElBQTNELE9BQWdCLGVBQWhCLHdDQUE0RjtBQUFBO0FBQUEsWUFBQTJULHFCQUFBOVEsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQUlyRTtBQUFBLFNBQVksa0JBQW9CO0FBQUEsSUFBdkQsT0FBZ0IsZUFBaEIsd0NBQXdGO0FBQUE7QUFBQSxZQUFBNFQsZUFBQS9RLE1BQUE5QyxLQUFBQztBQUFBQSxJQUl4RixPQUEwQixlQUExQixnQ0FBd0M7QUFBQTtBQUFBO0FBQUEsU0R4ZDFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUE2VCxjQUFBaFIsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE4QixPQzRkYyxXQUFZLFVBQVk7QUFBQSxLQUFBZ1MsWUFBNkM7QUFBQSxTQUEwSjtBQUFBLEtBQUFyVCxNQUFqQjtBQUFBLElBQTZEO0FBQUE7QUFBQSxVQUFxRTtBQUFBLFVBQVQ7QUFBQSxNQUFBQSxRQUFoQjtBQUFBLEtBQWdGO0FBQUE7QUFBQSxXQUE4RDtBQUFBLFdBQWQ7QUFBQSxXQUFoQjtBQUFBO0FBQUEsY0FBaEI7QUFBQTtBQUFBO0FBQUEsYUFBNUg7QUFBQSxJQUFwRztBQUFBO0FBQUEsVUFBNFYsV0FBWSxVQUFZO0FBQUEsTUFBQXNCLE9BQStEO0FBQUEsTUFBQW1ILE1BQStDO0FBQUE7QUFBQSxTQUFBbkgsT0FBdkssV0FBQW1ILE1BQUE7QUFBQSxZQUE4TjtBQUFBLElBQVYsK0JBQW1DLG1DQUF3SztBQUFBO0FBQUE7QUFBQSxPQUF2RjtBQUFBLFNBQVksZ0NBQXNDO0FBQUE7QUFBQSxJQUExRSxPQUFpQixlQUFqQix3Q0FBK0c7QUFBQTtBQUFBLFlENWQvNUI7QUFBQSxZQUFBNkssZ0JBQUFsUixNQUFBOUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQThCLE9DZ2VjLFdBQVksVUFBWTtBQUFBLEtBQUFvSCxNQUF3QyxXQUFZLFVBQVk7QUFBQSxLQUFBbkgsT0FBcUQ7QUFBQSxTQUEwRDtBQUFBLElBQVYsK0JBQWtDLG1DQUFrSztBQUFBO0FBQUE7QUFBQSxPQUFsRjtBQUFBLFNBQVksOEJBQW1DO0FBQUE7QUFBQSxJQUF0RSxPQUFnQixlQUFoQix3Q0FBeUc7QUFBQTtBQUFBLFlEaGUvWTtBQUFBLFlBQUFpUyxnQkFBQW5SLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBOEIsT0NvZWMsV0FBWSxVQUFZO0FBQUEsU0FBK0U7QUFBQSxTQUFsQjtBQUFBLEtBQUFtUztBQUFBQSxPQUFWO0FBQUEsVUFBK0QsV0FBWSxVQUFZO0FBQUE7QUFBQSxLQUFBeE4sUUFBZ0U7QUFBQSxTQUEwRTtBQUFBLFNBQVg7QUFBQSxJQUF0QjtBQUFBLEtBQTZFLE9BQWtDLGVBQWxDLGdEQUE0TTtBQUFBO0FBQUEsS0FBQXlOLFlBQXJJO0FBQUEsU0FBNEQ7QUFBQSxLQUFBRCxnQkFBVjtBQUFBLElBQWdDLCtDQUFtRDtBQUFBO0FBQUEsWURwZWxqQjtBQUFBLFlBQUFFLGFBQUF0UixNQUFBOUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQThCLE9Dd2VjLFdBQVksVUFBWTtBQUFBLEtBQUFvSCxNQUF3QyxXQUFZLFVBQVk7QUFBQSxLQUFBekMsUUFBc0Q7QUFBQSxJQUE2RDtBQUFBO0FBQUEsVUFBb0Y7QUFBQSxVQUFyQjtBQUFBLEtBQXhDO0FBQUE7QUFBQSxJQUFnSSxtQ0FBcUM7QUFBQTtBQUFBLFlEeGVyWjtBQUFBLFlBQUEyTixnQkFBQXZSLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBOEIsT0M0ZWMsV0FBWSxVQUFZO0FBQUEsS0FBQTJFLFFBQXlDO0FBQUEsU0FBc0U7QUFBQTtBQUFBLE9BQVYsa0NBQWlEO0FBQUEsSUFBckIsbUNBQXdFO0FBQUE7QUFBQSxZQUFBNE4sY0FBQXhSLE1BQUE5QyxLQUFBQztBQUFBQSxRQUFBLElBSXRNLFVBQVk7QUFBQSxJQUFuQyxPQUFnQixlQUFoQix3Q0FBdUU7QUFBQTtBQUFBLFlEaGZ6RjtBQUFBLFlBQUFzVSxjQUFBelIsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUEsSUNvZjZCO0FBQUEsS0FBQXVVLFNBQWI7QUFBQSxLQUFBeFMsT0FBNkM7QUFBQSxLQUFBeVMsa0JBQXFEO0FBQUEsS0FBQWxNLFdBQWlEO0FBQUEsS0FBQXNLLFlBQTZDO0FBQUEsS0FBQXBLLElBQW1EO0FBQUEsS0FBQWlNLFlBQW1FO0FBQUEsU0FBNEQ7QUFBQSxJQUFyQjtBQUFBLElBQWtELGlEQUFtRDtBQUFBO0FBQUEsWUFBQUMsY0FBQTdSLE1BQUE5QyxLQUFBQztBQUFBQSxRQUFBLElBSXphLFVBQVk7QUFBQSxJQUFuQyxPQUFnQixlQUFoQix3Q0FBdUU7QUFBQTtBQUFBLFlEeGZ6RjtBQUFBLFlBQUEyVSxTQUFBbFcsR0FBQW9FO0FBQUFBO0FBQUFBLEtBQUEsSUM0ZnlCO0FBQUEsS0FBQStSLElBQVY7QUFBQSxTQUF1RTtBQUFBLElBQVYsK0JBQThCO0FBQUE7QUFBQSxLQUFBbk0sS0FBbUM7QUFBQSxLQUFBQSxPQUFzQixtQ0FBNEI7QUFBQSxJQUF4RTtBQUFBLGNBQXdLO0FBQUEsZUFBOUQseUJBQTZCO0FBQUEsZUFBOEM7QUFBQTtBQUFBO0FBQUEsSUFBQW9NLGdCRDVmNVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLHFCQUFBQyxLQUFBaFYsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQWdWLGNDZ2dCcUI7QUFBQSxLQUFBQyxrQkFBaUU7QUFBQSxLQUFBQyxjQUEyQztBQUFBLEtBQUFDLGlCQUEyRDtBQUFBLEtBQUF6UCxZQUFzRDtBQUFBLEtBQUF0RixNRGhnQmxQO0FBQUEsS0FBQWdWO0FBQUFBLE9DZ2dCd1U7QUFBQTtBQUFBLGlCQUFBdlM7QUFBQUEsYUFBQSxJQUFzSztBQUFBLFNBQW5ELG9DQUFBNkQsR0FBMkIsZ0JBQXNCO0FBQUE7QUFBQSxVQUFBMk8sWUFBaUg7QUFBQSxVQUFBQztBQUFBQSxZQUErRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUE4RTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFBelM7QUFBQUEsb0JBQXdEO0FBQUEseUJBQUE2RCxJQUFBO0FBQUEscUJBQW1GO0FBQUEscUJBQThCO0FBQUE7QUFBQSxvQkFBZTtBQUFBLG1CQUFHO0FBQUE7QUFBQTtBQUFBLDRCQUFBN0Q7QUFBQUEsb0JBQThFLE9BQTBDO0FBQUEsNkJBQTNEO0FBQUEsK0JBQWlCLGdEQUErQztBQUFBLHNCQUFXO0FBQUE7QUFBQSxJQUF1QjtBQUFBO0FBQUEsS0FBQTBTO0FBQUFBLE9BQXdUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQWdHLE9BQXVCLGVBQXZCLG1EQUFtRDtBQUFBO0FBQUEsWURoZ0IvaEQ7QUFBQSxZQUFBQyxlQUFBakcsTUFBQTFNLE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBLElDb2dCOEM7QUFBQSxTQUFqQjtBQUFBLEtBQUF5VixRQUFWLDZCQUF1RTtBQUFBLElBQTJFLE9BQXlFO0FBQUE7QUFBQTtBQUFBLGFBQXJGLFVBQVkscURBQTJFO0FBQUE7QUFBQTtBQUFBLFNEcGdCaFA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxlQUFBNVQ7QUFBQUEsUUFBQTJHLEtDd2dCYTtBQUFBLElBQTZDLGdDQUFtQjtBQUFBLFFBQUFBLE9BQW9CO0FBQUEsSUFBcUQsa0NBQW1CO0FBQUEsUUFBQUEsT0FBb0I7QUFBQSxJQUFnRCxrQ0FBbUI7QUFBQSxRQUFBQSxPQUFvQjtBQUFBLElBQWdELGtDQUFtQjtBQUFBLFFBQUFBLE9BQW9CO0FBQUEsSUFBOEMsa0NBQW1CO0FBQUEsUUFBQUEsT0FBb0I7QUFBQSxJQUFnRDtBQUFBO0FBQUEsY0FBNEIsNENBQWlEO0FBQUE7QUFBQSxZQUFBa04sUUFBQXJXO0FBQUFBLFFBQUFtSixLQUloakI7QUFBQSxJQUF3QiwwQ0FBNEIsNkJBQWdCO0FBQUE7QUFBQSxZRDVnQmpGO0FBQUEsWUFBQW1OLGFBQUE1UCxTQUFBdkQ7QUFBQUEsUUFBQSxJQ2doQmdCO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQW1TLElBQXVFO0FBQUEsTUFBQWlCLElBQTRCO0FBQUEsVUFBa0Y7QUFBQSxNQUFBcFYsTUFBWDtBQUFBLFVBQXdDLCtCQUFnQztBQUFBLEtBQTFHO0FBQUE7QUFBQSwwQkFBeUk7QUFBQSxxQkFBMlI7QUFBQTtBQUFBO0FBQUEsS0FBQW1VLE1BQTVOO0FBQUEsS0FBQWlCLE1BQTRCO0FBQUEsU0FBa0Y7QUFBQSxLQUFBcFYsUUFBWDtBQUFBLFNBQXdDLGlDQUFnQztBQUFBLElBQTFHLHVFQUEySjtBQUFBO0FBQUE7QUFBQSxTRGhoQmxqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQXFWLGtCQUFBOVAsU0FBQXZELFFBQUExQyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBK1YsVUNvaEJpQjtBQUFBLEtBQUF0WCxJQUE4QztBQUFBLFNBQW1DO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQXVYLE9BQXVFO0FBQUEsVUFBZ0Q7QUFBQSxLQUFWLCtCQUFrQyxvQ0FBKzVFO0FBQUE7QUFBQTtBQUFBLFFBQTV5RTtBQUFBLFVBQVksa0JBQXFCO0FBQUEsS0FBckUsT0FBYztBQUFBLHlCQUFkLGlEQUFnMUU7QUFBQTtBQUFBLFlBQXhzRTtBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFBLFNBQStFO0FBQUEsVUFBZ0Q7QUFBQSxLQUFWLCtCQUFrQyxvQ0FBMmpFO0FBQUE7QUFBQTtBQUFBLFFBQTE3RDtBQUFBLFVBQVk7QUFBQSxlQUE2QjtBQUFBO0FBQUEsS0FBN0UsT0FBYztBQUFBO0FBQUEsOEJBQWQ7QUFBQTtBQUFBO0FBQUEsZ0JBQTg5RDtBQUFBO0FBQUEsWUFBOTBEO0FBQUEsSUFBVjtBQUFBO0FBQUEsTUFBQUEsU0FBMEU7QUFBQSxVQUFnRDtBQUFBLEtBQVYsK0JBQWtDLG9DQUFzc0Q7QUFBQTtBQUFBLFVBQW5oRDtBQUFBO0FBQUEsUUFBaEU7QUFBQSxVQUFZLHFCQUF3QjtBQUFBO0FBQUEsS0FBeEUsT0FBYztBQUFBLHlCQUFkLG1EQUF1bkQ7QUFBQTtBQUFBLFlBQTM5QztBQUFBLElBQVY7QUFBQTtBQUFBLE1BQUFDLE9BQTBFO0FBQUEsTUFBQUQsU0FBNkM7QUFBQSxVQUFnRDtBQUFBLEtBQVYsK0JBQWtDLHNDQUFzeUM7QUFBQTtBQUFBO0FBQUEsUUFBbHJDO0FBQUEsVUFBWSxxQkFBd0I7QUFBQSxLQUF4RSxPQUFjO0FBQUE7QUFBQSxnQ0FBZDtBQUFBO0FBQUE7QUFBQSxnQkFBc3RDO0FBQUE7QUFBQSxZQUF2bEM7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBQSxTQUF3RTtBQUFBLFVBQWdEO0FBQUEsS0FBViwrQkFBa0Msb0NBQWk5QjtBQUFBO0FBQUE7QUFBQSxRQUEzMUI7QUFBQSxVQUFZLG1CQUFzQjtBQUFBLEtBQXRFLE9BQWM7QUFBQSx5QkFBZCxtREFBKzNCO0FBQUE7QUFBQSxZQUFsd0I7QUFBQSxJQUFWO0FBQUE7QUFBQSxNQUFBQSxTQUF5RTtBQUFBLFVBQWdEO0FBQUEsS0FBViwrQkFBa0Msb0NBQTJuQjtBQUFBO0FBQUE7QUFBQSxRQUF0Z0I7QUFBQSxVQUFZLG9CQUF1QjtBQUFBLEtBQXZFLE9BQWM7QUFBQSx5QkFBZCxtREFBMGlCO0FBQUE7QUFBQSxZQUE1YTtBQUFBLElBQVY7QUFBQTtBQUFBLFVBQXlYO0FBQUEsVUFBdEI7QUFBQSxLQUF3RTtBQUFBO0FBQUE7QUFBQSxLQUFBQSxTQUEvVjtBQUFBLFNBQWdEO0FBQUEsSUFBViwrQkFBa0MsbUNBQWtTO0FBQUE7QUFBQTtBQUFBLE9BQXJMO0FBQUEsU0FBWSx1QkFBMEI7QUFBQSxJQUExRSxPQUFjO0FBQUEsd0JBQWQsbURBQXlOO0FBQUE7QUFBQSxZRHBoQnRvRjtBQUFBLFlBQUFFLFlBQUFyVCxNQUFBOUMsS0FBQUM7QUFBQUE7QUFBQUEsS0FBQTtBQUFBLE9Dd2hCeUM7QUFBQSxTQUFZLHdCQUF1QztBQUFBO0FBQUEsSUFBMUUsT0FBZ0IsZUFBaEIsd0NBQXVIO0FBQUE7QUFBQSxZRHhoQnpJO0FBQUEsWUFBQW1XLG9CQUFBdFQsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQzRoQnlDO0FBQUEsU0FBWSx3QkFBK0M7QUFBQTtBQUFBLElBQWxGLE9BQWdCLGVBQWhCLHdDQUErSDtBQUFBO0FBQUEsWUQ1aEJqSjtBQUFBLFlBQUFvVyxlQUFBdlQsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQ2dpQnlDO0FBQUEsU0FBWSx3QkFBMEM7QUFBQTtBQUFBLElBQTdFLE9BQWdCLGVBQWhCLHdDQUEwSDtBQUFBO0FBQUEsWURoaUI1STtBQUFBLFlBQUFxVyxlQUFBeFQsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQ29pQnlDO0FBQUEsU0FBWSx3QkFBMEM7QUFBQTtBQUFBLElBQTdFLE9BQWdCLGVBQWhCLHdDQUEwSDtBQUFBO0FBQUEsWURwaUI1STtBQUFBLFlBQUFzVyxhQUFBelQsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQ3dpQnlDO0FBQUEsU0FBWSx3QkFBd0M7QUFBQTtBQUFBLElBQTNFLE9BQWdCLGVBQWhCLHdDQUF3SDtBQUFBO0FBQUEsWUR4aUIxSTtBQUFBLFlBQUF1VyxjQUFBMVQsTUFBQTlDLEtBQUFDO0FBQUFBO0FBQUFBLEtBQUE7QUFBQSxPQzRpQnlDO0FBQUEsU0FBWSx3QkFBeUM7QUFBQTtBQUFBLElBQTVFLE9BQWdCLGVBQWhCLHdDQUF5SDtBQUFBO0FBQUEsWUQ1aUIzSTtBQUFBLFlBQUF3VyxpQkFBQTNULE1BQUE5QyxLQUFBQztBQUFBQTtBQUFBQSxLQUFBO0FBQUEsT0NnakJ5QztBQUFBLFNBQVksd0JBQTRDO0FBQUE7QUFBQSxJQUEvRSxPQUFnQixlQUFoQix3Q0FBNEg7QUFBQTtBQUFBO0FBQUEsSUFBQXlXLHdCRGhqQjlJO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsY0FBQXRXO0FBQUFBO0FBQUFBLEtBQUFMLFFDb2pCZTtBQUFBLEtBQUFKLE1BQWlDO0FBQUEsS0FBQUMsT0FBZ0M7QUFBQSxTQUFvQztBQUFBLElBQVYsK0JBQXVDO0FB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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEbFExQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM1MDYxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeC5vYmpzL2pzb28vZGVmYXVsdC9zeC5jbWEuanMiLCJzb3VyY2VzIjpbIi9idWlsdGluL2JsYWNrYm94Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zeF92bS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBTWCBieXRlY29kZSBWTSDigJQgc3RhY2stYmFzZWQgaW50ZXJwcmV0ZXIuXG5cbiAgICBFeGVjdXRlcyBieXRlY29kZSBwcm9kdWNlZCBieSBjb21waWxlci5zeC5cbiAgICBEZXNpZ25lZCBmb3Igc3BlZWQ6IGFycmF5LWJhc2VkIHN0YWNrLCBkaXJlY3QgZGlzcGF0Y2gsXG4gICAgbm8gYWxsb2NhdGlvbiBwZXIgc3RlcCAodW5saWtlIHRoZSBDRUsgbWFjaGluZSkuXG5cbiAgICBUaGlzIGlzIHRoZSBwbGF0Zm9ybS1uYXRpdmUgZXhlY3V0aW9uIGVuZ2luZS4gVGhlIHNhbWUgYnl0ZWNvZGVcbiAgICBydW5zIG9uIGFsbCBwbGF0Zm9ybXMgKE9DYW1sLCBKUywgV0FTTSkuXG5cbiAgICBWTSB0eXBlcyAodm1fY29kZSwgdm1fdXB2YWx1ZV9jZWxsLCB2bV9jbG9zdXJlKSBhcmUgZGVmaW5lZCBpblxuICAgIHN4X3R5cGVzLm1sIHRvIHNoYXJlIHRoZSBtdXR1YWwgcmVjdXJzaW9uIGJsb2NrIHdpdGggW3ZhbHVlXS4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiogQ2FsbCBmcmFtZSDigJQgb25lIHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uLiAqKVxudHlwZSBmcmFtZSA9IHtcbiAgY2xvc3VyZSAgIDogdm1fY2xvc3VyZTtcbiAgbXV0YWJsZSBpcCA6IGludDtcbiAgYmFzZSAgICAgIDogaW50OyAgKCogYmFzZSBpbmRleCBpbiB2YWx1ZSBzdGFjayBmb3IgbG9jYWxzICopXG4gIGxvY2FsX2NlbGxzIDogKGludCwgdm1fdXB2YWx1ZV9jZWxsKSBIYXNodGJsLnQ7ICAoKiBzbG90IOKGkiBzaGFyZWQgY2VsbCBmb3IgY2FwdHVyZWQgbG9jYWxzICopXG59XG5cbigqKiBWTSBzdGF0ZS4gKilcbnR5cGUgdm0gPSB7XG4gIG11dGFibGUgc3RhY2sgIDogdmFsdWUgYXJyYXk7XG4gIG11dGFibGUgc3AgICAgIDogaW50O1xuICBtdXRhYmxlIGZyYW1lcyA6IGZyYW1lIGxpc3Q7XG4gIGdsb2JhbHMgICAgICAgIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudDsgICgqIGxpdmUgcmVmZXJlbmNlIHRvIGtlcm5lbCBlbnYgKilcbn1cblxuKCoqIEZvcndhcmQgcmVmZXJlbmNlIGZvciBKSVQgY29tcGlsYXRpb24g4oCUIHNldCBhZnRlciBkZWZpbml0aW9uLiAqKVxubGV0IGppdF9jb21waWxlX3JlZiA6IChsYW1iZGEgLT4gKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCAtPiB2bV9jbG9zdXJlIG9wdGlvbikgcmVmID1cbiAgcmVmIChmdW4gXyBfIC0+IE5vbmUpXG5cbigqKiBTZW50aW5lbCBjbG9zdXJlIGluZGljYXRpbmcgSklUIGNvbXBpbGF0aW9uIHdhcyBhdHRlbXB0ZWQgYW5kIGZhaWxlZC5cbiAgICBQcmV2ZW50cyByZXRyeWluZyBjb21waWxhdGlvbiBvbiBldmVyeSBjYWxsLiAqKVxubGV0IGppdF9mYWlsZWRfc2VudGluZWwgPSB7XG4gIHZtX2NvZGUgPSB7IHZjX2FyaXR5ID0gLTE7IHZjX2xvY2FscyA9IDA7IHZjX2J5dGVjb2RlID0gW3x8XTsgdmNfY29uc3RhbnRzID0gW3x8XSB9O1xuICB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwiX19qaXRfZmFpbGVkX19cIjsgdm1fZW52X3JlZiA9IEhhc2h0YmwuY3JlYXRlIDA7IHZtX2Nsb3N1cmVfZW52ID0gTm9uZVxufVxuXG5sZXQgaXNfaml0X2ZhaWxlZCBjbCA9IGNsLnZtX2NvZGUudmNfYXJpdHkgPSAtMVxuXG4oKiogQ3VycmVudCBhY3RpdmUgVk0g4oCUIGFsbG93cyBITyBwcmltaXRpdmVzIChtYXAsIGZpbHRlciwgZm9yLWVhY2gsIHNvbWUpXG4gICAgdG8gY2FsbCBWbUNsb3N1cmUgY2FsbGJhY2tzIG9uIHRoZSBzYW1lIFZNIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIFRoaXMgaXMgY3JpdGljYWw6IGNyZWF0aW5nIGEgbmV3IFZNIHBlciBjYWxsYmFjayBsb3NlcyB0aGUgY2FsbGluZyBWTSdzXG4gICAgc3RhY2svZnJhbWUgY29udGV4dCwgY2F1c2luZyB1cHZhbHVlLWNhcHR1cmVkIGhvc3Qgb2JqZWN0cyB0byBiZWNvbWVcbiAgICBpbmFjY2Vzc2libGUuICopXG5sZXQgX2FjdGl2ZV92bSA6IHZtIG9wdGlvbiByZWYgPSByZWYgTm9uZVxuXG5sZXQgY3JlYXRlIGdsb2JhbHMgPVxuICB7IHN0YWNrID0gQXJyYXkubWFrZSA0MDk2IE5pbDsgc3AgPSAwOyBmcmFtZXMgPSBbXTsgZ2xvYmFscyB9XG5cbigqKiBTdGFjayBvcHMg4oCUIGlubGluZWQgZm9yIHNwZWVkLiAqKVxubGV0IHB1c2ggdm0gdiA9XG4gIGlmIHZtLnNwID49IEFycmF5Lmxlbmd0aCB2bS5zdGFjayB0aGVuIGJlZ2luXG4gICAgbGV0IG5zID0gQXJyYXkubWFrZSAodm0uc3AgKiAyKSBOaWwgaW5cbiAgICBBcnJheS5ibGl0IHZtLnN0YWNrIDAgbnMgMCB2bS5zcDtcbiAgICB2bS5zdGFjayA8LSBuc1xuICBlbmQ7XG4gIHZtLnN0YWNrLih2bS5zcCkgPC0gdjtcbiAgdm0uc3AgPC0gdm0uc3AgKyAxXG5cbmxldFtAaW5saW5lXSBwb3Agdm0gPVxuICB2bS5zcCA8LSB2bS5zcCAtIDE7XG4gIHZtLnN0YWNrLih2bS5zcClcblxubGV0W0BpbmxpbmVdIHBlZWsgdm0gPSB2bS5zdGFjay4odm0uc3AgLSAxKVxuXG4oKiogUmVhZCBvcGVyYW5kcy4gKilcbmxldFtAaW5saW5lXSByZWFkX3U4IGYgPVxuICBsZXQgdiA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwKSBpblxuICBmLmlwIDwtIGYuaXAgKyAxOyB2XG5cbmxldFtAaW5saW5lXSByZWFkX3UxNiBmID1cbiAgbGV0IGxvID0gZi5jbG9zdXJlLnZtX2NvZGUudmNfYnl0ZWNvZGUuKGYuaXApIGluXG4gIGxldCBoaSA9IGYuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlLihmLmlwICsgMSkgaW5cbiAgZi5pcCA8LSBmLmlwICsgMjtcbiAgbG8gbG9yIChoaSBsc2wgOClcblxubGV0W0BpbmxpbmVdIHJlYWRfaTE2IGYgPVxuICBsZXQgdiA9IHJlYWRfdTE2IGYgaW5cbiAgaWYgdiA+PSAzMjc2OCB0aGVuIHYgLSA2NTUzNiBlbHNlIHZcblxuKCoqIFdyYXAgYSBWTSBjbG9zdXJlIGFzIGFuIFNYIHZhbHVlIChOYXRpdmVGbikuICopXG5sZXQgY2xvc3VyZV90b192YWx1ZSBjbCA9XG4gIE5hdGl2ZUZuIChcInZtOlwiIF4gKG1hdGNoIGNsLnZtX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCJhbm9uXCIpLFxuICAgIGZ1biBhcmdzIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNX0NMT1NVUkVfQ0FMTDpcIiBeIFN0cmluZy5jb25jYXQgXCIsXCIgKExpc3QubWFwIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGFyZ3MpKSkpXG4gICgqIFBsYWNlaG9sZGVyIOKAlCBhY3R1YWwgY2FsbHMgZ28gdGhyb3VnaCB2bV9jYWxsIGJlbG93ICopXG5cbmxldCBfdm1faW5zbl9jb3VudCA9IHJlZiAwXG5sZXQgX3ZtX2NhbGxfY291bnQgPSByZWYgMFxubGV0IF92bV9jZWtfY291bnQgPSByZWYgMFxubGV0IHZtX3Jlc2V0X2NvdW50ZXJzICgpID0gX3ZtX2luc25fY291bnQgOj0gMDsgX3ZtX2NhbGxfY291bnQgOj0gMDsgX3ZtX2Nla19jb3VudCA6PSAwXG5sZXQgdm1fcmVwb3J0X2NvdW50ZXJzICgpID1cbiAgUHJpbnRmLmVwcmludGYgXCJbdm0tcGVyZl0gaW5zbnM9JWQgY2FsbHM9JWQgY2VrX2ZhbGxiYWNrcz0lZFxcbiUhXCJcbiAgICAhX3ZtX2luc25fY291bnQgIV92bV9jYWxsX2NvdW50ICFfdm1fY2VrX2NvdW50XG5cbigqKiBQdXNoIGEgVk0gY2xvc3VyZSBmcmFtZSBvbnRvIHRoZSBjdXJyZW50IFZNIOKAlCBubyBuZXcgVk0gYWxsb2NhdGlvbi5cbiAgICBUaGlzIGlzIHRoZSBmYXN0IHBhdGggZm9yIGludHJhLVZNIGNsb3N1cmUgY2FsbHMuICopXG5sZXQgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3MgPVxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gdm0uc3A7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIExpc3QuaXRlciAoZnVuIGEgLT4gcHVzaCB2bSBhKSBhcmdzO1xuICBmb3IgXyA9IExpc3QubGVuZ3RoIGFyZ3MgdG8gY2wudm1fY29kZS52Y19sb2NhbHMgLSAxIGRvIHB1c2ggdm0gTmlsIGRvbmU7XG4gIHZtLmZyYW1lcyA8LSBmcmFtZSA6OiB2bS5mcmFtZXNcblxuKCoqIENvbnZlcnQgY29tcGlsZXIgb3V0cHV0IChTWCBkaWN0KSB0byBhIHZtX2NvZGUgb2JqZWN0LiAqKVxubGV0IGNvZGVfZnJvbV92YWx1ZSB2ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgRGljdCBkIC0+XG4gICAgbGV0IGJjX2xpc3QgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJieXRlY29kZVwiIHdpdGhcbiAgICAgIHwgU29tZSAoTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9KSAtPlxuICAgICAgICBBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHggLT4gbWF0Y2ggeCB3aXRoIE51bWJlciBuIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKSBsKVxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBlbnRyaWVzID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwiY29uc3RhbnRzXCIgd2l0aFxuICAgICAgfCBTb21lIChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pIC0+IEFycmF5Lm9mX2xpc3QgbFxuICAgICAgfCBfIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBjb25zdGFudHMgPSBBcnJheS5tYXAgKGZ1biBlbnRyeSAtPlxuICAgICAgbWF0Y2ggZW50cnkgd2l0aFxuICAgICAgfCBEaWN0IGVkIHdoZW4gSGFzaHRibC5tZW0gZWQgXCJieXRlY29kZVwiIC0+IGVudHJ5ICAoKiBuZXN0ZWQgY29kZSDigJQgY29udmVydCBsYXppbHkgKilcbiAgICAgIHwgXyAtPiBlbnRyeVxuICAgICkgZW50cmllcyBpblxuICAgIGxldCBhcml0eSA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcImFyaXR5XCIgd2l0aFxuICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDBcbiAgICBpblxuICAgIHsgdmNfYXJpdHkgPSBhcml0eTsgdmNfbG9jYWxzID0gYXJpdHkgKyAxNjsgdmNfYnl0ZWNvZGUgPSBiY19saXN0OyB2Y19jb25zdGFudHMgPSBjb25zdGFudHMgfVxuICB8IF8gLT4geyB2Y19hcml0eSA9IDA7IHZjX2xvY2FscyA9IDE2OyB2Y19ieXRlY29kZSA9IFt8fF07IHZjX2NvbnN0YW50cyA9IFt8fF0gfVxuXG4oKiogRXhlY3V0ZSBhIGNsb3N1cmUgd2l0aCBhcmd1bWVudHMg4oCUIGNyZWF0ZXMgYSBmcmVzaCBWTS5cbiAgICBVc2VkIGZvciBlbnRyeSBwb2ludHM6IEpJVCBMYW1iZGEgY2FsbHMsIG1vZHVsZSBleGVjdXRpb24sIGNyb3NzLWJvdW5kYXJ5LiAqKVxubGV0IHJlYyBjYWxsX2Nsb3N1cmUgY2wgYXJncyBnbG9iYWxzID1cbiAgaW5jciBfdm1fY2FsbF9jb3VudDtcbiAgbGV0IHByZXZfdm0gPSAhX2FjdGl2ZV92bSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBfYWN0aXZlX3ZtIDo9IFNvbWUgdm07XG4gIHB1c2hfY2xvc3VyZV9mcmFtZSB2bSBjbCBhcmdzO1xuICAodHJ5IHJ1biB2bSB3aXRoIGUgLT4gX2FjdGl2ZV92bSA6PSBwcmV2X3ZtOyByYWlzZSBlKTtcbiAgX2FjdGl2ZV92bSA6PSBwcmV2X3ZtO1xuICBwb3Agdm1cblxuKCoqIENhbGwgYSBWbUNsb3N1cmUgb24gdGhlIGFjdGl2ZSBWTSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZS5cbiAgICBUaGlzIGlzIHRoZSBwYXRoIHVzZWQgYnkgSE8gcHJpbWl0aXZlcyAobWFwLCBmaWx0ZXIsIGZvci1lYWNoLCBzb21lKSBzb1xuICAgIGNhbGxiYWNrcyBjYW4gYWNjZXNzIHVwdmFsdWVzIHRoYXQgcmVmZXJlbmNlIHRoZSBjYWxsaW5nIFZNJ3Mgc3RhdGUuICopXG5hbmQgY2FsbF9jbG9zdXJlX3JldXNlIGNsIGFyZ3MgPVxuICBjYWxsX2Nsb3N1cmUgY2wgYXJncyBjbC52bV9lbnZfcmVmXG5cbigqKiBDYWxsIGEgdmFsdWUgYXMgYSBmdW5jdGlvbiDigJQgZGlzcGF0Y2ggYnkgdHlwZS5cbiAgICBWbUNsb3N1cmU6IHB1c2hlcyBmcmFtZSBvbiBjdXJyZW50IFZNIChmYXN0IGludHJhLVZNIHBhdGgpLlxuICAgIExhbWJkYTogdHJpZXMgSklUIHRoZW4gZmFsbHMgYmFjayB0byBDRUsuXG4gICAgTmF0aXZlRm46IGNhbGxzIGRpcmVjdGx5LiAqKVxuYW5kIHZtX2NhbGwgdm0gZiBhcmdzID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgVm1DbG9zdXJlIGNsIC0+XG4gICAgKCogRmFzdCBwYXRoOiBwdXNoIGZyYW1lIG9uIGN1cnJlbnQgVk0g4oCUIG5vIGFsbG9jYXRpb24sIGVuYWJsZXMgVENPICopXG4gICAgcHVzaF9jbG9zdXJlX2ZyYW1lIHZtIGNsIGFyZ3NcbiAgfCBOYXRpdmVGbiAoX25hbWUsIGZuKSAtPlxuICAgIGxldCByZXN1bHQgPSBmbiBhcmdzIGluXG4gICAgcHVzaCB2bSByZXN1bHRcbiAgfCBMYW1iZGEgbCAtPlxuICAgIChtYXRjaCBsLmxfY29tcGlsZWQgd2l0aFxuICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKGlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICAgKCogQ2FjaGVkIGJ5dGVjb2RlIOKAlCBydW4gb24gVk0gdXNpbmcgdGhlIGNsb3N1cmUncyBjYXB0dXJlZCBlbnYsXG4gICAgICAgICAgbm90IHRoZSBjYWxsZXIncyBnbG9iYWxzLiBDbG9zdXJlIHZhcnMgd2VyZSBtZXJnZWQgYXQgY29tcGlsZSB0aW1lLiAqKVxuICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGFyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgd2l0aCBfZSAtPlxuICAgICAgICAgICgqIEZhbGxiYWNrIHRvIENFSyDigJQgZGF0YS1kZXBlbmRlbnQgZXJyb3IsIG5vdCBhIEpJVCBidWcuXG4gICAgICAgICAgICAgRGVkdXAgbG9nZ2luZyBoYXBwZW5zIGluIHJlZ2lzdGVyX2ppdF9ob29rLiAqKVxuICAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKSlcbiAgICAgfCBTb21lIF8gLT5cbiAgICAgICAoKiBDb21waWxlIGZhaWxlZCDigJQgQ0VLICopXG4gICAgICAgcHVzaCB2bSAoU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykpXG4gICAgIHwgTm9uZSAtPlxuICAgICAgIGlmIGwubF9uYW1lIDw+IE5vbmVcbiAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAoKiBQcmUtbWFyayBiZWZvcmUgY29tcGlsZSBhdHRlbXB0IHRvIHByZXZlbnQgcmUtZW50cmFuY3kgKilcbiAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIGppdF9mYWlsZWRfc2VudGluZWw7XG4gICAgICAgICBtYXRjaCAhaml0X2NvbXBpbGVfcmVmIGwgdm0uZ2xvYmFscyB3aXRoXG4gICAgICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgY2w7XG4gICAgICAgICAgICh0cnkgcHVzaCB2bSAoY2FsbF9jbG9zdXJlIGNsIGFyZ3MgY2wudm1fZW52X3JlZilcbiAgICAgICAgICAgIHdpdGggX2UgLT4gcHVzaCB2bSAoU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykpKVxuICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKVxuICAgICAgIGVuZFxuICAgICAgIGVsc2VcbiAgICAgICAgIHB1c2ggdm0gKFN4X3JlZi5jZWtfY2FsbCBmIChMaXN0IGFyZ3MpKSlcbiAgfCBDb21wb25lbnQgXyB8IElzbGFuZCBfIC0+XG4gICAgKCogQ29tcG9uZW50cyB1c2Uga2V5d29yZC1hcmcgcGFyc2luZyDigJQgQ0VLIGhhbmRsZXMgdGhpcyAqKVxuICAgIGluY3IgX3ZtX2Nla19jb3VudDtcbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmNla19jYWxsIGYgKExpc3QgYXJncykgaW5cbiAgICBwdXNoIHZtIHJlc3VsdFxuICB8IF8gLT5cbiAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogbm90IGNhbGxhYmxlOiBcIiBeIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGYpKVxuXG4oKiogTWFpbiBleGVjdXRpb24gbG9vcCDigJQgaXRlcmF0aXZlIChubyBPQ2FtbCBzdGFjayBncm93dGgpLlxuICAgIFZtQ2xvc3VyZSBjYWxscyBwdXNoIGZyYW1lczsgdGhlIGxvb3AgcGlja3MgdGhlbSB1cC5cbiAgICBPUF9UQUlMX0NBTEwgKyBWbUNsb3N1cmUgPSB0cnVlIFRDTzogZHJvcCBmcmFtZSwgcHVzaCBuZXcsIGxvb3AuICopXG5hbmQgcnVuIHZtID1cbiAgd2hpbGUgdm0uZnJhbWVzIDw+IFtdIGRvXG4gICAgbWF0Y2ggdm0uZnJhbWVzIHdpdGhcbiAgICB8IFtdIC0+ICgpICAoKiBndWFyZCBoYW5kbGVkIGJ5IHdoaWxlIGNvbmRpdGlvbiAqKVxuICAgIHwgZnJhbWUgOjogcmVzdF9mcmFtZXMgLT5cbiAgICAgIGxldCBiYyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19ieXRlY29kZSBpblxuICAgICAgbGV0IGNvbnN0cyA9IGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMgaW5cbiAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuIGJlZ2luXG4gICAgICAgICgqIEJ5dGVjb2RlIGV4aGF1c3RlZCB3aXRob3V0IGV4cGxpY2l0IFJFVFVSTiDigJQgcG9wIGZyYW1lIGxpa2UgUkVUVVJOICopXG4gICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiP1wiIGluXG4gICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW3ZtXSBXQVJOOiBieXRlY29kZSBleGhhdXN0ZWQgd2l0aG91dCBSRVRVUk4gaW4gJXMgKGJhc2U9JWQgc3A9JWQgZnJhbWVzPSVkKVxcbiUhXCJcbiAgICAgICAgICBmbl9uYW1lIGZyYW1lLmJhc2Ugdm0uc3AgKExpc3QubGVuZ3RoIHJlc3RfZnJhbWVzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlmIHZtLnNwID4gZnJhbWUuYmFzZSB0aGVuIHBvcCB2bSBlbHNlIE5pbCBpblxuICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgIHZtLnNwIDwtIGZyYW1lLmJhc2U7XG4gICAgICAgIGlmIHJlc3RfZnJhbWVzIDw+IFtdIHRoZW4gcHVzaCB2bSByZXN1bHRcbiAgICAgICAgKCogSWYgbm8gbW9yZSBmcmFtZXMsIHJlc3VsdCBzdGF5cyBvbiBzdGFjayBmb3IgY2FsbF9jbG9zdXJlIHRvIHBvcCAqKVxuICAgICAgZW5kXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgIGxldCBvcCA9IGJjLihmcmFtZS5pcCkgaW5cbiAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICAodHJ5IG1hdGNoIG9wIHdpdGhcbiAgICAgICAgKCogLS0tLSBDb25zdGFudHMgLS0tLSAqKVxuICAgICAgICB8IDEgKCogT1BfQ09OU1QgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBpZiBpZHggPj0gQXJyYXkubGVuZ3RoIGNvbnN0cyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogQ09OU1QgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbCBzaXplICVkKVwiXG4gICAgICAgICAgICAgIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBwdXNoIHZtIGNvbnN0cy4oaWR4KVxuICAgICAgICB8IDIgKCogT1BfTklMICopICAgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgfCAzICgqIE9QX1RSVUUgKikgIC0+IHB1c2ggdm0gKEJvb2wgdHJ1ZSlcbiAgICAgICAgfCA0ICgqIE9QX0ZBTFNFICopIC0+IHB1c2ggdm0gKEJvb2wgZmFsc2UpXG4gICAgICAgIHwgNSAoKiBPUF9QT1AgKikgICAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgfCA2ICgqIE9QX0RVUCAqKSAgIC0+IHB1c2ggdm0gKHBlZWsgdm0pXG5cbiAgICAgICAgKCogLS0tLSBWYXJpYWJsZSBhY2Nlc3MgLS0tLSAqKVxuICAgICAgICB8IDE2ICgqIE9QX0xPQ0FMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWVcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICBsZXQgaWR4ID0gZnJhbWUuYmFzZSArIHNsb3QgaW5cbiAgICAgICAgICAgICAgaWYgaWR4ID49IHZtLnNwIHRoZW5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgIFwiVk06IExPQ0FMX0dFVCBzbG90PSVkIGJhc2U9JWQgc3A9JWQgb3V0IG9mIGJvdW5kc1wiIHNsb3QgZnJhbWUuYmFzZSB2bS5zcCkpO1xuICAgICAgICAgICAgICB2bS5zdGFjay4oaWR4KVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSB2XG4gICAgICAgIHwgMTcgKCogT1BfTE9DQUxfU0VUICopIC0+XG4gICAgICAgICAgbGV0IHNsb3QgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IHYgPSBwZWVrIHZtIGluXG4gICAgICAgICAgKCogV3JpdGUgdG8gc2hhcmVkIGNlbGwgaWYgY2FwdHVyZWQsIGVsc2UgdG8gc3RhY2sgKilcbiAgICAgICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBmcmFtZS5sb2NhbF9jZWxscyBzbG90IHdpdGhcbiAgICAgICAgICAgfCBTb21lIGNlbGwgLT4gY2VsbC51dl92YWx1ZSA8LSB2XG4gICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgIHwgMTggKCogT1BfVVBWQUxVRV9HRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgIGlmIGlkeCA+PSBBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcyB0aGVuXG4gICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgXCJWTTogVVBWQUxVRV9HRVQgaWR4PSVkIG91dCBvZiBib3VuZHMgKGhhdmUgJWQpXCIgaWR4XG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcykpKTtcbiAgICAgICAgICBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGlkeCkudXZfdmFsdWVcbiAgICAgICAgfCAxOSAoKiBPUF9VUFZBTFVFX1NFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgIHwgMjAgKCogT1BfR0xPQkFMX0dFVCAqKSAtPlxuICAgICAgICAgIGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggY29uc3RzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgIGxldCB2ID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICgqIFdhbGsgdGhlIGNsb3N1cmUgZW52IGNoYWluIGZvciBpbm5lciBmdW5jdGlvbnMgKilcbiAgICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgICBsZXQgcmVjIGVudl9sb29rdXAgZSA9XG4gICAgICAgICAgICAgIHRyeSBIYXNodGJsLmZpbmQgZS5iaW5kaW5ncyBpZFxuICAgICAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgIG1hdGNoIGUucGFyZW50IHdpdGggU29tZSBwIC0+IGVudl9sb29rdXAgcCB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZVxuICAgICAgICAgICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSlcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBlbnYgLT4gZW52X2xvb2t1cCBlbnZcbiAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICB0cnkgU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIG5hbWVcbiAgICAgICAgICAgICAgd2l0aCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICB8IDIxICgqIE9QX0dMT0JBTF9TRVQgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAoKiBXcml0ZSB0byBjbG9zdXJlIGVudiBpZiB0aGUgbmFtZSBleGlzdHMgdGhlcmUgKG11dGFibGUgY2xvc3VyZSB2YXJzKSAqKVxuICAgICAgICAgIGxldCB3cml0dGVuID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jbG9zdXJlX2VudiB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZW52IC0+XG4gICAgICAgICAgICAgIGxldCBpZCA9IFN4X3R5cGVzLmludGVybiBuYW1lIGluXG4gICAgICAgICAgICAgIGxldCByZWMgZmluZF9lbnYgZSA9XG4gICAgICAgICAgICAgICAgaWYgSGFzaHRibC5tZW0gZS5iaW5kaW5ncyBpZCB0aGVuXG4gICAgICAgICAgICAgICAgICAoSGFzaHRibC5yZXBsYWNlIGUuYmluZGluZ3MgaWQgKHBlZWsgdm0pOyB0cnVlKVxuICAgICAgICAgICAgICAgIGVsc2UgbWF0Y2ggZS5wYXJlbnQgd2l0aCBTb21lIHAgLT4gZmluZF9lbnYgcCB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICAgICAgaW4gZmluZF9lbnYgZW52XG4gICAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCB3cml0dGVuIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCB2ID0gcGVlayB2bSBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHZtLmdsb2JhbHMgbmFtZSB2O1xuICAgICAgICAgICAgKG1hdGNoICFTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIHdpdGggU29tZSBmIC0+IGYgbmFtZSB2IHwgTm9uZSAtPiAoKSlcbiAgICAgICAgICBlbmRcblxuICAgICAgICAoKiAtLS0tIENvbnRyb2wgZmxvdyAtLS0tICopXG4gICAgICAgIHwgMzIgKCogT1BfSlVNUCAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgIHwgMzMgKCogT1BfSlVNUF9JRl9GQUxTRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgbm90IChzeF90cnV0aHkgdikgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICB8IDM0ICgqIE9QX0pVTVBfSUZfVFJVRSAqKSAtPlxuICAgICAgICAgIGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuXG4gICAgICAgICgqIC0tLS0gRnVuY3Rpb24gY2FsbHMgLS0tLSAqKVxuICAgICAgICB8IDQ4ICgqIE9QX0NBTEwgKikgLT5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgIGxldCBmID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IGFyZ3NfbGlzdCA9IExpc3QucmV2IChBcnJheS50b19saXN0IGFyZ3MpIGluXG4gICAgICAgICAgdm1fY2FsbCB2bSBmIGFyZ3NfbGlzdFxuICAgICAgICAgICgqIExvb3AgY29udGludWVzIOKAlCBpZiBWbUNsb3N1cmUsIG5ldyBmcmFtZSBydW5zIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIHwgNDkgKCogT1BfVEFJTF9DQUxMICopIC0+XG4gICAgICAgICAgbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5pbml0IGFyZ2MgKGZ1biBfIC0+IHBvcCB2bSkgaW5cbiAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgIGxldCBhcmdzX2xpc3QgPSBMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSBpblxuICAgICAgICAgICgqIERyb3AgY3VycmVudCBmcmFtZSwgcmV1c2Ugc3RhY2sgc3BhY2Ug4oCUIHRydWUgVENPIGZvciBWbUNsb3N1cmUgKilcbiAgICAgICAgICB2bS5mcmFtZXMgPC0gcmVzdF9mcmFtZXM7XG4gICAgICAgICAgdm0uc3AgPC0gZnJhbWUuYmFzZTtcbiAgICAgICAgICB2bV9jYWxsIHZtIGYgYXJnc19saXN0XG4gICAgICAgIHwgNTAgKCogT1BfUkVUVVJOICopIC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHBvcCB2bSBpblxuICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lcztcbiAgICAgICAgICB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgIHB1c2ggdm0gcmVzdWx0XG4gICAgICAgICAgKCogTG9vcCBjb250aW51ZXMgd2l0aCBjYWxsZXIgZnJhbWUgKilcbiAgICAgICAgfCA1MSAoKiBPUF9DTE9TVVJFICopIC0+XG4gICAgICAgICAgbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgaWYgaWR4ID49IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlblxuICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiVk06IENMT1NVUkUgaWR4ICVkID49IGNvbnN0cyAlZFwiIGlkeCAoQXJyYXkubGVuZ3RoIGNvbnN0cykpKTtcbiAgICAgICAgICBsZXQgY29kZV92YWwgPSBjb25zdHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBjb2RlX3ZhbCBpblxuICAgICAgICAgICgqIFJlYWQgdXB2YWx1ZSBkZXNjcmlwdG9ycyBmcm9tIGJ5dGVjb2RlICopXG4gICAgICAgICAgbGV0IHV2X2NvdW50ID0gbWF0Y2ggY29kZV92YWwgd2l0aFxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gKG1hdGNoIEhhc2h0YmwuZmluZF9vcHQgZCBcInVwdmFsdWUtY291bnRcIiB3aXRoXG4gICAgICAgICAgICAgICAgfCBTb21lIChOdW1iZXIgbikgLT4gaW50X29mX2Zsb2F0IG4gfCBfIC0+IDApXG4gICAgICAgICAgICB8IF8gLT4gMFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgIGxldCBpc19sb2NhbCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICgqIENhcHR1cmUgZnJvbSBlbmNsb3NpbmcgZnJhbWUncyBsb2NhbCBzbG90LlxuICAgICAgICAgICAgICAgICBDcmVhdGUgYSBzaGFyZWQgY2VsbCDigJQgYm90aCBwYXJlbnQgYW5kIGNsb3N1cmVcbiAgICAgICAgICAgICAgICAgcmVhZC93cml0ZSB0aHJvdWdoIHRoaXMgY2VsbC4gKilcbiAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgZXhpc3RpbmcgLT4gZXhpc3RpbmcgICgqIHJldXNlIGV4aXN0aW5nIGNlbGwgKilcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBmcmFtZS5sb2NhbF9jZWxscyBpbmRleCBjO1xuICAgICAgICAgICAgICAgICAgY1xuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICBlbmQgZWxzZVxuICAgICAgICAgICAgICAoKiBDYXB0dXJlIGZyb20gZW5jbG9zaW5nIGZyYW1lJ3MgdXB2YWx1ZSDigJQgYWxyZWFkeSBhIHNoYXJlZCBjZWxsICopXG4gICAgICAgICAgICAgIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICkgaW5cbiAgICAgICAgICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IHVwdmFsdWVzOyB2bV9uYW1lID0gTm9uZTtcbiAgICAgICAgICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSB2bS5nbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IGZyYW1lLmNsb3N1cmUudm1fY2xvc3VyZV9lbnYgfSBpblxuICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjbClcbiAgICAgICAgfCA1MiAoKiBPUF9DQUxMX1BSSU0gKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgYXJncyA9IExpc3QuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIHw+IExpc3QucmV2IGluXG4gICAgICAgICAgKCogUmVzb2x2ZSB0aHVua3Mg4oCUIHRoZSBDRUsgZXZhbHVhdG9yIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAgICAgdmlhIHRyYW1wb2xpbmUsIGJ1dCB0aGUgVk0gbXVzdCBkbyBpdCBleHBsaWNpdGx5IGJlZm9yZVxuICAgICAgICAgICAgIHBhc3NpbmcgYXJncyB0byBwcmltaXRpdmVzLiAqKVxuICAgICAgICAgIGxldCBhcmdzID0gTGlzdC5tYXAgKGZ1biB2IC0+XG4gICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgVGh1bmsgXyAtPiAhU3hfcHJpbWl0aXZlcy5fc3hfdHJhbXBvbGluZV9mbiB2XG4gICAgICAgICAgICB8IF8gLT4gdikgYXJncyBpblxuICAgICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICgqIENoZWNrIHByaW1pdGl2ZXMgRklSU1QgKG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb2YgbWFwL2ZpbHRlci9ldGMuKSxcbiAgICAgICAgICAgICAgICAgdGhlbiBnbG9iYWxzICh3aGljaCBtYXkgaGF2ZSBob192aWFfY2VrIHdyYXBwZXJzIHRoYXQgcm91dGVcbiAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgQ0VLIOKAlCB0aGVzZSBjYW4ndCBjYWxsIFZNIGNsb3N1cmVzKS4gKilcbiAgICAgICAgICAgICAgbGV0IGZuX3ZhbCA9IHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZSB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgICB0cnkgSGFzaHRibC5maW5kIHZtLmdsb2JhbHMgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFwiVk06IHVua25vd24gcHJpbWl0aXZlIFwiIF4gbmFtZSkpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIChtYXRjaCBmbl92YWwgd2l0aFxuICAgICAgICAgICAgICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3NcbiAgICAgICAgICAgICAgIHwgVm1DbG9zdXJlIF8gfCBMYW1iZGEgXyB8IENvbXBvbmVudCBfIHwgSXNsYW5kIF8gLT5cbiAgICAgICAgICAgICAgICAgU3hfcmVmLmNla19jYWxsIGZuX3ZhbCAoTGlzdCBhcmdzKVxuICAgICAgICAgICAgICAgfCBfIC0+IE5pbClcbiAgICAgICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgICAgcmFpc2UgKEV2YWxfZXJyb3IgKFByaW50Zi5zcHJpbnRmIFwiJXMgKGluIENBTExfUFJJTSBcXFwiJXNcXFwiIHdpdGggJWQgYXJncylcIlxuICAgICAgICAgICAgICAgIG1zZyBuYW1lIGFyZ2MpKVxuICAgICAgICAgIGluXG4gICAgICAgICAgcHVzaCB2bSByZXN1bHRcblxuICAgICAgICAoKiAtLS0tIENvbGxlY3Rpb25zIC0tLS0gKilcbiAgICAgICAgfCA2NCAoKiBPUF9MSVNUICopIC0+XG4gICAgICAgICAgbGV0IGNvdW50ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICBwdXNoIHZtIChMaXN0IGl0ZW1zKVxuICAgICAgICB8IDY1ICgqIE9QX0RJQ1QgKikgLT5cbiAgICAgICAgICBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgY291bnQgaW5cbiAgICAgICAgICBmb3IgXyA9IDEgdG8gY291bnQgZG9cbiAgICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBsZXQgayA9IHBvcCB2bSBpblxuICAgICAgICAgICAgbGV0IGtleSA9IG1hdGNoIGsgd2l0aCBTdHJpbmcgcyAtPiBzIHwgS2V5d29yZCBzIC0+IHMgfCBfIC0+IFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIGsgaW5cbiAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIGtleSB2XG4gICAgICAgICAgZG9uZTtcbiAgICAgICAgICBwdXNoIHZtIChEaWN0IGQpXG5cbiAgICAgICAgKCogLS0tLSBTdHJpbmcgb3BzIC0tLS0gKilcbiAgICAgICAgfCAxNDQgKCogT1BfU1RSX0NPTkNBVCAqKSAtPlxuICAgICAgICAgIGxldCBjb3VudCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICBsZXQgcGFydHMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgU3hfcnVudGltZS52YWx1ZV90b19zdHIgcGFydHMpIGluXG4gICAgICAgICAgcHVzaCB2bSAoU3RyaW5nIHMpXG5cbiAgICAgICAgKCogLS0tLSBEZWZpbmUgLS0tLSAqKVxuICAgICAgICB8IDEyOCAoKiBPUF9ERUZJTkUgKikgLT5cbiAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIHY7XG4gICAgICAgICAgKG1hdGNoICFTeF90eXBlcy5fdm1fZ2xvYmFsX3NldF9ob29rIHdpdGhcbiAgICAgICAgICAgfCBTb21lIGYgLT4gZiBuYW1lIHYgfCBOb25lIC0+ICgpKVxuXG4gICAgICAgICgqIC0tLS0gSW5saW5lIHByaW1pdGl2ZXMgLS0tLVxuICAgICAgICAgICBGYXN0IHBhdGggZm9yIGNvbW1vbiB0eXBlczsgZmFsbGJhY2sgdG8gYWN0dWFsIHByaW1pdGl2ZVxuICAgICAgICAgICBmb3IgZWRnZSBjYXNlcyAodHlwZSBjb2VyY2lvbiwgdGh1bmtzLCBSYXdIVE1MLCBldGMuKVxuICAgICAgICAgICB0byBndWFyYW50ZWUgYmVoYXZpb3JhbCBwYXJpdHkgd2l0aCBDQUxMX1BSSU0uICopXG4gICAgICAgIHwgMTYwICgqIE9QX0FERCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggKy4geSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIitcIikgW2E7IGJdKVxuICAgICAgICB8IDE2MSAoKiBPUF9TVUIgKikgLT5cbiAgICAgICAgICBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC0uIHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCItXCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjIgKCogT1BfTVVMICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IE51bWJlciAoeCAqLiB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiKlwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTYzICgqIE9QX0RJViAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBOdW1iZXIgKHggLy4geSlcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi9cIikgW2E7IGJdKVxuICAgICAgICB8IDE2NCAoKiBPUF9FUSAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgbGV0IHJlYyBub3JtID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IExpc3QgKExpc3QubWFwIG5vcm0gbClcbiAgICAgICAgICAgIHwgTGlzdCBsIC0+IExpc3QgKExpc3QubWFwIG5vcm0gbCkgfCB2IC0+IHYgaW5cbiAgICAgICAgICBwdXNoIHZtIChCb29sIChub3JtIGEgPSBub3JtIGIpKVxuICAgICAgICB8IDE2NSAoKiBPUF9MVCAqKSAtPlxuICAgICAgICAgIGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoXG4gICAgICAgICAgICB8IE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4IDwgeSlcbiAgICAgICAgICAgIHwgU3RyaW5nIHgsIFN0cmluZyB5IC0+IEJvb2wgKHggPCB5KVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiPFwiKSBbYTsgYl0pXG4gICAgICAgIHwgMTY2ICgqIE9QX0dUICopIC0+XG4gICAgICAgICAgbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPiB5KVxuICAgICAgICAgICAgfCBTdHJpbmcgeCwgU3RyaW5nIHkgLT4gQm9vbCAoeCA+IHkpXG4gICAgICAgICAgICB8IF8gLT4gKEhhc2h0YmwuZmluZCBTeF9wcmltaXRpdmVzLnByaW1pdGl2ZXMgXCI+XCIpIFthOyBiXSlcbiAgICAgICAgfCAxNjcgKCogT1BfTk9UICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChCb29sIChub3QgKHN4X3RydXRoeSB2KSkpXG4gICAgICAgIHwgMTY4ICgqIE9QX0xFTiAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBOdW1iZXIgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbCkpXG4gICAgICAgICAgICB8IFN0cmluZyBzIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgICAgICAgICAgfCBEaWN0IGQgLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKEhhc2h0YmwubGVuZ3RoIGQpKVxuICAgICAgICAgICAgfCBOaWwgLT4gTnVtYmVyIDAuMFxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwibGVuXCIpIFt2XSlcbiAgICAgICAgfCAxNjkgKCogT1BfRklSU1QgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBMaXN0ICh4IDo6IF8pIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0geCA6OiBfIH0gLT4geFxuICAgICAgICAgICAgfCBMaXN0IFtdIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gW10gfSB8IE5pbCAtPiBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImZpcnN0XCIpIFt2XSlcbiAgICAgICAgfCAxNzAgKCogT1BfUkVTVCAqKSAtPlxuICAgICAgICAgIGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoXG4gICAgICAgICAgICB8IExpc3QgKF8gOjogeHMpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gXyA6OiB4cyB9IC0+IExpc3QgeHNcbiAgICAgICAgICAgIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gfCBOaWwgLT4gTGlzdCBbXVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwicmVzdFwiKSBbdl0pXG4gICAgICAgIHwgMTcxICgqIE9QX05USCAqKSAtPlxuICAgICAgICAgIGxldCBuID0gcG9wIHZtIGFuZCBjb2xsID0gcG9wIHZtIGluXG4gICAgICAgICAgcHVzaCB2bSAobWF0Y2ggY29sbCwgbiB3aXRoXG4gICAgICAgICAgICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICAodHJ5IExpc3QubnRoIGwgKGludF9vZl9mbG9hdCBmKSB3aXRoIF8gLT4gTmlsKVxuICAgICAgICAgICAgfCBTdHJpbmcgcywgTnVtYmVyIGYgLT5cbiAgICAgICAgICAgICAgbGV0IGkgPSBpbnRfb2ZfZmxvYXQgZiBpblxuICAgICAgICAgICAgICBpZiBpID49IDAgJiYgaSA8IFN0cmluZy5sZW5ndGggcyB0aGVuIFN0cmluZyAoU3RyaW5nLm1ha2UgMSBzLltpXSlcbiAgICAgICAgICAgICAgZWxzZSBOaWxcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIm50aFwiKSBbY29sbDsgbl0pXG4gICAgICAgIHwgMTcyICgqIE9QX0NPTlMgKikgLT5cbiAgICAgICAgICBsZXQgY29sbCA9IHBvcCB2bSBhbmQgeCA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwgd2l0aFxuICAgICAgICAgICAgfCBMaXN0IGwgLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gTGlzdCAoeCA6OiBsKVxuICAgICAgICAgICAgfCBOaWwgLT4gTGlzdCBbeF1cbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImNvbnNcIikgW3g7IGNvbGxdKVxuICAgICAgICB8IDE3MyAoKiBPUF9ORUcgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKC0ueClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcIi1cIikgW3ZdKVxuICAgICAgICB8IDE3NCAoKiBPUF9JTkMgKikgLT5cbiAgICAgICAgICBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgfCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggKy4gMS4wKVxuICAgICAgICAgICAgfCBfIC0+IChIYXNodGJsLmZpbmQgU3hfcHJpbWl0aXZlcy5wcmltaXRpdmVzIFwiaW5jXCIpIFt2XSlcbiAgICAgICAgfCAxNzUgKCogT1BfREVDICopIC0+XG4gICAgICAgICAgbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgIHwgTnVtYmVyIHggLT4gTnVtYmVyICh4IC0uIDEuMClcbiAgICAgICAgICAgIHwgXyAtPiAoSGFzaHRibC5maW5kIFN4X3ByaW1pdGl2ZXMucHJpbWl0aXZlcyBcImRlY1wiKSBbdl0pXG5cbiAgICAgICAgfCBvcGNvZGUgLT5cbiAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJWTTogdW5rbm93biBvcGNvZGUgJWQgYXQgaXA9JWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZSAoZnJhbWUuaXAgLSAxKSkpXG4gICAgICAgIHdpdGggSW52YWxpZF9hcmd1bWVudCBtc2cgLT5cbiAgICAgICAgICBsZXQgZm5fbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fbmFtZSB3aXRoIFNvbWUgbiAtPiBuIHwgTm9uZSAtPiBcIj9cIiBpblxuICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgXCJWTTogJXMgYXQgaXA9JWQgb3A9JWQgaW4gJXMgKGJhc2U9JWQgc3A9JWQgYmNfbGVuPSVkIGNvbnN0cz0lZClcIlxuICAgICAgICAgICAgbXNnIHNhdmVkX2lwIG9wIGZuX25hbWUgZnJhbWUuYmFzZSB2bS5zcFxuICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBiYykgKEFycmF5Lmxlbmd0aCBjb25zdHMpKSkpXG4gICAgICBlbmRcbiAgZG9uZVxuXG4oKiogRXhlY3V0ZSBhIGNvbXBpbGVkIG1vZHVsZSAodG9wLWxldmVsIGJ5dGVjb2RlKS4gKilcbmxldCBleGVjdXRlX21vZHVsZSBjb2RlIGdsb2JhbHMgPVxuICBsZXQgY2wgPSB7IHZtX2NvZGUgPSBjb2RlOyB2bV91cHZhbHVlcyA9IFt8fF07IHZtX25hbWUgPSBTb21lIFwibW9kdWxlXCI7IHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUgPSB7IGNsb3N1cmUgPSBjbDsgaXAgPSAwOyBiYXNlID0gMDsgbG9jYWxfY2VsbHMgPSBIYXNodGJsLmNyZWF0ZSA0IH0gaW5cbiAgZm9yIF8gPSAwIHRvIGNvZGUudmNfbG9jYWxzIC0gMSBkbyBwdXNoIHZtIE5pbCBkb25lO1xuICB2bS5mcmFtZXMgPC0gW2ZyYW1lXTtcbiAgcnVuIHZtO1xuICBwb3Agdm1cblxuXG4oKiogezEgTGF6eSBKSVQgY29tcGlsYXRpb259ICopXG5cbigqKiBDb21waWxlIGEgbGFtYmRhIG9yIGNvbXBvbmVudCBib2R5IHRvIGJ5dGVjb2RlIHVzaW5nIHRoZSBTWCBjb21waWxlci5cbiAgICBJbnZva2VzIFtjb21waWxlXSBmcm9tIHNwZWMvY29tcGlsZXIuc3ggdmlhIHRoZSBDRUsgbWFjaGluZS5cbiAgICBSZXR1cm5zIGEgW3ZtX2Nsb3N1cmVdIHJlYWR5IGZvciBleGVjdXRpb24sIG9yIFtOb25lXSBvbiBmYWlsdXJlXG4gICAgKHNhZmUgZmFsbGJhY2sgdG8gQ0VLIGludGVycHJldGF0aW9uKS5cblxuICAgIFRoZSBjb21waWxhdGlvbiBjb3N0IGlzIGEgc2luZ2xlIENFSyBldmFsdWF0aW9uIG9mIHRoZSBjb21waWxlciDigJRcbiAgICBtaWNyb3NlY29uZHMgcGVyIGZ1bmN0aW9uLiBUaGUgcmVzdWx0IGlzIGNhY2hlZCBpbiB0aGUgbGFtYmRhL2NvbXBvbmVudFxuICAgIHJlY29yZCBzbyBzdWJzZXF1ZW50IGNhbGxzIGdvIHN0cmFpZ2h0IHRvIHRoZSBWTS4gKilcbmxldCBqaXRfY29tcGlsZV9sYW1iZGEgKGwgOiBsYW1iZGEpIGdsb2JhbHMgPVxuICBsZXQgZm5fbmFtZSA9IG1hdGNoIGwubF9uYW1lIHdpdGggU29tZSBuIC0+IG4gfCBOb25lIC0+IFwiPGFub24+XCIgaW5cbiAgdHJ5XG4gICAgbGV0IGNvbXBpbGVfZm4gPSB0cnkgSGFzaHRibC5maW5kIGdsb2JhbHMgXCJjb21waWxlXCJcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiSklUOiBjb21waWxlciBub3QgbG9hZGVkXCIpIGluXG4gICAgKCogUmVjb25zdHJ1Y3QgdGhlIChmbiAocGFyYW1zKSBib2R5KSBmb3JtIHNvIHRoZSBjb21waWxlciBwcm9kdWNlc1xuICAgICAgIGEgcHJvcGVyIGNsb3N1cmUuIGwubF9ib2R5IGlzIHRoZSBpbm5lciBib2R5OyB3ZSBuZWVkIHRoZSBmdWxsXG4gICAgICAgZnVuY3Rpb24gZm9ybSB3aXRoIHBhcmFtcyBzbyB0aGUgY29tcGlsZWQgY29kZSBiaW5kcyB0aGVtLiAqKVxuICAgIGxldCBwYXJhbV9zeW1zID0gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN5bWJvbCBzKSBsLmxfcGFyYW1zKSBpblxuICAgIGxldCBmbl9leHByID0gTGlzdCBbU3ltYm9sIFwiZm5cIjsgcGFyYW1fc3ltczsgbC5sX2JvZHldIGluXG4gICAgbGV0IHF1b3RlZCA9IExpc3QgW1N5bWJvbCBcInF1b3RlXCI7IGZuX2V4cHJdIGluXG4gICAgKCogVXNlIFN5bWJvbCBcImNvbXBpbGVcIiBzbyB0aGUgQ0VLIHJlc29sdmVzIGl0IGZyb20gdGhlIGVudiwgbm90XG4gICAgICAgYW4gZW1iZWRkZWQgVm1DbG9zdXJlIHZhbHVlIOKAlCB0aGUgQ0VLIGRpc3BhdGNoZXMgVm1DbG9zdXJlIGNhbGxzXG4gICAgICAgZGlmZmVyZW50bHkgd2hlbiB0aGUgdmFsdWUgaXMgcmVzb2x2ZWQgZnJvbSBlbnYgdnMgZW1iZWRkZWQgaW4gQVNULiAqKVxuICAgIGlnbm9yZSBjb21waWxlX2ZuO1xuICAgIGxldCBjb21waWxlX2VudiA9IFN4X3R5cGVzLmVudl9leHRlbmQgKFN4X3R5cGVzLm1ha2VfZW52ICgpKSBpblxuICAgIEhhc2h0YmwuaXRlciAoZnVuIGsgdiAtPiBIYXNodGJsLnJlcGxhY2UgY29tcGlsZV9lbnYuYmluZGluZ3MgKFN4X3R5cGVzLmludGVybiBrKSB2KSBnbG9iYWxzO1xuICAgIGxldCByZXN1bHQgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtTeW1ib2wgXCJjb21waWxlXCI7IHF1b3RlZF0pIChFbnYgY29tcGlsZV9lbnYpIGluXG4gICAgKCogQ2xvc3VyZSB2YXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSB2bV9jbG9zdXJlX2VudiAoc2V0IG9uIHRoZSBWbUNsb3N1cmVcbiAgICAgICBhdCBsaW5lIH42MTcpLiBPUF9HTE9CQUxfR0VUIGZhbGxzIGJhY2sgdG8gdm1fY2xvc3VyZV9lbnYgd2hlbiB2YXJzXG4gICAgICAgYXJlbid0IGluIGdsb2JhbHMuIE5vIGluamVjdGlvbiBpbnRvIHRoZSBzaGFyZWQgZ2xvYmFscyB0YWJsZSDigJRcbiAgICAgICB0aGF0IHdvdWxkIGJyZWFrIGNsb3N1cmUgaXNvbGF0aW9uIGZvciBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlXG4gICAgICAgbWFrZS1wYWdlLWZuIHdoZXJlIG11bHRpcGxlIGNsb3N1cmVzIGNhcHR1cmUgZGlmZmVyZW50IHZhbHVlc1xuICAgICAgIGZvciB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lcy4gKilcbiAgICBsZXQgZWZmZWN0aXZlX2dsb2JhbHMgPSBnbG9iYWxzIGluXG4gICAgKG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgfCBEaWN0IGQgd2hlbiBIYXNodGJsLm1lbSBkIFwiYnl0ZWNvZGVcIiAtPlxuICAgICAgbGV0IG91dGVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgcmVzdWx0IGluXG4gICAgICBsZXQgYmMgPSBvdXRlcl9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggYmMgPj0gNCAmJiBiYy4oMCkgPSA1MSAoKiBPUF9DTE9TVVJFICopIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGlkeCA9IGJjLigxKSBsb3IgKGJjLigyKSBsc2wgOCkgaW5cbiAgICAgICAgaWYgaWR4IDwgQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzIHRoZW5cbiAgICAgICAgICBsZXQgaW5uZXJfdmFsID0gb3V0ZXJfY29kZS52Y19jb25zdGFudHMuKGlkeCkgaW5cbiAgICAgICAgICBsZXQgY29kZSA9IGNvZGVfZnJvbV92YWx1ZSBpbm5lcl92YWwgaW5cbiAgICAgICAgICBTb21lIHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTtcbiAgICAgICAgICAgICAgICAgdm1fbmFtZSA9IGwubF9uYW1lOyB2bV9lbnZfcmVmID0gZWZmZWN0aXZlX2dsb2JhbHM7IHZtX2Nsb3N1cmVfZW52ID0gU29tZSBsLmxfY2xvc3VyZSB9XG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6IGNsb3N1cmUgaW5kZXggJWQgb3V0IG9mIGJvdW5kcyAocG9vbD0lZClcXG4lIVwiXG4gICAgICAgICAgICBmbl9uYW1lIGlkeCAoQXJyYXkubGVuZ3RoIG91dGVyX2NvZGUudmNfY29uc3RhbnRzKTtcblxuICAgICAgICAgIE5vbmVcbiAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAoKiBOb3QgYSBjbG9zdXJlIOKAlCBjb25zdGFudCBleHByZXNzaW9uLCBhbGlhcywgb3Igc2ltcGxlIGNvbXB1dGF0aW9uLlxuICAgICAgICAgICBFeGVjdXRlIHRoZSBieXRlY29kZSBhcyBhIG1vZHVsZSB0byBnZXQgdGhlIHZhbHVlLCB0aGVuIHdyYXBcbiAgICAgICAgICAgYXMgYSBOYXRpdmVGbiBpZiBpdCdzIGNhbGxhYmxlIChzbyB0aGUgQ0VLIGNhbiBkaXNwYXRjaCB0byBpdCkuICopXG4gICAgICAgICh0cnlcbiAgICAgICAgICBsZXQgdmFsdWUgPSBleGVjdXRlX21vZHVsZSBvdXRlcl9jb2RlIGdsb2JhbHMgaW5cbiAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIFJFU09MVkVEICVzOiAlcyAoYmNbMF09JWQpXFxuJSFcIlxuICAgICAgICAgICAgZm5fbmFtZSAodHlwZV9vZiB2YWx1ZSkgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSk7XG4gICAgICAgICAgKCogSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGEgTmF0aXZlRm4sIHdlIGNhbid0IHdyYXAgaXQgYXMgYVxuICAgICAgICAgICAgIHZtX2Nsb3N1cmUg4oCUIGp1c3QgbGV0IHRoZSBDRUsgaGFuZGxlIGl0IGRpcmVjdGx5LiBSZXR1cm4gTm9uZVxuICAgICAgICAgICAgIHNvIHRoZSBsYW1iZGEgZmFsbHMgdGhyb3VnaCB0byBDRUssIHdoaWNoIHdpbGwgZmluZCB0aGVcbiAgICAgICAgICAgICByZXNvbHZlZCB2YWx1ZSBpbiB0aGUgZW52IG9uIG5leHQgbG9va3VwLiAqKVxuICAgICAgICAgIE5vbmVcbiAgICAgICAgd2l0aCBfIC0+XG4gICAgICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBTS0lQICVzOiBub24tY2xvc3VyZSBleGVjdXRpb24gZmFpbGVkIChiY1swXT0lZCwgbGVuPSVkKVxcbiUhXCJcbiAgICAgICAgICAgIGZuX25hbWUgKGlmIEFycmF5Lmxlbmd0aCBiYyA+IDAgdGhlbiBiYy4oMCkgZWxzZSAtMSkgKEFycmF5Lmxlbmd0aCBiYyk7XG4gICAgICAgICAgTm9uZSlcbiAgICAgIGVuZFxuICAgIHwgXyAtPlxuICAgICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiBjb21waWxlciByZXR1cm5lZCAlc1xcbiUhXCIgZm5fbmFtZSAodHlwZV9vZiByZXN1bHQpO1xuICAgICAgTm9uZSlcbiAgd2l0aCBlIC0+XG4gICAgUHJpbnRmLmVwcmludGYgXCJbaml0XSBGQUlMICVzOiAlc1xcbiUhXCIgZm5fbmFtZSAoUHJpbnRleGMudG9fc3RyaW5nIGUpO1xuICAgIE5vbmVcblxuKCogV2lyZSB1cCBmb3J3YXJkIHJlZmVyZW5jZXMgKilcbmxldCAoKSA9IGppdF9jb21waWxlX3JlZiA6PSBqaXRfY29tcGlsZV9sYW1iZGFcbmxldCAoKSA9IF92bV9jYWxsX2Nsb3N1cmVfcmVmIDo9IChmdW4gY2wgYXJncyAtPiBjYWxsX2Nsb3N1cmUgY2wgYXJncyBjbC52bV9lbnZfcmVmKVxuXG5cbigqKiB7MSBEZWJ1Z2dpbmcgLyBpbnRyb3NwZWN0aW9ufSAqKVxuXG4oKiogTWFwIG9wY29kZSBpbnRlZ2VyIHRvIGh1bWFuLXJlYWRhYmxlIG5hbWUuICopXG5sZXQgb3Bjb2RlX25hbWUgPSBmdW5jdGlvblxuICB8IDEgLT4gXCJDT05TVFwiIHwgMiAtPiBcIk5JTFwiIHwgMyAtPiBcIlRSVUVcIiB8IDQgLT4gXCJGQUxTRVwiXG4gIHwgNSAtPiBcIlBPUFwiIHwgNiAtPiBcIkRVUFwiXG4gIHwgMTYgLT4gXCJMT0NBTF9HRVRcIiB8IDE3IC0+IFwiTE9DQUxfU0VUXCJcbiAgfCAxOCAtPiBcIlVQVkFMVUVfR0VUXCIgfCAxOSAtPiBcIlVQVkFMVUVfU0VUXCJcbiAgfCAyMCAtPiBcIkdMT0JBTF9HRVRcIiB8IDIxIC0+IFwiR0xPQkFMX1NFVFwiXG4gIHwgMzIgLT4gXCJKVU1QXCIgfCAzMyAtPiBcIkpVTVBfSUZfRkFMU0VcIiB8IDM0IC0+IFwiSlVNUF9JRl9UUlVFXCJcbiAgfCA0OCAtPiBcIkNBTExcIiB8IDQ5IC0+IFwiVEFJTF9DQUxMXCIgfCA1MCAtPiBcIlJFVFVSTlwiXG4gIHwgNTEgLT4gXCJDTE9TVVJFXCIgfCA1MiAtPiBcIkNBTExfUFJJTVwiXG4gIHwgNjQgLT4gXCJMSVNUXCIgfCA2NSAtPiBcIkRJQ1RcIlxuICB8IDEyOCAtPiBcIkRFRklORVwiXG4gIHwgMTQ0IC0+IFwiU1RSX0NPTkNBVFwiXG4gIHwgMTYwIC0+IFwiQUREXCIgfCAxNjEgLT4gXCJTVUJcIiB8IDE2MiAtPiBcIk1VTFwiIHwgMTYzIC0+IFwiRElWXCJcbiAgfCAxNjQgLT4gXCJFUVwiIHwgMTY1IC0+IFwiTFRcIiB8IDE2NiAtPiBcIkdUXCIgfCAxNjcgLT4gXCJOT1RcIlxuICB8IDE2OCAtPiBcIkxFTlwiIHwgMTY5IC0+IFwiRklSU1RcIiB8IDE3MCAtPiBcIlJFU1RcIiB8IDE3MSAtPiBcIk5USFwiXG4gIHwgMTcyIC0+IFwiQ09OU1wiIHwgMTczIC0+IFwiTkVHXCIgfCAxNzQgLT4gXCJJTkNcIiB8IDE3NSAtPiBcIkRFQ1wiXG4gIHwgbiAtPiBQcmludGYuc3ByaW50ZiBcIlVOS05PV05fJWRcIiBuXG5cbigqKiBOdW1iZXIgb2YgZXh0cmEgb3BlcmFuZCBieXRlcyBjb25zdW1lZCBieSBlYWNoIG9wY29kZS5cbiAgICBSZXR1cm5zIChmb3JtYXQsIHRvdGFsX2J5dGVzKSB3aGVyZSBmb3JtYXQgZGVzY3JpYmVzIHRoZSBvcGVyYW5kIHR5cGVzLiAqKVxubGV0IG9wY29kZV9vcGVyYW5kX3NpemUgPSBmdW5jdGlvblxuICB8IDEgKCogQ09OU1QgKikgfCAyMCAoKiBHTE9CQUxfR0VUICopIHwgMjEgKCogR0xPQkFMX1NFVCAqKVxuICB8IDY0ICgqIExJU1QgKikgfCA2NSAoKiBESUNUICopIHwgMTI4ICgqIERFRklORSAqKSAtPiAyICAoKiB1MTYgKilcbiAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgfCAxOCAoKiBVUFZBTFVFX0dFVCAqKSB8IDE5ICgqIFVQVkFMVUVfU0VUICopXG4gIHwgNDggKCogQ0FMTCAqKSB8IDQ5ICgqIFRBSUxfQ0FMTCAqKVxuICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+IDEgICgqIHU4ICopXG4gIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKikgLT4gMiAgKCogaTE2ICopXG4gIHwgNTEgKCogQ0xPU1VSRSAqKSAtPiAyICAoKiB1MTYgZm9yIGNvbnN0YW50IGluZGV4OyB1cHZhbHVlIGRlc2NyaXB0b3JzIGZvbGxvdyBkeW5hbWljYWxseSAqKVxuICB8IDUyICgqIENBTExfUFJJTSAqKSAtPiAzICAoKiB1MTYgKyB1OCAqKVxuICB8IF8gLT4gMCAgKCogbm8gb3BlcmFuZCAqKVxuXG4oKiogVHJhY2UgYSBzaW5nbGUgZXhlY3V0aW9uIOKAlCBjb21waWxlICsgcnVuLCBjb2xsZWN0aW5nIHRyYWNlIGVudHJpZXMuXG4gICAgRWFjaCBlbnRyeSBpcyBhIGRpY3Qgd2l0aCA6b3Bjb2RlLCA6c3RhY2ssIDpkZXB0aC4gKilcbmxldCB0cmFjZV9ydW4gc3JjIGdsb2JhbHMgPVxuICAoKiBDb21waWxlICopXG4gIGxldCBjb21waWxlX2ZuID0gdHJ5IEhhc2h0YmwuZmluZCBnbG9iYWxzIFwiY29tcGlsZVwiXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJ0cmFjZTogY29tcGlsZXIgbm90IGxvYWRlZFwiKSBpblxuICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGggW2VdIC0+IGUgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpIGluXG4gIGxldCBxdW90ZWQgPSBMaXN0IFtTeW1ib2wgXCJxdW90ZVwiOyBleHByXSBpblxuICBsZXQgY29kZV92YWwgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IFtjb21waWxlX2ZuOyBxdW90ZWRdKSAoRW52IChtYWtlX2VudiAoKSkpIGluXG4gIGxldCBjb2RlID0gY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gIGxldCBjbCA9IHsgdm1fY29kZSA9IGNvZGU7IHZtX3VwdmFsdWVzID0gW3x8XTsgdm1fbmFtZSA9IFNvbWUgXCJ0cmFjZVwiO1xuICAgICAgICAgICAgIHZtX2Vudl9yZWYgPSBnbG9iYWxzOyB2bV9jbG9zdXJlX2VudiA9IE5vbmUgfSBpblxuICBsZXQgdm0gPSBjcmVhdGUgZ2xvYmFscyBpblxuICBsZXQgZnJhbWUwID0geyBjbG9zdXJlID0gY2w7IGlwID0gMDsgYmFzZSA9IDA7IGxvY2FsX2NlbGxzID0gSGFzaHRibC5jcmVhdGUgNCB9IGluXG4gIGZvciBfID0gMCB0byBjb2RlLnZjX2xvY2FscyAtIDEgZG8gcHVzaCB2bSBOaWwgZG9uZTtcbiAgdm0uZnJhbWVzIDwtIFtmcmFtZTBdO1xuICAoKiBSdW4gd2l0aCB0cmFjaW5nICopXG4gIGxldCB0cmFjZSA9IHJlZiBbXSBpblxuICBsZXQgbWF4X3N0ZXBzID0gMTAwMDAgaW5cbiAgbGV0IHN0ZXBzID0gcmVmIDAgaW5cbiAgKHRyeVxuICAgIHdoaWxlIHZtLmZyYW1lcyA8PiBbXSAmJiAhc3RlcHMgPCBtYXhfc3RlcHMgZG9cbiAgICAgIG1hdGNoIHZtLmZyYW1lcyB3aXRoXG4gICAgICB8IFtdIC0+ICgpXG4gICAgICB8IGZyYW1lIDo6IF8gLT5cbiAgICAgICAgbGV0IGJjID0gZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2J5dGVjb2RlIGluXG4gICAgICAgIGlmIGZyYW1lLmlwID49IEFycmF5Lmxlbmd0aCBiYyB0aGVuXG4gICAgICAgICAgdm0uZnJhbWVzIDwtIFtdXG4gICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgb3AgPSBiYy4oZnJhbWUuaXApIGluXG4gICAgICAgICAgKCogU25hcHNob3Qgc3RhY2sgdG9wIDUgKilcbiAgICAgICAgICBsZXQgc3RhY2tfc25hcCA9IExpc3QuaW5pdCAobWluIDUgdm0uc3ApIChmdW4gaSAtPlxuICAgICAgICAgICAgbGV0IHYgPSB2bS5zdGFjay4odm0uc3AgLSAxIC0gaSkgaW5cbiAgICAgICAgICAgIFN0cmluZyAoU3hfdHlwZXMuaW5zcGVjdCB2KSkgaW5cbiAgICAgICAgICBsZXQgZW50cnkgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGVudHJ5IFwib3Bjb2RlXCIgKFN0cmluZyAob3Bjb2RlX25hbWUgb3ApKTtcbiAgICAgICAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJzdGFja1wiIChMaXN0IHN0YWNrX3NuYXApO1xuICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcImRlcHRoXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IChMaXN0Lmxlbmd0aCB2bS5mcmFtZXMpKSk7XG4gICAgICAgICAgdHJhY2UgOj0gRGljdCBlbnRyeSA6OiAhdHJhY2U7XG4gICAgICAgICAgaW5jciBzdGVwcztcbiAgICAgICAgICAoKiBFeGVjdXRlIG9uZSBzdGVwIOKAlCB1c2UgdGhlIG1haW4gcnVuIGxvb3AgZm9yIDEgc3RlcC5cbiAgICAgICAgICAgICBXZSBkbyB0aGlzIGJ5IHNhdmluZyB0aGUgc3RhdGUgYW5kIHJ1bm5pbmcgdGhlIG9yaWdpbmFsIGRpc3BhdGNoLiAqKVxuICAgICAgICAgIGxldCBzYXZlZF9pcCA9IGZyYW1lLmlwIGluXG4gICAgICAgICAgZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyAxO1xuICAgICAgICAgIGxldCByZXN0X2ZyYW1lcyA9IExpc3QudGwgdm0uZnJhbWVzIGluXG4gICAgICAgICAgKHRyeSBtYXRjaCBvcCB3aXRoXG4gICAgICAgICAgfCAxIC0+IGxldCBpZHggPSByZWFkX3UxNiBmcmFtZSBpbiBwdXNoIHZtIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeClcbiAgICAgICAgICB8IDIgLT4gcHVzaCB2bSBOaWxcbiAgICAgICAgICB8IDMgLT4gcHVzaCB2bSAoQm9vbCB0cnVlKVxuICAgICAgICAgIHwgNCAtPiBwdXNoIHZtIChCb29sIGZhbHNlKVxuICAgICAgICAgIHwgNSAtPiBpZ25vcmUgKHBvcCB2bSlcbiAgICAgICAgICB8IDYgLT4gcHVzaCB2bSAocGVlayB2bSlcbiAgICAgICAgICB8IDE2IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IHYgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgY2VsbCAtPiBjZWxsLnV2X3ZhbHVlXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIGluXG4gICAgICAgICAgICBwdXNoIHZtIHZcbiAgICAgICAgICB8IDE3IC0+IGxldCBzbG90ID0gcmVhZF91OCBmcmFtZSBpbiBsZXQgdiA9IHBlZWsgdm0gaW5cbiAgICAgICAgICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIHNsb3Qgd2l0aFxuICAgICAgICAgICAgIHwgU29tZSBjZWxsIC0+IGNlbGwudXZfdmFsdWUgPC0gdlxuICAgICAgICAgICAgIHwgTm9uZSAtPiB2bS5zdGFjay4oZnJhbWUuYmFzZSArIHNsb3QpIDwtIHYpXG4gICAgICAgICAgfCAxOCAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgcHVzaCB2bSBmcmFtZS5jbG9zdXJlLnZtX3VwdmFsdWVzLihpZHgpLnV2X3ZhbHVlXG4gICAgICAgICAgfCAxOSAtPiBsZXQgaWR4ID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgZnJhbWUuY2xvc3VyZS52bV91cHZhbHVlcy4oaWR4KS51dl92YWx1ZSA8LSBwZWVrIHZtXG4gICAgICAgICAgfCAyMCAtPiBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2ggZnJhbWUuY2xvc3VyZS52bV9jb2RlLnZjX2NvbnN0YW50cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiXCIgaW5cbiAgICAgICAgICAgIGxldCB2ID0gdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgdHJ5IFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBuYW1lIHdpdGggXyAtPlxuICAgICAgICAgICAgICAgIHJhaXNlIChFdmFsX2Vycm9yIChcIlZNIHVuZGVmaW5lZDogXCIgXiBuYW1lKSkgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gdlxuICAgICAgICAgIHwgMjEgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIChwZWVrIHZtKVxuICAgICAgICAgIHwgMzIgLT4gbGV0IG9mZnNldCA9IHJlYWRfaTE2IGZyYW1lIGluIGZyYW1lLmlwIDwtIGZyYW1lLmlwICsgb2Zmc2V0XG4gICAgICAgICAgfCAzMyAtPiBsZXQgb2Zmc2V0ID0gcmVhZF9pMTYgZnJhbWUgaW4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIGlmIG5vdCAoc3hfdHJ1dGh5IHYpIHRoZW4gZnJhbWUuaXAgPC0gZnJhbWUuaXAgKyBvZmZzZXRcbiAgICAgICAgICB8IDM0IC0+IGxldCBvZmZzZXQgPSByZWFkX2kxNiBmcmFtZSBpbiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBmcmFtZS5pcCA8LSBmcmFtZS5pcCArIG9mZnNldFxuICAgICAgICAgIHwgNDggLT4gbGV0IGFyZ2MgPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgYXJncyA9IEFycmF5LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSBpblxuICAgICAgICAgICAgbGV0IGYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtX2NhbGwgdm0gZiAoTGlzdC5yZXYgKEFycmF5LnRvX2xpc3QgYXJncykpXG4gICAgICAgICAgfCA0OSAtPiBsZXQgYXJnYyA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBhcmdzID0gQXJyYXkuaW5pdCBhcmdjIChmdW4gXyAtPiBwb3Agdm0pIGluXG4gICAgICAgICAgICBsZXQgZiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIHJlc3RfZnJhbWVzOyB2bS5zcCA8LSBmcmFtZS5iYXNlO1xuICAgICAgICAgICAgdm1fY2FsbCB2bSBmIChMaXN0LnJldiAoQXJyYXkudG9fbGlzdCBhcmdzKSlcbiAgICAgICAgICB8IDUwIC0+IGxldCByZXN1bHQgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHZtLmZyYW1lcyA8LSByZXN0X2ZyYW1lczsgdm0uc3AgPC0gZnJhbWUuYmFzZTsgcHVzaCB2bSByZXN1bHRcbiAgICAgICAgICB8IDUxIC0+ICgqIENMT1NVUkUg4oCUIHNraXAgZm9yIHRyYWNlLCBqdXN0IGFkdmFuY2UgcGFzdCB1cHZhbHVlIGRlc2NyaXB0b3JzICopXG4gICAgICAgICAgICBsZXQgaWR4ID0gcmVhZF91MTYgZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBjb2RlX3ZhbDIgPSBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIGluXG4gICAgICAgICAgICBsZXQgdXZfY291bnQgPSBtYXRjaCBjb2RlX3ZhbDIgd2l0aFxuICAgICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSAoTnVtYmVyIG4pIC0+IGludF9vZl9mbG9hdCBuIHwgXyAtPiAwKVxuICAgICAgICAgICAgICB8IF8gLT4gMCBpblxuICAgICAgICAgICAgbGV0IHVwdmFsdWVzID0gQXJyYXkuaW5pdCB1dl9jb3VudCAoZnVuIF8gLT5cbiAgICAgICAgICAgICAgbGV0IGlzX2xvY2FsID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSByZWFkX3U4IGZyYW1lIGluXG4gICAgICAgICAgICAgIGlmIGlzX2xvY2FsID0gMSB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgICAgbGV0IGNlbGwgPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgU29tZSBleGlzdGluZyAtPiBleGlzdGluZ1xuICAgICAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBjID0geyB1dl92YWx1ZSA9IHZtLnN0YWNrLihmcmFtZS5iYXNlICsgaW5kZXgpIH0gaW5cbiAgICAgICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGZyYW1lLmxvY2FsX2NlbGxzIGluZGV4IGM7IGMgaW5cbiAgICAgICAgICAgICAgICBjZWxsXG4gICAgICAgICAgICAgIGVuZCBlbHNlIGZyYW1lLmNsb3N1cmUudm1fdXB2YWx1ZXMuKGluZGV4KVxuICAgICAgICAgICAgKSBpblxuICAgICAgICAgICAgbGV0IGlubmVyX2NvZGUgPSBjb2RlX2Zyb21fdmFsdWUgY29kZV92YWwyIGluXG4gICAgICAgICAgICBsZXQgYyA9IHsgdm1fY29kZSA9IGlubmVyX2NvZGU7IHZtX3VwdmFsdWVzID0gdXB2YWx1ZXM7IHZtX25hbWUgPSBOb25lO1xuICAgICAgICAgICAgICAgICAgICAgICB2bV9lbnZfcmVmID0gdm0uZ2xvYmFsczsgdm1fY2xvc3VyZV9lbnYgPSBmcmFtZS5jbG9zdXJlLnZtX2Nsb3N1cmVfZW52IH0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKFZtQ2xvc3VyZSBjKVxuICAgICAgICAgIHwgNTIgLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluIGxldCBhcmdjID0gcmVhZF91OCBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IG5hbWUgPSBtYXRjaCBmcmFtZS5jbG9zdXJlLnZtX2NvZGUudmNfY29uc3RhbnRzLihpZHgpIHdpdGggU3RyaW5nIHMgLT4gcyB8IF8gLT4gXCJcIiBpblxuICAgICAgICAgICAgbGV0IGFyZ3MgPSBMaXN0LmluaXQgYXJnYyAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgICAgbGV0IGZuX3ZhbCA9IHRyeSBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgbmFtZSB3aXRoIF8gLT5cbiAgICAgICAgICAgICAgdHJ5IEhhc2h0YmwuZmluZCB2bS5nbG9iYWxzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgICAgICByYWlzZSAoRXZhbF9lcnJvciAoXCJWTTogdW5rbm93biBwcmltaXRpdmUgXCIgXiBuYW1lKSkgaW5cbiAgICAgICAgICAgIChtYXRjaCBmbl92YWwgd2l0aCBOYXRpdmVGbiAoXywgZm4pIC0+IHB1c2ggdm0gKGZuIGFyZ3MpIHwgXyAtPiBwdXNoIHZtIE5pbClcbiAgICAgICAgICB8IDY0IC0+IGxldCBjb3VudCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBMaXN0LmluaXQgY291bnQgKGZ1biBfIC0+IHBvcCB2bSkgfD4gTGlzdC5yZXYgaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKExpc3QgaXRlbXMpXG4gICAgICAgICAgfCA2NSAtPiBsZXQgY291bnQgPSByZWFkX3UxNiBmcmFtZSBpblxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSBjb3VudCBpblxuICAgICAgICAgICAgZm9yIF8gPSAxIHRvIGNvdW50IGRvIGxldCB2ID0gcG9wIHZtIGluIGxldCBrID0gcG9wIHZtIGluXG4gICAgICAgICAgICAgIGxldCBrZXkgPSBtYXRjaCBrIHdpdGggU3RyaW5nIHMgLT4gcyB8IEtleXdvcmQgcyAtPiBzIHwgXyAtPiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciBrIGluXG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIGtleSB2IGRvbmU7XG4gICAgICAgICAgICBwdXNoIHZtIChEaWN0IGQpXG4gICAgICAgICAgfCAxMjggLT4gbGV0IGlkeCA9IHJlYWRfdTE2IGZyYW1lIGluXG4gICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoIGZyYW1lLmNsb3N1cmUudm1fY29kZS52Y19jb25zdGFudHMuKGlkeCkgd2l0aCBTdHJpbmcgcyAtPiBzIHwgXyAtPiBcIlwiIGluXG4gICAgICAgICAgICBIYXNodGJsLnJlcGxhY2Ugdm0uZ2xvYmFscyBuYW1lIChwZWVrIHZtKVxuICAgICAgICAgIHwgMTQ0IC0+IGxldCBjb3VudCA9IHJlYWRfdTggZnJhbWUgaW5cbiAgICAgICAgICAgIGxldCBwYXJ0cyA9IExpc3QuaW5pdCBjb3VudCAoZnVuIF8gLT4gcG9wIHZtKSB8PiBMaXN0LnJldiBpblxuICAgICAgICAgICAgcHVzaCB2bSAoU3RyaW5nIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIFN4X3J1bnRpbWUudmFsdWVfdG9fc3RyIHBhcnRzKSkpXG4gICAgICAgICAgfCAxNjAgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICsuIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjEgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC0uIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjIgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4ICouIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjMgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGEsIGIgd2l0aCBOdW1iZXIgeCwgTnVtYmVyIHkgLT4gTnVtYmVyICh4IC8uIHkpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNjQgLT4gbGV0IGIgPSBwb3Agdm0gYW5kIGEgPSBwb3Agdm0gaW4gcHVzaCB2bSAoQm9vbCAoYSA9IGIpKVxuICAgICAgICAgIHwgMTY1IC0+IGxldCBiID0gcG9wIHZtIGFuZCBhID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCBhLCBiIHdpdGggTnVtYmVyIHgsIE51bWJlciB5IC0+IEJvb2wgKHggPCB5KSB8IF8gLT4gQm9vbCBmYWxzZSlcbiAgICAgICAgICB8IDE2NiAtPiBsZXQgYiA9IHBvcCB2bSBhbmQgYSA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggYSwgYiB3aXRoIE51bWJlciB4LCBOdW1iZXIgeSAtPiBCb29sICh4ID4geSkgfCBfIC0+IEJvb2wgZmFsc2UpXG4gICAgICAgICAgfCAxNjcgLT4gbGV0IHYgPSBwb3Agdm0gaW4gcHVzaCB2bSAoQm9vbCAobm90IChzeF90cnV0aHkgdikpKVxuICAgICAgICAgIHwgMTY4IC0+IGxldCB2ID0gcG9wIHZtIGluXG4gICAgICAgICAgICBwdXNoIHZtIChtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgICAgfCBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gTnVtYmVyIChmbG9hdF9vZl9pbnQgKExpc3QubGVuZ3RoIGwpKVxuICAgICAgICAgICAgICB8IFN0cmluZyBzIC0+IE51bWJlciAoZmxvYXRfb2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKVxuICAgICAgICAgICAgICB8IF8gLT4gTnVtYmVyIDAuMClcbiAgICAgICAgICB8IDE2OSAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIExpc3QgKHggOjogXykgfCBMaXN0UmVmIHsgY29udGVudHMgPSB4IDo6IF8gfSAtPiB4IHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzAgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aFxuICAgICAgICAgICAgICB8IExpc3QgKF8gOjogeHMpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gXyA6OiB4cyB9IC0+IExpc3QgeHMgfCBfIC0+IExpc3QgW10pXG4gICAgICAgICAgfCAxNzEgLT4gbGV0IG4gPSBwb3Agdm0gYW5kIGNvbGwgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwsIG4gd2l0aFxuICAgICAgICAgICAgICB8IChMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0pLCBOdW1iZXIgZiAtPlxuICAgICAgICAgICAgICAgICh0cnkgTGlzdC5udGggbCAoaW50X29mX2Zsb2F0IGYpIHdpdGggXyAtPiBOaWwpIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzIgLT4gbGV0IGNvbGwgPSBwb3Agdm0gYW5kIHggPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIGNvbGwgd2l0aCBMaXN0IGwgLT4gTGlzdCAoeCA6OiBsKSB8IF8gLT4gTGlzdCBbeF0pXG4gICAgICAgICAgfCAxNzMgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKC0ueCkgfCBfIC0+IE5pbClcbiAgICAgICAgICB8IDE3NCAtPiBsZXQgdiA9IHBvcCB2bSBpblxuICAgICAgICAgICAgcHVzaCB2bSAobWF0Y2ggdiB3aXRoIE51bWJlciB4IC0+IE51bWJlciAoeCArLiAxLjApIHwgXyAtPiBOaWwpXG4gICAgICAgICAgfCAxNzUgLT4gbGV0IHYgPSBwb3Agdm0gaW5cbiAgICAgICAgICAgIHB1c2ggdm0gKG1hdGNoIHYgd2l0aCBOdW1iZXIgeCAtPiBOdW1iZXIgKHggLS4gMS4wKSB8IF8gLT4gTmlsKVxuICAgICAgICAgIHwgXyAtPiAoKVxuICAgICAgICAgIHdpdGggZSAtPlxuICAgICAgICAgICAgbGV0IF8gPSBlIGluXG4gICAgICAgICAgICBpZ25vcmUgc2F2ZWRfaXA7XG4gICAgICAgICAgICAoKiBPbiBlcnJvciBkdXJpbmcgdHJhY2UsIGp1c3Qgc3RvcCAqKVxuICAgICAgICAgICAgdm0uZnJhbWVzIDwtIFtdKVxuICAgICAgICBlbmRcbiAgICBkb25lXG4gIHdpdGggXyAtPiAoKSk7XG4gIExpc3QgKExpc3QucmV2ICF0cmFjZSlcblxuKCoqIERpc2Fzc2VtYmxlIGEgdm1fY29kZSBpbnRvIGEgbGlzdCBvZiBpbnN0cnVjdGlvbiBkaWN0cy4gKilcbmxldCBkaXNhc3NlbWJsZSAoY29kZSA6IHZtX2NvZGUpID1cbiAgbGV0IGJjID0gY29kZS52Y19ieXRlY29kZSBpblxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGJjIGluXG4gIGxldCBjb25zdHMgPSBjb2RlLnZjX2NvbnN0YW50cyBpblxuICBsZXQgaW5zdHJzID0gcmVmIFtdIGluXG4gIGxldCBpcCA9IHJlZiAwIGluXG4gIHdoaWxlICFpcCA8IGxlbiBkb1xuICAgIGxldCBvZmZzZXQgPSAhaXAgaW5cbiAgICBsZXQgb3AgPSBiYy4oIWlwKSBpblxuICAgIGlwIDo9ICFpcCArIDE7XG4gICAgbGV0IG5hbWUgPSBvcGNvZGVfbmFtZSBvcCBpblxuICAgIGxldCBvcGVyYW5kcyA9IHJlZiBbXSBpblxuICAgIChtYXRjaCBvcCB3aXRoXG4gICAgfCAxICgqIENPTlNUICopIHwgMjAgKCogR0xPQkFMX0dFVCAqKSB8IDIxICgqIEdMT0JBTF9TRVQgKilcbiAgICB8IDEyOCAoKiBERUZJTkUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IGlkeCA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGlwIDo9ICFpcCArIDI7XG4gICAgICAgIGxldCBjb25zdF9zdHIgPSBpZiBpZHggPCBBcnJheS5sZW5ndGggY29uc3RzXG4gICAgICAgICAgdGhlbiBTeF90eXBlcy5pbnNwZWN0IGNvbnN0cy4oaWR4KSBlbHNlIFwiP1wiIGluXG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpOyBTdHJpbmcgY29uc3Rfc3RyXVxuICAgICAgZW5kXG4gICAgfCA2NCAoKiBMSVNUICopIHwgNjUgKCogRElDVCAqKSB8IDUxICgqIENMT1NVUkUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IGlkeCA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGlwIDo9ICFpcCArIDI7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpXTtcbiAgICAgICAgKCogRm9yIENMT1NVUkUsIHNraXAgdXB2YWx1ZSBkZXNjcmlwdG9ycyAqKVxuICAgICAgICBpZiBvcCA9IDUxICYmIGlkeCA8IEFycmF5Lmxlbmd0aCBjb25zdHMgdGhlbiBiZWdpblxuICAgICAgICAgIGxldCB1dl9jb3VudCA9IG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoXG4gICAgICAgICAgICB8IERpY3QgZCAtPiAobWF0Y2ggSGFzaHRibC5maW5kX29wdCBkIFwidXB2YWx1ZS1jb3VudFwiIHdpdGhcbiAgICAgICAgICAgICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBpbnRfb2ZfZmxvYXQgbiB8IF8gLT4gMClcbiAgICAgICAgICAgIHwgXyAtPiAwIGluXG4gICAgICAgICAgaXAgOj0gIWlwICsgdXZfY291bnQgKiAyXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgfCAxNiAoKiBMT0NBTF9HRVQgKikgfCAxNyAoKiBMT0NBTF9TRVQgKilcbiAgICB8IDE4ICgqIFVQVkFMVUVfR0VUICopIHwgMTkgKCogVVBWQUxVRV9TRVQgKilcbiAgICB8IDQ4ICgqIENBTEwgKikgfCA0OSAoKiBUQUlMX0NBTEwgKilcbiAgICB8IDE0NCAoKiBTVFJfQ09OQ0FUICopIC0+XG4gICAgICBpZiAhaXAgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgdiA9IGJjLighaXApIGluIGlwIDo9ICFpcCArIDE7XG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCB2KV1cbiAgICAgIGVuZFxuICAgIHwgMzIgKCogSlVNUCAqKSB8IDMzICgqIEpVTVBfSUZfRkFMU0UgKikgfCAzNCAoKiBKVU1QX0lGX1RSVUUgKikgLT5cbiAgICAgIGlmICFpcCArIDEgPCBsZW4gdGhlbiBiZWdpblxuICAgICAgICBsZXQgbG8gPSBiYy4oIWlwKSBpbiBsZXQgaGkgPSBiYy4oIWlwICsgMSkgaW5cbiAgICAgICAgbGV0IHJhdyA9IGxvIGxvciAoaGkgbHNsIDgpIGluXG4gICAgICAgIGxldCBzaWduZWQgPSBpZiByYXcgPj0gMzI3NjggdGhlbiByYXcgLSA2NTUzNiBlbHNlIHJhdyBpblxuICAgICAgICBpcCA6PSAhaXAgKyAyO1xuICAgICAgICBvcGVyYW5kcyA6PSBbTnVtYmVyIChmbG9hdF9vZl9pbnQgc2lnbmVkKV1cbiAgICAgIGVuZFxuICAgIHwgNTIgKCogQ0FMTF9QUklNICopIC0+XG4gICAgICBpZiAhaXAgKyAyIDwgbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IGxvID0gYmMuKCFpcCkgaW4gbGV0IGhpID0gYmMuKCFpcCArIDEpIGluXG4gICAgICAgIGxldCBpZHggPSBsbyBsb3IgKGhpIGxzbCA4KSBpblxuICAgICAgICBsZXQgYXJnYyA9IGJjLighaXAgKyAyKSBpblxuICAgICAgICBpcCA6PSAhaXAgKyAzO1xuICAgICAgICBsZXQgcHJpbV9uYW1lID0gaWYgaWR4IDwgQXJyYXkubGVuZ3RoIGNvbnN0c1xuICAgICAgICAgIHRoZW4gKG1hdGNoIGNvbnN0cy4oaWR4KSB3aXRoIFN0cmluZyBzIC0+IHMgfCBfIC0+IFwiP1wiKSBlbHNlIFwiP1wiIGluXG4gICAgICAgIG9wZXJhbmRzIDo9IFtOdW1iZXIgKGZsb2F0X29mX2ludCBpZHgpOyBTdHJpbmcgcHJpbV9uYW1lOyBOdW1iZXIgKGZsb2F0X29mX2ludCBhcmdjKV1cbiAgICAgIGVuZFxuICAgIHwgXyAtPiAoKSk7XG4gICAgbGV0IGVudHJ5ID0gSGFzaHRibC5jcmVhdGUgNCBpblxuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9mZnNldFwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBvZmZzZXQpKTtcbiAgICBIYXNodGJsLnJlcGxhY2UgZW50cnkgXCJvcGNvZGVcIiAoU3RyaW5nIG5hbWUpO1xuICAgIEhhc2h0YmwucmVwbGFjZSBlbnRyeSBcIm9wZXJhbmRzXCIgKExpc3QgIW9wZXJhbmRzKTtcbiAgICBpbnN0cnMgOj0gRGljdCBlbnRyeSA6OiAhaW5zdHJzXG4gIGRvbmU7XG4gIGxldCByZXN1bHQgPSBIYXNodGJsLmNyZWF0ZSA0IGluXG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJhcml0eVwiIChOdW1iZXIgKGZsb2F0X29mX2ludCBjb2RlLnZjX2FyaXR5KSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJudW1fbG9jYWxzXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGNvZGUudmNfbG9jYWxzKSk7XG4gIEhhc2h0YmwucmVwbGFjZSByZXN1bHQgXCJjb25zdGFudHNcIiAoTGlzdCAoQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIChmdW4gdiAtPiBTdHJpbmcgKFN4X3R5cGVzLmluc3BlY3QgdikpIGNvbnN0cykpKTtcbiAgSGFzaHRibC5yZXBsYWNlIHJlc3VsdCBcImJ5dGVjb2RlXCIgKExpc3QgKExpc3QucmV2ICFpbnN0cnMpKTtcbiAgRGljdCByZXN1bHRcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9jaGVja19ib3VuZCIsImNhbWxfZXF1YWwiLCJjYW1sX21ha2VfdmVjdCIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiY2FtbF9jYWxsMyIsImEyIiwiY2FtbF9jYWxsNCIsImEzIiwiY2FtbF9jYWxsOCIsImE0IiwiYTUiLCJhNiIsImE3IiwiZ2xvYmFsX2RhdGEiLCJTeF9yZWYiLCJTeF9ydW50aW1lIiwiU3RkbGliIiwiU3hfdHlwZXMiLCJTeF9wcmltaXRpdmVzIiwiU3RkbGliX0hhc2h0YmwiLCJTdGRsaWJfTGlzdCIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX0FycmF5IiwiU3hfcGFyc2VyIiwiU3RkbGliX1ByaW50ZXhjIiwiaml0X2NvbXBpbGVfcmVmIiwicGFyYW0iLCJqaXRfZmFpbGVkX3NlbnRpbmVsIiwiaXNfaml0X2ZhaWxlZCIsImNsIiwiY3JlYXRlIiwiZ2xvYmFscyIsInB1c2giLCJ2bSIsInYiLCJucyIsInBvcCIsInBlZWsiLCJyZWFkX3U4IiwicmVhZF91MTYiLCJsbyIsImhpIiwicmVhZF9pMTYiLCJjbG9zdXJlX3RvX3ZhbHVlIiwibWF0Y2giLCJhcmdzIiwibiIsInZtX2luc25fY291bnQiLCJ2bV9jYWxsX2NvdW50Iiwidm1fY2VrX2NvdW50Iiwidm1fcmVzZXRfY291bnRlcnMiLCJ2bV9yZXBvcnRfY291bnRlcnMiLCJwdXNoX2Nsb3N1cmVfZnJhbWUiLCJmcmFtZSIsImEiLCJmb3IkIiwiY3N0X2FyaXR5IiwiY3N0X2J5dGVjb2RlIiwiY3N0X2NvbnN0YW50cyIsImNvZGVfZnJvbV92YWx1ZSIsImQiLCJsIiwieCIsImJjX2xpc3QiLCJlbnRyaWVzIiwiY29uc3RhbnRzIiwiZW50cnkiLCJlZCIsImFyaXR5IiwiYWN0aXZlX3ZtIiwiY2FsbF9jbG9zdXJlIiwicHJldl92bSIsImUiLCJjYWxsX2Nsb3N1cmVfcmV1c2UiLCJ2bV9jYWxsIiwiZm4iLCJyZXN1bHQiLCJjc3QiLCJjc3RfYmFzZSIsImNzdF9hdF9pcCIsImNzdF9zcCIsImNzdF9WTV91bmRlZmluZWQiLCJjc3RfVk1fdW5rbm93bl9wcmltaXRpdmUiLCJjc3RfdXB2YWx1ZV9jb3VudCIsInJ1biIsInJlc3RfZnJhbWVzIiwiYmMiLCJjb25zdHMiLCJmbl9uYW1lIiwic2F2ZWRfaXAiLCJvcCIsInN3aXRjaGVyIiwiaWR4IiwibmFtZSIsInMiLCJjb3VudCIsInBhcnRzIiwiYiIsInkiLCJub3JtIiwieHMiLCJjb2xsIiwiaSIsImV4biIsInNsb3QiLCJjZWxsIiwiaWQiLCJlbnYiLCJwIiwid3JpdHRlbiIsIm9mZnNldCIsImFyZ2MiLCJhcmdzX2xpc3QiLCJjb2RlX3ZhbCIsImNvZGUiLCJ1dl9jb3VudCIsInVwdmFsdWVzIiwiaXNfbG9jYWwiLCJpbmRleCIsImV4aXN0aW5nIiwiYyIsImZuX3ZhbCIsIm1zZyIsIml0ZW1zIiwiayIsImtleSIsImV4ZWN1dGVfbW9kdWxlIiwiY3N0X2ppdF9GQUlMIiwiY3N0X2NvbXBpbGUiLCJjc3RfcXVvdGUiLCJqaXRfY29tcGlsZV9sYW1iZGEiLCJlZmZlY3RpdmVfZ2xvYmFscyIsInBhcmFtX3N5bXMiLCJmbl9leHByIiwiY29tcGlsZV9lbnYiLCJvdXRlcl9jb2RlIiwiaW5uZXJfdmFsIiwidmFsdWUiLCJvcGNvZGVfbmFtZSIsIm9wY29kZV9vcGVyYW5kX3NpemUiLCJjc3Rfb3Bjb2RlIiwidHJhY2VfcnVuIiwic3JjIiwiY29tcGlsZV9mbiIsImV4cHJzIiwiZXhwciIsInF1b3RlZCIsImZyYW1lMCIsInRyYWNlIiwic3RlcHMiLCJzdGFja19zbmFwIiwiY29kZV92YWwyIiwiaW5uZXJfY29kZSIsImRpc2Fzc2VtYmxlIiwibGVuIiwiaXAiLCJpbnN0cnMiLCJvcGVyYW5kcyIsInByaW1fbmFtZSIsInJhdyIsInNpZ25lZCIsImNvbnN0X3N0ciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUosR0FBQUMsSUFBQUUsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFOLEdBQUFDLElBQUFFLElBQUFFLElBQUFFO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUixHQUFBQyxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBQyxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJ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IjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiIuc3gub2Jqcy9qc29vL2RlZmF1bHQvc3guY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3hfc2NvcGUubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiogU2NvcGUgc3RhY2tzIOKAlCBkeW5hbWljIHNjb3BlIGZvciByZW5kZXItdGltZSBlZmZlY3RzLlxuXG4gICAgUHJvdmlkZXMgc2NvcGUtcHVzaCEvcG9wIS9wZWVrLCBjb2xsZWN0IS9jb2xsZWN0ZWQvY2xlYXItY29sbGVjdGVkISxcbiAgICBzY29wZS1lbWl0IS9lbWl0dGVkL3Njb3BlLWVtaXR0ZWQsIGNvbnRleHQsIGFuZCBjb29raWUgYWNjZXNzLlxuXG4gICAgQWxsIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCBhcyBwcmltaXRpdmVzIHNvIGJvdGggdGhlIENFSyBldmFsdWF0b3JcbiAgICBhbmQgdGhlIEpJVCBWTSBjYW4gZmluZCB0aGVtIGluIHRoZSBzYW1lIHBsYWNlLiAqKVxuXG5vcGVuIFN4X3R5cGVzXG5cbigqKiBUaGUgc2hhcmVkIHNjb3BlIHN0YWNrcyBoYXNodGFibGUuIEVhY2gga2V5IG1hcHMgdG8gYSBzdGFjayBvZiB2YWx1ZXMuXG4gICAgVXNlZCBieSBhc2VyIGZvciBzcHJlYWQvcHJvdmlkZS9lbWl0IHBhdHRlcm5zLCBDU1NYIGNvbGxlY3QvZmx1c2gsIGV0Yy4gKilcbmxldCBzY29wZV9zdGFja3MgOiAoc3RyaW5nLCB2YWx1ZSBsaXN0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA4XG5cbigqKiBEZWJ1ZyB0cmFjZSBmb3Igc2NvcGUgb3BlcmF0aW9ucyDigJQgZW5hYmxlZCBmcm9tIEpTICopXG5sZXQgX3Njb3BlX3RyYWNlID0gcmVmIGZhbHNlXG5sZXQgX3Njb3BlX2xvZyA6IHN0cmluZyBsaXN0IHJlZiA9IHJlZiBbXVxubGV0IHNjb3BlX3RyYWNlX2VuYWJsZSAoKSA9IF9zY29wZV90cmFjZSA6PSB0cnVlOyBfc2NvcGVfbG9nIDo9IFtdXG5sZXQgc2NvcGVfdHJhY2VfZGlzYWJsZSAoKSA9IF9zY29wZV90cmFjZSA6PSBmYWxzZVxubGV0IHNjb3BlX3RyYWNlX2RyYWluICgpID1cbiAgbGV0IGxvZyA9IExpc3QucmV2ICFfc2NvcGVfbG9nIGluXG4gIF9zY29wZV9sb2cgOj0gW107XG4gIGxvZ1xuXG4oKiogUmVxdWVzdCBjb29raWVzIOKAlCBzZXQgYnkgdGhlIFB5dGhvbiBicmlkZ2UgYmVmb3JlIGVhY2ggcmVuZGVyLlxuICAgIGdldC1jb29raWUgcmVhZHMgZnJvbSBoZXJlOyBzZXQtY29va2llIGlzIGEgbm8tb3Agb24gdGhlIHNlcnZlci4gKilcbmxldCByZXF1ZXN0X2Nvb2tpZXMgOiAoc3RyaW5nLCBzdHJpbmcpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDhcblxuKCoqIENsZWFyIGFsbCBzY29wZSBzdGFja3MuIENhbGxlZCBiZXR3ZWVuIHJlcXVlc3RzIGlmIG5lZWRlZC4gKilcbmxldCBjbGVhcl9hbGwgKCkgPSBIYXNodGJsLmNsZWFyIHNjb3BlX3N0YWNrc1xuXG5sZXQgKCkgPVxuICBsZXQgcmVnaXN0ZXIgPSBTeF9wcmltaXRpdmVzLnJlZ2lzdGVyIGluXG5cbiAgKCogLS0tIENvb2tpZXMgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJnZXQtY29va2llXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICAobWF0Y2ggSGFzaHRibC5maW5kX29wdCByZXF1ZXN0X2Nvb2tpZXMgbmFtZSB3aXRoXG4gICAgICAgfCBTb21lIHYgLT4gU3RyaW5nIHZcbiAgICAgICB8IE5vbmUgLT4gTmlsKVxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2V0LWNvb2tpZVwiIChmdW4gX2FyZ3MgLT4gTmlsKTtcblxuICAoKiAtLS0gQ29yZSBzY29wZSBzdGFjayBvcGVyYXRpb25zIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBpZiAhX3Njb3BlX3RyYWNlIHRoZW5cbiAgICAgICAgX3Njb3BlX2xvZyA6PSBQcmludGYuc3ByaW50ZiBcIlBVU0ggJXMgZGVwdGg9JWQtPiVkXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChMaXN0Lmxlbmd0aCBzdGFjayArIDEpIDo6ICFfc2NvcGVfbG9nO1xuICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lICh2YWx1ZSA6OiBzdGFjayk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQT1AgJXMgZGVwdGg9JWQtPiVkXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChtYXggMCAoTGlzdC5sZW5ndGggc3RhY2sgLSAxKSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBfIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIHJlc3QgfCBbXSAtPiAoKSk7IE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtcGVla1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBuYW1lXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgaWYgIV9zY29wZV90cmFjZSB0aGVuXG4gICAgICAgIF9zY29wZV9sb2cgOj0gUHJpbnRmLnNwcmludGYgXCJQRUVLICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCB2IDo6IF8gLT4gdiB8IFtdIC0+IE5pbClcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gQ29udGV4dCAoc2NvcGUgbG9va3VwIHdpdGggb3B0aW9uYWwgZGVmYXVsdCkgLS0tICopXG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCAoU3RyaW5nIG5hbWUpIDo6IHJlc3QgLT5cbiAgICAgIGxldCBzdGFjayA9IHRyeSBIYXNodGJsLmZpbmQgc2NvcGVfc3RhY2tzIG5hbWUgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIGlmICFfc2NvcGVfdHJhY2UgdGhlblxuICAgICAgICBfc2NvcGVfbG9nIDo9IFByaW50Zi5zcHJpbnRmIFwiQ1RYICVzIGRlcHRoPSVkIGZvdW5kPSViXCIgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChzdGFjayA8PiBbXSkgOjogIV9zY29wZV9sb2c7XG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgdiA6OiBfIC0+IHZcbiAgICAgICB8IFtdIC0+IChtYXRjaCByZXN0IHdpdGggZGVmYXVsdF92YWwgOjogXyAtPiBkZWZhdWx0X3ZhbCB8IFtdIC0+IE5pbCkpXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJjb250ZXh0LWRlYnVnXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBsZXQgYWxsX2tleXMgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYWNjIC0+IGsgOjogYWNjKSBzY29wZV9zdGFja3MgW10gaW5cbiAgICAgIFN0cmluZyAoUHJpbnRmLnNwcmludGYgXCJuYW1lPSVzIHN0YWNrX2xlbj0lZCBhbGxfa2V5cz1bJXNdXCJcbiAgICAgICAgbmFtZSAoTGlzdC5sZW5ndGggc3RhY2spIChTdHJpbmcuY29uY2F0IFwiLFwiIGFsbF9rZXlzKSlcbiAgICB8IF8gLT4gU3RyaW5nIFwiYmFkIGFyZ3NcIik7XG5cbiAgKCogLS0tIENvbGxlY3QgLyBjb2xsZWN0ZWQgLyBjbGVhci1jb2xsZWN0ZWQhIC0tLSAqKVxuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgbmFtZTsgdmFsdWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgTGlzdCBpdGVtcyA6OiByZXN0IC0+XG4gICAgICAgICBpZiBub3QgKExpc3QubWVtIHZhbHVlIGl0ZW1zKSB0aGVuXG4gICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSAoTGlzdCAoaXRlbXMgQCBbdmFsdWVdKSA6OiByZXN0KVxuICAgICAgIHwgW10gLT5cbiAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSBbTGlzdCBbdmFsdWVdXVxuICAgICAgIHwgXyA6OiBfIC0+ICgpKTtcbiAgICAgIE5pbFxuICAgIHwgXyAtPiBOaWwpO1xuXG4gIHJlZ2lzdGVyIFwiY29sbGVjdGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJjbGVhci1jb2xsZWN0ZWQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aFxuICAgICAgIHwgXyA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBzY29wZV9zdGFja3MgbmFtZSAoTGlzdCBbXSA6OiByZXN0KVxuICAgICAgIHwgW10gLT4gSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIFtMaXN0IFtdXSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gRW1pdCAvIGVtaXR0ZWQgKGZvciBzcHJlYWQgYXR0cnMgaW4gYWRhcHRlci1odG1sLnN4KSAtLS0gKilcblxuICByZWdpc3RlciBcInNjb3BlLWVtaXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWU7IHZhbHVlXSAtPlxuICAgICAgbGV0IHN0YWNrID0gdHJ5IEhhc2h0YmwuZmluZCBzY29wZV9zdGFja3MgbmFtZSB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgKG1hdGNoIHN0YWNrIHdpdGhcbiAgICAgICB8IExpc3QgaXRlbXMgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIChMaXN0IChpdGVtcyBAIFt2YWx1ZV0pIDo6IHJlc3QpXG4gICAgICAgfCBOaWwgOjogcmVzdCAtPlxuICAgICAgICAgSGFzaHRibC5yZXBsYWNlIHNjb3BlX3N0YWNrcyBuYW1lIChMaXN0IFt2YWx1ZV0gOjogcmVzdClcbiAgICAgICB8IFtdIC0+XG4gICAgICAgICBIYXNodGJsLnJlcGxhY2Ugc2NvcGVfc3RhY2tzIG5hbWUgW0xpc3QgW3ZhbHVlXV1cbiAgICAgICB8IF8gOjogXyAtPiAoKSk7XG4gICAgICBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcImVtaXQhXCIgKGZ1biBhcmdzIC0+XG4gICAgKCogQWxpYXMgZm9yIHNjb3BlLWVtaXQhICopXG4gICAgbWF0Y2ggU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIFwic2NvcGUtZW1pdCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbCk7XG5cbiAgcmVnaXN0ZXIgXCJlbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIG5hbWVdIC0+XG4gICAgICBsZXQgc3RhY2sgPSB0cnkgSGFzaHRibC5maW5kIHNjb3BlX3N0YWNrcyBuYW1lIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICAobWF0Y2ggc3RhY2sgd2l0aCBMaXN0IGl0ZW1zIDo6IF8gLT4gTGlzdCBpdGVtcyB8IF8gLT4gTGlzdCBbXSlcbiAgICB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1lbWl0dGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggU3hfcHJpbWl0aXZlcy5nZXRfcHJpbWl0aXZlIFwiZW1pdHRlZFwiIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJncyB8IF8gLT4gTGlzdCBbXSk7XG5cbiAgcmVnaXN0ZXIgXCJzY29wZS1jb2xsZWN0ZWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgXCJjb2xsZWN0ZWRcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IExpc3QgW10pO1xuXG4gIHJlZ2lzdGVyIFwic2NvcGUtY2xlYXItY29sbGVjdGVkIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBcImNsZWFyLWNvbGxlY3RlZCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFByb3ZpZGUgYWxpYXNlcyAtLS0gKilcblxuICByZWdpc3RlciBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBTeF9wcmltaXRpdmVzLmdldF9wcmltaXRpdmUgXCJzY29wZS1wdXNoIVwiIHdpdGhcbiAgICB8IE5hdGl2ZUZuIChfLCBmbikgLT4gZm4gYXJncyB8IF8gLT4gTmlsKTtcblxuICByZWdpc3RlciBcInByb3ZpZGUtcG9wIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIFN4X3ByaW1pdGl2ZXMuZ2V0X3ByaW1pdGl2ZSBcInNjb3BlLXBvcCFcIiB3aXRoXG4gICAgfCBOYXRpdmVGbiAoXywgZm4pIC0+IGZuIGFyZ3MgfCBfIC0+IE5pbClcbiJdLCJuYW1lcyI6WyJydW50aW1lIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF93cmFwX2V4Y2VwdGlvbiIsImNhbWxfY2FsbDEiLCJmIiwiYTAiLCJjYW1sX2NhbGwzIiwiYTEiLCJhMiIsImdsb2JhbF9kYXRhIiwiU3hfcHJpbWl0aXZlcyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfU3RyaW5nIiwiU3RkbGliX1ByaW50ZiIsInNjb3BlX3N0YWNrcyIsInNjb3BlX3RyYWNlIiwic2NvcGVfbG9nIiwic2NvcGVfdHJhY2VfZW5hYmxlIiwicGFyYW0iLCJzY29wZV90cmFjZV9kaXNhYmxlIiwic2NvcGVfdHJhY2VfZHJhaW4iLCJsb2ciLCJyZXF1ZXN0X2Nvb2tpZXMiLCJjbGVhcl9hbGwiLCJyZWdpc3RlciIsImFyZ3MiLCJuYW1lIiwibWF0Y2giLCJ2IiwiY3N0X2RlcHRoIiwiY3N0IiwiY3N0X3Njb3BlX3B1c2giLCJ2YWx1ZSIsInN0YWNrIiwiZXhuIiwiY3N0X3Njb3BlX3BvcCIsInJlc3QiLCJjc3RfZm91bmQiLCJkZWZhdWx0X3ZhbCIsImFsbF9rZXlzIiwiayIsImFjYyIsIml0ZW1zIiwiY3N0X2NvbGxlY3RlZCIsImNzdF9jbGVhcl9jb2xsZWN0ZWQiLCJjc3Rfc2NvcGVfZW1pdCIsImZuIiwiY3N0X2VtaXR0ZWQiXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMsOEJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRSxJQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGVDWW9EO0FBQUEsSUFBQUMsY0FBZ0I7QUFBQSxJQUFBQyxZQUFBO0FBQUEsWUFBQUMsbUJBQUFDO0FBQUFBLElBS3hDO0FBQUEsSUFBc0I7QUFBQTtBQUFBLEdBQWdCO0FBQUEsWUFBQUMsb0JBQUFELE9BQ3JDLDZCQUFxQjtBQUFBLFlBQUFFLGtCQUFBRjtBQUFBQSxRQUFBRyxNQUV0QztBQUFB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O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRURuTDdDIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzc4MTMsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLnN4Lm9ianMvanNvby9kZWZhdWx0L3N4LmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N4X3JlbmRlci5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKiBIVE1MIHJlbmRlcmVyIGZvciBTWCB2YWx1ZXMuXG5cbiAgICBFeHRyYWN0ZWQgZnJvbSBydW5fdGVzdHMubWwg4oCUIHJlbmRlcnMgYW4gU1ggZXhwcmVzc2lvbiB0cmVlIHRvIGFuXG4gICAgSFRNTCBzdHJpbmcsIGV4cGFuZGluZyBjb21wb25lbnRzIGFuZCBtYWNyb3MgYWxvbmcgdGhlIHdheS5cblxuICAgIERlcGVuZHMgb24gW1N4X3JlZi5ldmFsX2V4cHJdIGZvciBldmFsdWF0aW5nIHN1Yi1leHByZXNzaW9uc1xuICAgIGR1cmluZyByZW5kZXJpbmcgKGtleXdvcmQgYXJnIHZhbHVlcywgY29uZGl0aW9uYWxzLCBldGMuKS4gKilcblxub3BlbiBTeF90eXBlc1xuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBUYWcgLyBhdHRyaWJ1dGUgcmVnaXN0cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgaHRtbF90YWdzID0gW1xuICBcImh0bWxcIjsgXCJoZWFkXCI7IFwiYm9keVwiOyBcInRpdGxlXCI7IFwibWV0YVwiOyBcImxpbmtcIjsgXCJzY3JpcHRcIjsgXCJzdHlsZVwiOyBcIm5vc2NyaXB0XCI7XG4gIFwiaGVhZGVyXCI7IFwibmF2XCI7IFwibWFpblwiOyBcInNlY3Rpb25cIjsgXCJhcnRpY2xlXCI7IFwiYXNpZGVcIjsgXCJmb290ZXJcIjtcbiAgXCJoMVwiOyBcImgyXCI7IFwiaDNcIjsgXCJoNFwiOyBcImg1XCI7IFwiaDZcIjsgXCJoZ3JvdXBcIjtcbiAgXCJkaXZcIjsgXCJwXCI7IFwiYmxvY2txdW90ZVwiOyBcInByZVwiOyBcImZpZ3VyZVwiOyBcImZpZ2NhcHRpb25cIjsgXCJhZGRyZXNzXCI7IFwiaHJcIjtcbiAgXCJ1bFwiOyBcIm9sXCI7IFwibGlcIjsgXCJkbFwiOyBcImR0XCI7IFwiZGRcIjsgXCJtZW51XCI7XG4gIFwiYVwiOyBcInNwYW5cIjsgXCJlbVwiOyBcInN0cm9uZ1wiOyBcInNtYWxsXCI7IFwiYlwiOyBcImlcIjsgXCJ1XCI7IFwic1wiOyBcInN1YlwiOyBcInN1cFwiO1xuICBcIm1hcmtcIjsgXCJkZWxcIjsgXCJpbnNcIjsgXCJxXCI7IFwiY2l0ZVwiOyBcImRmblwiOyBcImFiYnJcIjsgXCJjb2RlXCI7IFwidmFyXCI7IFwic2FtcFwiO1xuICBcImtiZFwiOyBcImRhdGFcIjsgXCJ0aW1lXCI7IFwicnVieVwiOyBcInJ0XCI7IFwicnBcIjsgXCJiZGlcIjsgXCJiZG9cIjsgXCJ3YnJcIjsgXCJiclwiO1xuICBcInRhYmxlXCI7IFwidGhlYWRcIjsgXCJ0Ym9keVwiOyBcInRmb290XCI7IFwidHJcIjsgXCJ0aFwiOyBcInRkXCI7IFwiY2FwdGlvblwiOyBcImNvbGdyb3VwXCI7IFwiY29sXCI7XG4gIFwiZm9ybVwiOyBcImlucHV0XCI7IFwidGV4dGFyZWFcIjsgXCJzZWxlY3RcIjsgXCJvcHRpb25cIjsgXCJvcHRncm91cFwiOyBcImJ1dHRvblwiOyBcImxhYmVsXCI7XG4gIFwiZmllbGRzZXRcIjsgXCJsZWdlbmRcIjsgXCJkYXRhbGlzdFwiOyBcIm91dHB1dFwiOyBcInByb2dyZXNzXCI7IFwibWV0ZXJcIjtcbiAgXCJkZXRhaWxzXCI7IFwic3VtbWFyeVwiOyBcImRpYWxvZ1wiO1xuICBcImltZ1wiOyBcInZpZGVvXCI7IFwiYXVkaW9cIjsgXCJzb3VyY2VcIjsgXCJwaWN0dXJlXCI7IFwiY2FudmFzXCI7IFwiaWZyYW1lXCI7IFwiZW1iZWRcIjsgXCJvYmplY3RcIjsgXCJwYXJhbVwiO1xuICBcInN2Z1wiOyBcInBhdGhcIjsgXCJjaXJjbGVcIjsgXCJyZWN0XCI7IFwibGluZVwiOyBcInBvbHlsaW5lXCI7IFwicG9seWdvblwiOyBcImVsbGlwc2VcIjtcbiAgXCJnXCI7IFwiZGVmc1wiOyBcInVzZVwiOyBcInRleHRcIjsgXCJ0c3BhblwiOyBcImNsaXBQYXRoXCI7IFwibWFza1wiOyBcInBhdHRlcm5cIjtcbiAgXCJsaW5lYXJHcmFkaWVudFwiOyBcInJhZGlhbEdyYWRpZW50XCI7IFwic3RvcFwiOyBcImZpbHRlclwiOyBcImZlQmxlbmRcIjsgXCJmZUZsb29kXCI7XG4gIFwiZmVHYXVzc2lhbkJsdXJcIjsgXCJmZU9mZnNldFwiOyBcImZlTWVyZ2VcIjsgXCJmZU1lcmdlTm9kZVwiOyBcImZlQ29tcG9zaXRlXCI7XG4gIFwidGVtcGxhdGVcIjsgXCJzbG90XCI7XG5dXG5cbmxldCB2b2lkX2VsZW1lbnRzID0gW1xuICBcImFyZWFcIjsgXCJiYXNlXCI7IFwiYnJcIjsgXCJjb2xcIjsgXCJlbWJlZFwiOyBcImhyXCI7IFwiaW1nXCI7IFwiaW5wdXRcIjtcbiAgXCJsaW5rXCI7IFwibWV0YVwiOyBcInBhcmFtXCI7IFwic291cmNlXCI7IFwidHJhY2tcIjsgXCJ3YnJcIlxuXVxuXG5sZXQgYm9vbGVhbl9hdHRycyA9IFtcbiAgXCJhc3luY1wiOyBcImF1dG9mb2N1c1wiOyBcImF1dG9wbGF5XCI7IFwiY2hlY2tlZFwiOyBcImNvbnRyb2xzXCI7IFwiZGVmYXVsdFwiO1xuICBcImRlZmVyXCI7IFwiZGlzYWJsZWRcIjsgXCJmb3Jtbm92YWxpZGF0ZVwiOyBcImhpZGRlblwiOyBcImluZXJ0XCI7IFwiaXNtYXBcIjtcbiAgXCJsb29wXCI7IFwibXVsdGlwbGVcIjsgXCJtdXRlZFwiOyBcIm5vbW9kdWxlXCI7IFwibm92YWxpZGF0ZVwiOyBcIm9wZW5cIjtcbiAgXCJwbGF5c2lubGluZVwiOyBcInJlYWRvbmx5XCI7IFwicmVxdWlyZWRcIjsgXCJyZXZlcnNlZFwiOyBcInNlbGVjdGVkXCJcbl1cblxubGV0IGlzX2h0bWxfdGFnIG5hbWUgPSBMaXN0Lm1lbSBuYW1lIGh0bWxfdGFnc1xubGV0IGlzX3ZvaWQgbmFtZSA9IExpc3QubWVtIG5hbWUgdm9pZF9lbGVtZW50c1xubGV0IGlzX2Jvb2xlYW5fYXR0ciBuYW1lID0gTGlzdC5tZW0gbmFtZSBib29sZWFuX2F0dHJzXG5cblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogSFRNTCBlc2NhcGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGVzY2FwZV9odG1sIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBTdHJpbmcuaXRlciAoZnVuY3Rpb25cbiAgICB8ICcmJyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImYW1wO1wiXG4gICAgfCAnPCcgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmx0O1wiXG4gICAgfCAnPicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJmd0O1wiXG4gICAgfCAnXCInIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZxdW90O1wiXG4gICAgfCBjIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEF0dHJpYnV0ZSByZW5kZXJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZW5kZXJfYXR0cnMgYXR0cnMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgZW5kXG4gICAgZW5kIGVsc2UgaWYgbm90IChpc19uaWwgdikgdGhlbiBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGVzY2FwZV9odG1sICh2YWx1ZV90b19zdHJpbmcgdikpO1xuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG4gICAgZW5kKSBhdHRycztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEhUTUwgcmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIEZvcndhcmQgcmVmIOKAlCByZXNvbHZlZCBhdCBzZXR1cCB0aW1lICopXG5sZXQgcmVuZGVyX3RvX2h0bWxfcmVmIDogKHZhbHVlIC0+IGVudiAtPiBzdHJpbmcpIHJlZiA9XG4gIHJlZiAoZnVuIF9leHByIF9lbnYgLT4gXCJcIilcblxubGV0IHJlbmRlcl90b19odG1sIGV4cHIgZW52ID0gIXJlbmRlcl90b19odG1sX3JlZiBleHByIGVudlxuXG4oKiogUmVuZGVyIHZpYSB0aGUgU1ggYWRhcHRlciAocmVuZGVyLXRvLWh0bWwgZnJvbSBhZGFwdGVyLWh0bWwuc3gpLlxuICAgIEZhbGxzIGJhY2sgdG8gdGhlIG5hdGl2ZSByZWYgaWYgdGhlIFNYIGFkYXB0ZXIgaXNuJ3QgbG9hZGVkLiAqKVxubGV0IHN4X3JlbmRlcl90b19odG1sIHJlbmRlcl9lbnYgZXhwciBldmFsX2VudiA9XG4gIGlmIGVudl9oYXMgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgdGhlblxuICAgIGxldCBmbiA9IGVudl9nZXQgcmVuZGVyX2VudiBcInJlbmRlci10by1odG1sXCIgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmNla19jYWxsIGZuIChMaXN0IFtleHByOyBFbnYgZXZhbF9lbnZdKSBpblxuICAgIG1hdGNoIHJlc3VsdCB3aXRoIFN0cmluZyBzIC0+IHMgfCBSYXdIVE1MIHMgLT4gcyB8IF8gLT4gU3hfcnVudGltZS52YWx1ZV90b19zdHIgcmVzdWx0XG4gIGVsc2VcbiAgICByZW5kZXJfdG9faHRtbCBleHByIGV2YWxfZW52XG5cbmxldCByZW5kZXJfY2hpbGRyZW4gY2hpbGRyZW4gZW52ID1cbiAgU3RyaW5nLmNvbmNhdCBcIlwiIChMaXN0Lm1hcCAoZnVuIGMgLT4gcmVuZGVyX3RvX2h0bWwgYyBlbnYpIGNoaWxkcmVuKVxuXG4oKiogUGFyc2Uga2V5d29yZCBhdHRycyBhbmQgcG9zaXRpb25hbCBjaGlsZHJlbiBmcm9tIGFuIGVsZW1lbnQgY2FsbCdzIGFyZ3MuXG4gICAgQXR0cnMgYXJlIGV2YWx1YXRlZDsgY2hpbGRyZW4gYXJlIHJldHVybmVkIFVORVZBTFVBVEVEIGZvciByZW5kZXIgZGlzcGF0Y2guICopXG5sZXQgcGFyc2VfZWxlbWVudF9hcmdzIGFyZ3MgZW52ID1cbiAgbGV0IGF0dHJzID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICBsZXQgY2hpbGRyZW4gPSByZWYgW10gaW5cbiAgbGV0IHNraXAgPSByZWYgZmFsc2UgaW5cbiAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgTGlzdC5pdGVyaSAoZnVuIGlkeCBhcmcgLT5cbiAgICBpZiAhc2tpcCB0aGVuIHNraXAgOj0gZmFsc2VcbiAgICBlbHNlIG1hdGNoIGFyZyB3aXRoXG4gICAgfCBLZXl3b3JkIGsgd2hlbiBpZHggKyAxIDwgbGVuIC0+XG4gICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QubnRoIGFyZ3MgKGlkeCArIDEpKSAoRW52IGVudikgaW5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBhdHRycyBrIHY7XG4gICAgICBza2lwIDo9IHRydWVcbiAgICB8IFNwcmVhZCBwYWlycyAtPlxuICAgICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwucmVwbGFjZSBhdHRycyBrIHYpIHBhaXJzXG4gICAgfCBfIC0+XG4gICAgICBjaGlsZHJlbiA6PSBhcmcgOjogIWNoaWxkcmVuXG4gICkgYXJncztcbiAgKGF0dHJzLCBMaXN0LnJldiAhY2hpbGRyZW4pXG5cbmxldCByZW5kZXJfaHRtbF9lbGVtZW50IHRhZyBhcmdzIGVudiA9XG4gIGxldCAoYXR0cnMsIGNoaWxkcmVuKSA9IHBhcnNlX2VsZW1lbnRfYXJncyBhcmdzIGVudiBpblxuICBsZXQgYXR0cl9zdHIgPSByZW5kZXJfYXR0cnMgYXR0cnMgaW5cbiAgaWYgaXNfdm9pZCB0YWcgdGhlblxuICAgIFwiPFwiIF4gdGFnIF4gYXR0cl9zdHIgXiBcIiAvPlwiXG4gIGVsc2VcbiAgICBsZXQgY29udGVudCA9IFN0cmluZy5jb25jYXQgXCJcIlxuICAgICAgKExpc3QubWFwIChmdW4gYyAtPiByZW5kZXJfdG9faHRtbCBjIGVudikgY2hpbGRyZW4pIGluXG4gICAgXCI8XCIgXiB0YWcgXiBhdHRyX3N0ciBeIFwiPlwiIF4gY29udGVudCBeIFwiPC9cIiBeIHRhZyBeIFwiPlwiXG5cbmxldCByZW5kZXJfY29tcG9uZW50IGNvbXAgYXJncyBlbnYgPVxuICBtYXRjaCBjb21wIHdpdGhcbiAgfCBDb21wb25lbnQgYyAtPlxuICAgIGxldCBrd2FyZ3MgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgbGV0IGNoaWxkcmVuX2V4cHJzID0gcmVmIFtdIGluXG4gICAgbGV0IHNraXAgPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggYXJncyBpblxuICAgIExpc3QuaXRlcmkgKGZ1biBpZHggYXJnIC0+XG4gICAgICBpZiAhc2tpcCB0aGVuIHNraXAgOj0gZmFsc2VcbiAgICAgIGVsc2UgbWF0Y2ggYXJnIHdpdGhcbiAgICAgIHwgS2V5d29yZCBrIHdoZW4gaWR4ICsgMSA8IGxlbiAtPlxuICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QubnRoIGFyZ3MgKGlkeCArIDEpKSAoRW52IGVudikgaW5cbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIGt3YXJncyBrIHY7XG4gICAgICAgIHNraXAgOj0gdHJ1ZVxuICAgICAgfCBfIC0+XG4gICAgICAgIGNoaWxkcmVuX2V4cHJzIDo9IGFyZyA6OiAhY2hpbGRyZW5fZXhwcnNcbiAgICApIGFyZ3M7XG4gICAgbGV0IGNoaWxkcmVuID0gTGlzdC5yZXYgIWNoaWxkcmVuX2V4cHJzIGluXG4gICAgbGV0IGxvY2FsID0gZW52X21lcmdlIGMuY19jbG9zdXJlIGVudiBpblxuICAgIExpc3QuaXRlciAoZnVuIHAgLT5cbiAgICAgIGxldCB2ID0gbWF0Y2ggSGFzaHRibC5maW5kX29wdCBrd2FyZ3MgcCB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBOaWwgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgcCB2KVxuICAgICkgYy5jX3BhcmFtcztcbiAgICBpZiBjLmNfaGFzX2NoaWxkcmVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCByZW5kZXJlZF9jaGlsZHJlbiA9IFN0cmluZy5jb25jYXQgXCJcIlxuICAgICAgICAoTGlzdC5tYXAgKGZ1biBjIC0+IHJlbmRlcl90b19odG1sIGMgZW52KSBjaGlsZHJlbikgaW5cbiAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgXCJjaGlsZHJlblwiIChSYXdIVE1MIHJlbmRlcmVkX2NoaWxkcmVuKSlcbiAgICBlbmQ7XG4gICAgcmVuZGVyX3RvX2h0bWwgYy5jX2JvZHkgbG9jYWxcbiAgfCBfIC0+IFwiXCJcblxubGV0IGV4cGFuZF9tYWNybyAobSA6IG1hY3JvKSBhcmdzIF9lbnYgPVxuICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIG0ubV9jbG9zdXJlIGluXG4gIGxldCBwYXJhbXMgPSBtLm1fcGFyYW1zIGluXG4gIGxldCByZWMgYmluZF9wYXJhbXMgcHMgYXMnID1cbiAgICBtYXRjaCBwcywgYXMnIHdpdGhcbiAgICB8IFtdLCByZXN0IC0+XG4gICAgICAobWF0Y2ggbS5tX3Jlc3RfcGFyYW0gd2l0aFxuICAgICAgIHwgU29tZSBycCAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHJwIChMaXN0IHJlc3QpKVxuICAgICAgIHwgTm9uZSAtPiAoKSlcbiAgICB8IHAgOjogcHNfcmVzdCwgYSA6OiBhc19yZXN0IC0+XG4gICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSk7XG4gICAgICBiaW5kX3BhcmFtcyBwc19yZXN0IGFzX3Jlc3RcbiAgICB8IF8gOjogXywgW10gLT5cbiAgICAgIExpc3QuaXRlciAoZnVuIHAgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIE5pbCkpIChMaXN0LnJldiBwcylcbiAgaW5cbiAgYmluZF9wYXJhbXMgcGFyYW1zIGFyZ3M7XG4gIFN4X3JlZi5ldmFsX2V4cHIgbS5tX2JvZHkgKEVudiBsb2NhbClcblxubGV0IHJlYyBkb19yZW5kZXJfdG9faHRtbCAoZXhwciA6IHZhbHVlKSAoZW52IDogZW52KSA6IHN0cmluZyA9XG4gIG1hdGNoIGV4cHIgd2l0aFxuICB8IE5pbCAtPiBcIlwiXG4gIHwgQm9vbCB0cnVlIC0+IFwidHJ1ZVwiXG4gIHwgQm9vbCBmYWxzZSAtPiBcImZhbHNlXCJcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIHN0cmluZ19vZl9pbnQgKGludF9vZl9mbG9hdCBuKVxuICAgIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlZ1wiIG5cbiAgfCBTdHJpbmcgcyAtPiBlc2NhcGVfaHRtbCBzXG4gIHwgS2V5d29yZCBrIC0+IGVzY2FwZV9odG1sIGtcbiAgfCBSYXdIVE1MIHMgLT4gc1xuICB8IFN4RXhwciBzIC0+IHNcbiAgfCBTeW1ib2wgcyAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoU3ltYm9sIHMpIChFbnYgZW52KSBpblxuICAgIGRvX3JlbmRlcl90b19odG1sIHYgZW52XG4gIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gLT4gXCJcIlxuICB8IExpc3QgKGhlYWQgOjogYXJncykgfCBMaXN0UmVmIHsgY29udGVudHMgPSBoZWFkIDo6IGFyZ3MgfSAtPlxuICAgIHJlbmRlcl9saXN0X3RvX2h0bWwgaGVhZCBhcmdzIGVudlxuICB8IF8gLT5cbiAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGVudikgaW5cbiAgICBkb19yZW5kZXJfdG9faHRtbCB2IGVudlxuXG5hbmQgcmVuZGVyX2xpc3RfdG9faHRtbCBoZWFkIGFyZ3MgZW52ID1cbiAgbWF0Y2ggaGVhZCB3aXRoXG4gIHwgU3ltYm9sIFwiPD5cIiAtPlxuICAgIHJlbmRlcl9jaGlsZHJlbiBhcmdzIGVudlxuICB8IFN5bWJvbCBcInJhdyFcIiAtPlxuICAgICgqIEluamVjdCBwcmUtcmVuZGVyZWQgSFRNTCB3aXRob3V0IGVzY2FwaW5nICopXG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0LmhkIGFyZ3MpIChFbnYgZW52KSBpblxuICAgIChtYXRjaCB2IHdpdGhcbiAgICAgfCBTdHJpbmcgcyB8IFJhd0hUTUwgcyAtPiBzXG4gICAgIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgdilcbiAgfCBTeW1ib2wgdGFnIHdoZW4gaXNfaHRtbF90YWcgdGFnIC0+XG4gICAgcmVuZGVyX2h0bWxfZWxlbWVudCB0YWcgYXJncyBlbnZcbiAgfCBTeW1ib2wgXCJpZlwiIC0+XG4gICAgbGV0IGNvbmRfdmFsID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdC5oZCBhcmdzKSAoRW52IGVudikgaW5cbiAgICBpZiBzeF90cnV0aHkgY29uZF92YWwgdGhlblxuICAgICAgKGlmIExpc3QubGVuZ3RoIGFyZ3MgPiAxIHRoZW4gZG9fcmVuZGVyX3RvX2h0bWwgKExpc3QubnRoIGFyZ3MgMSkgZW52IGVsc2UgXCJcIilcbiAgICBlbHNlXG4gICAgICAoaWYgTGlzdC5sZW5ndGggYXJncyA+IDIgdGhlbiBkb19yZW5kZXJfdG9faHRtbCAoTGlzdC5udGggYXJncyAyKSBlbnYgZWxzZSBcIlwiKVxuICB8IFN5bWJvbCBcIndoZW5cIiAtPlxuICAgIGxldCBjb25kX3ZhbCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QuaGQgYXJncykgKEVudiBlbnYpIGluXG4gICAgaWYgc3hfdHJ1dGh5IGNvbmRfdmFsIHRoZW5cbiAgICAgIFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgKGZ1biBlIC0+IGRvX3JlbmRlcl90b19odG1sIGUgZW52KSAoTGlzdC50bCBhcmdzKSlcbiAgICBlbHNlIFwiXCJcbiAgfCBTeW1ib2wgXCJjb25kXCIgLT5cbiAgICByZW5kZXJfY29uZCBhcmdzIGVudlxuICB8IFN5bWJvbCBcImNhc2VcIiAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgZG9fcmVuZGVyX3RvX2h0bWwgdiBlbnZcbiAgfCBTeW1ib2wgKFwibGV0XCIgfCBcImxldCpcIikgLT5cbiAgICByZW5kZXJfbGV0IGFyZ3MgZW52XG4gIHwgU3ltYm9sIChcImJlZ2luXCIgfCBcImRvXCIpIC0+XG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IFwiXCJcbiAgICAgIHwgW2xhc3RdIC0+IGRvX3JlbmRlcl90b19odG1sIGxhc3QgZW52XG4gICAgICB8IGUgOjogcmVzdCAtPlxuICAgICAgICBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgZSAoRW52IGVudikpO1xuICAgICAgICBnbyByZXN0XG4gICAgaW4gZ28gYXJnc1xuICB8IFN5bWJvbCAoXCJkZWZpbmVcIiB8IFwiZGVmY29tcFwiIHwgXCJkZWZtYWNyb1wiIHwgXCJkZWZpc2xhbmRcIikgLT5cbiAgICBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSk7XG4gICAgXCJcIlxuICB8IFN5bWJvbCBcIm1hcFwiIC0+XG4gICAgcmVuZGVyX21hcCBhcmdzIGVudiBmYWxzZVxuICB8IFN5bWJvbCBcIm1hcC1pbmRleGVkXCIgLT5cbiAgICByZW5kZXJfbWFwIGFyZ3MgZW52IHRydWVcbiAgfCBTeW1ib2wgXCJmaWx0ZXJcIiAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgZG9fcmVuZGVyX3RvX2h0bWwgdiBlbnZcbiAgfCBTeW1ib2wgXCJmb3ItZWFjaFwiIC0+XG4gICAgcmVuZGVyX2Zvcl9lYWNoIGFyZ3MgZW52XG4gIHwgU3ltYm9sIG5hbWUgLT5cbiAgICAodHJ5XG4gICAgICBsZXQgdiA9IGVudl9nZXQgZW52IG5hbWUgaW5cbiAgICAgIChtYXRjaCB2IHdpdGhcbiAgICAgICB8IENvbXBvbmVudCBjIHdoZW4gYy5jX2FmZmluaXR5ID0gXCJjbGllbnRcIiAtPiBcIlwiICAoKiBza2lwIGNsaWVudC1vbmx5ICopXG4gICAgICAgfCBDb21wb25lbnQgXyAtPiByZW5kZXJfY29tcG9uZW50IHYgYXJncyBlbnZcbiAgICAgICB8IElzbGFuZCBfaSAtPlxuICAgICAgICAgbGV0IGNhbGxfc3ggPSBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIChmdW4gdiAtPlxuICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgfCBTeW1ib2wgcyAtPiBzIHwgS2V5d29yZCBrIC0+IFwiOlwiIF4gayB8IFN0cmluZyBzIC0+IFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiXG4gICAgICAgICAgIHwgXyAtPiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciB2XG4gICAgICAgICApIChTeW1ib2wgbmFtZSA6OiBhcmdzKSkgXiBcIilcIiBpblxuICAgICAgICAgUHJpbnRmLnNwcmludGYgXCI8c3BhbiBkYXRhLXN4LWlzbGFuZD1cXFwiJXNcXFwiPiVzPC9zcGFuPlwiIF9pLmlfbmFtZSBjYWxsX3N4XG4gICAgICAgfCBNYWNybyBtIC0+XG4gICAgICAgICBsZXQgZXhwYW5kZWQgPSBleHBhbmRfbWFjcm8gbSBhcmdzIGVudiBpblxuICAgICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgZXhwYW5kZWQgZW52XG4gICAgICAgfCBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgICAgICBkb19yZW5kZXJfdG9faHRtbCByZXN1bHQgZW52KVxuICAgIHdpdGggRXZhbF9lcnJvciBfIC0+XG4gICAgICAoKiBQcmltaXRpdmUgb3Igc3BlY2lhbCBmb3JtIOKAlCBub3QgaW4gZW52LCBkZWxlZ2F0ZSB0byBDRUsgKilcbiAgICAgICh0cnlcbiAgICAgICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgICAgICBkb19yZW5kZXJfdG9faHRtbCByZXN1bHQgZW52XG4gICAgICB3aXRoIEV2YWxfZXJyb3IgXyAtPiBcIlwiKSlcbiAgfCBfIC0+XG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgIGRvX3JlbmRlcl90b19odG1sIHJlc3VsdCBlbnZcblxuYW5kIHJlbmRlcl9jb25kIGFyZ3MgZW52ID1cbiAgbGV0IGFzX2xpc3QgPSBmdW5jdGlvbiBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gU29tZSBsIHwgXyAtPiBOb25lIGluXG4gIGxldCBpc19zY2hlbWUgPSBMaXN0LmZvcl9hbGwgKGZ1biBhIC0+IG1hdGNoIGFzX2xpc3QgYSB3aXRoXG4gICAgfCBTb21lIGl0ZW1zIHdoZW4gTGlzdC5sZW5ndGggaXRlbXMgPSAyIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2UpIGFyZ3NcbiAgaW5cbiAgaWYgaXNfc2NoZW1lIHRoZW4gYmVnaW5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gXCJcIlxuICAgICAgfCBjbGF1c2UgOjogcmVzdCAtPlxuICAgICAgICAobWF0Y2ggYXNfbGlzdCBjbGF1c2Ugd2l0aFxuICAgICAgICAgfCBTb21lIFt0ZXN0OyBib2R5XSAtPlxuICAgICAgICAgICBsZXQgaXNfZWxzZSA9IG1hdGNoIHRlc3Qgd2l0aFxuICAgICAgICAgICAgIHwgS2V5d29yZCBcImVsc2VcIiAtPiB0cnVlXG4gICAgICAgICAgICAgfCBTeW1ib2wgXCJlbHNlXCIgfCBTeW1ib2wgXCI6ZWxzZVwiIC0+IHRydWVcbiAgICAgICAgICAgICB8IF8gLT4gZmFsc2VcbiAgICAgICAgICAgaW5cbiAgICAgICAgICAgaWYgaXNfZWxzZSB0aGVuIGRvX3JlbmRlcl90b19odG1sIGJvZHkgZW52XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgdGVzdCAoRW52IGVudikgaW5cbiAgICAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGRvX3JlbmRlcl90b19odG1sIGJvZHkgZW52XG4gICAgICAgICAgICAgZWxzZSBnbyByZXN0XG4gICAgICAgICB8IF8gLT4gXCJcIilcbiAgICBpbiBnbyBhcmdzXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IFwiXCJcbiAgICAgIHwgW19dIC0+IFwiXCJcbiAgICAgIHwgdGVzdCA6OiBib2R5IDo6IHJlc3QgLT5cbiAgICAgICAgbGV0IGlzX2Vsc2UgPSBtYXRjaCB0ZXN0IHdpdGhcbiAgICAgICAgICB8IEtleXdvcmQgXCJlbHNlXCIgLT4gdHJ1ZVxuICAgICAgICAgIHwgU3ltYm9sIFwiZWxzZVwiIHwgU3ltYm9sIFwiOmVsc2VcIiAtPiB0cnVlXG4gICAgICAgICAgfCBfIC0+IGZhbHNlXG4gICAgICAgIGluXG4gICAgICAgIGlmIGlzX2Vsc2UgdGhlbiBkb19yZW5kZXJfdG9faHRtbCBib2R5IGVudlxuICAgICAgICBlbHNlXG4gICAgICAgICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIHRlc3QgKEVudiBlbnYpIGluXG4gICAgICAgICAgaWYgc3hfdHJ1dGh5IHYgdGhlbiBkb19yZW5kZXJfdG9faHRtbCBib2R5IGVudlxuICAgICAgICAgIGVsc2UgZ28gcmVzdFxuICAgIGluIGdvIGFyZ3NcbiAgZW5kXG5cbmFuZCByZW5kZXJfbGV0IGFyZ3MgZW52ID1cbiAgbGV0IGFzX2xpc3QgPSBmdW5jdGlvbiBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gU29tZSBsIHwgXyAtPiBOb25lIGluXG4gIGxldCBiaW5kaW5nc19leHByID0gTGlzdC5oZCBhcmdzIGluXG4gIGxldCBib2R5ID0gTGlzdC50bCBhcmdzIGluXG4gIGxldCBsb2NhbCA9IGVudl9leHRlbmQgZW52IGluXG4gIGxldCBiaW5kaW5ncyA9IG1hdGNoIGFzX2xpc3QgYmluZGluZ3NfZXhwciB3aXRoIFNvbWUgbCAtPiBsIHwgTm9uZSAtPiBbXSBpblxuICBsZXQgaXNfc2NoZW1lID0gbWF0Y2ggYmluZGluZ3Mgd2l0aFxuICAgIHwgKExpc3QgXyA6OiBfKSB8IChMaXN0UmVmIF8gOjogXykgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBpZiBpc19zY2hlbWUgdGhlblxuICAgIExpc3QuaXRlciAoZnVuIGIgLT5cbiAgICAgIG1hdGNoIGFzX2xpc3QgYiB3aXRoXG4gICAgICB8IFNvbWUgW1N5bWJvbCBuYW1lOyBleHByXSB8IFNvbWUgW1N0cmluZyBuYW1lOyBleHByXSAtPlxuICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGxvY2FsKSBpblxuICAgICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIG5hbWUgdilcbiAgICAgIHwgXyAtPiAoKVxuICAgICkgYmluZGluZ3NcbiAgZWxzZSBiZWdpblxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiAoKVxuICAgICAgfCAoU3ltYm9sIG5hbWUpIDo6IGV4cHIgOjogcmVzdCB8IChTdHJpbmcgbmFtZSkgOjogZXhwciA6OiByZXN0IC0+XG4gICAgICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgbG9jYWwpIGluXG4gICAgICAgIGlnbm9yZSAoZW52X2JpbmQgbG9jYWwgbmFtZSB2KTtcbiAgICAgICAgZ28gcmVzdFxuICAgICAgfCBfIC0+ICgpXG4gICAgaW4gZ28gYmluZGluZ3NcbiAgZW5kO1xuICBsZXQgcmVjIHJlbmRlcl9ib2R5ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IFwiXCJcbiAgICB8IFtsYXN0XSAtPiBkb19yZW5kZXJfdG9faHRtbCBsYXN0IGxvY2FsXG4gICAgfCBlIDo6IHJlc3QgLT5cbiAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciBlIChFbnYgbG9jYWwpKTtcbiAgICAgIHJlbmRlcl9ib2R5IHJlc3RcbiAgaW4gcmVuZGVyX2JvZHkgYm9keVxuXG5hbmQgcmVuZGVyX21hcCBhcmdzIGVudiBpbmRleGVkID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwaSAoZnVuIGkgaXRlbSAtPlxuICAgIGxldCBjYWxsX2FyZ3MgPSBpZiBpbmRleGVkIHRoZW4gW051bWJlciAoZmxvYXRfb2ZfaW50IGkpOyBpdGVtXSBlbHNlIFtpdGVtXSBpblxuICAgIG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPlxuICAgICAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCBsLmxfY2xvc3VyZSBpblxuICAgICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSkpXG4gICAgICAgIGwubF9wYXJhbXMgY2FsbF9hcmdzO1xuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgbC5sX2JvZHkgbG9jYWxcbiAgICB8IF8gLT5cbiAgICAgIGxldCByZXN1bHQgPSBTeF9ydW50aW1lLnN4X2NhbGwgZm5fdmFsIGNhbGxfYXJncyBpblxuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgcmVzdWx0IGVudlxuICApIGl0ZW1zKVxuXG5hbmQgcmVuZGVyX2Zvcl9lYWNoIGFyZ3MgZW52ID1cbiAgbGV0IChmbl92YWwsIGNvbGxfdmFsKSA9IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2E7IGJdIC0+XG4gICAgICBsZXQgdmEgPSBTeF9yZWYuZXZhbF9leHByIGEgKEVudiBlbnYpIGluXG4gICAgICBsZXQgdmIgPSBTeF9yZWYuZXZhbF9leHByIGIgKEVudiBlbnYpIGluXG4gICAgICAobWF0Y2ggdmEsIHZiIHdpdGhcbiAgICAgICB8IChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pLCBfIC0+ICh2YSwgdmIpXG4gICAgICAgfCBfLCAoTGFtYmRhIF8gfCBOYXRpdmVGbiBfKSAtPiAodmIsIHZhKVxuICAgICAgIHwgXyAtPiAodmEsIHZiKSlcbiAgICB8IF8gLT4gKE5pbCwgTmlsKVxuICBpblxuICBsZXQgaXRlbXMgPSBtYXRjaCBjb2xsX3ZhbCB3aXRoIExpc3QgbCB8IExpc3RSZWYgeyBjb250ZW50cyA9IGwgfSAtPiBsIHwgXyAtPiBbXSBpblxuICBTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gaXRlbSAtPlxuICAgIG1hdGNoIGZuX3ZhbCB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPlxuICAgICAgbGV0IGxvY2FsID0gZW52X2V4dGVuZCBsLmxfY2xvc3VyZSBpblxuICAgICAgTGlzdC5pdGVyMiAoZnVuIHAgYSAtPiBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgYSkpXG4gICAgICAgIGwubF9wYXJhbXMgW2l0ZW1dO1xuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgbC5sX2JvZHkgbG9jYWxcbiAgICB8IF8gLT5cbiAgICAgIGxldCByZXN1bHQgPSBTeF9ydW50aW1lLnN4X2NhbGwgZm5fdmFsIFtpdGVtXSBpblxuICAgICAgZG9fcmVuZGVyX3RvX2h0bWwgcmVzdWx0IGVudlxuICApIGl0ZW1zKVxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEJ1ZmZlci1iYXNlZCBzdHJlYW1pbmcgcmVuZGVyZXIg4oCUIHplcm8gaW50ZXJtZWRpYXRlIHN0cmluZyBhbGxvY2F0aW9uICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxuKCoqIEVzY2FwZSBIVE1MIGRpcmVjdGx5IGludG8gYSBidWZmZXIuICopXG5sZXQgZXNjYXBlX2h0bWxfYnVmIGJ1ZiBzID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgIHwgJyYnIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIiZhbXA7XCJcbiAgICB8ICc8JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImbHQ7XCJcbiAgICB8ICc+JyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCImZ3Q7XCJcbiAgICB8ICdcIicgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiJnF1b3Q7XCJcbiAgICB8IGMgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjXG4gIGRvbmVcblxuKCoqIFJlbmRlciBhdHRyaWJ1dGVzIGRpcmVjdGx5IGludG8gYSBidWZmZXIuICopXG5sZXQgcmVuZGVyX2F0dHJzX2J1ZiBidWYgYXR0cnMgPVxuICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICBpZiBpc19ib29sZWFuX2F0dHIgayB0aGVuIGJlZ2luXG4gICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJyAnO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYga1xuICAgICAgZW5kXG4gICAgZW5kIGVsc2UgaWYgbm90IChpc19uaWwgdikgdGhlbiBiZWdpblxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnICc7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgaztcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIj1cXFwiXCI7XG4gICAgICBlc2NhcGVfaHRtbF9idWYgYnVmICh2YWx1ZV90b19zdHJpbmcgdik7XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcbiAgICBlbmQpIGF0dHJzXG5cbigqKiBCdWZmZXItYmFzZWQgcmVuZGVyX3RvX2h0bWwg4oCUIHdyaXRlcyBkaXJlY3RseSwgbm8gaW50ZXJtZWRpYXRlIHN0cmluZ3MuICopXG5sZXQgcmVjIHJlbmRlcl90b19idWYgYnVmIChleHByIDogdmFsdWUpIChlbnYgOiBlbnYpIDogdW5pdCA9XG4gIG1hdGNoIGV4cHIgd2l0aFxuICB8IE5pbCAtPiAoKVxuICB8IEJvb2wgdHJ1ZSAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJ0cnVlXCJcbiAgfCBCb29sIGZhbHNlIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcImZhbHNlXCJcbiAgfCBOdW1iZXIgbiAtPlxuICAgIGlmIEZsb2F0LmlzX2ludGVnZXIgbiB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCAoaW50X29mX2Zsb2F0IG4pKVxuICAgIGVsc2UgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIiVnXCIgbilcbiAgfCBTdHJpbmcgcyAtPiBlc2NhcGVfaHRtbF9idWYgYnVmIHNcbiAgfCBLZXl3b3JkIGsgLT4gZXNjYXBlX2h0bWxfYnVmIGJ1ZiBrXG4gIHwgUmF3SFRNTCBzIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzXG4gIHwgU3hFeHByIHMgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNcbiAgfCBTeW1ib2wgcyAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoU3ltYm9sIHMpIChFbnYgZW52KSBpblxuICAgIHJlbmRlcl90b19idWYgYnVmIHYgZW52XG4gIHwgTGlzdCBbXSB8IExpc3RSZWYgeyBjb250ZW50cyA9IFtdIH0gLT4gKClcbiAgfCBMaXN0IChoZWFkIDo6IGFyZ3MpIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaGVhZCA6OiBhcmdzIH0gLT5cbiAgICByZW5kZXJfbGlzdF9idWYgYnVmIGhlYWQgYXJncyBlbnZcbiAgfCBfIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBlbnYpIGluXG4gICAgcmVuZGVyX3RvX2J1ZiBidWYgdiBlbnZcblxuYW5kIHJlbmRlcl9saXN0X2J1ZiBidWYgaGVhZCBhcmdzIGVudiA9XG4gIG1hdGNoIGhlYWQgd2l0aFxuICB8IFN5bWJvbCBcIjw+XCIgLT5cbiAgICBMaXN0Lml0ZXIgKGZ1biBjIC0+IHJlbmRlcl90b19idWYgYnVmIGMgZW52KSBhcmdzXG4gIHwgU3ltYm9sIFwicmF3IVwiIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0LmhkIGFyZ3MpIChFbnYgZW52KSBpblxuICAgIChtYXRjaCB2IHdpdGhcbiAgICAgfCBTdHJpbmcgcyB8IFJhd0hUTUwgcyAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc1xuICAgICB8IF8gLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmICh2YWx1ZV90b19zdHJpbmcgdikpXG4gIHwgU3ltYm9sIHRhZyB3aGVuIGlzX2h0bWxfdGFnIHRhZyAtPlxuICAgIHJlbmRlcl9lbGVtZW50X2J1ZiBidWYgdGFnIGFyZ3MgZW52XG4gIHwgU3ltYm9sIFwiaWZcIiAtPlxuICAgIGxldCBjb25kX3ZhbCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QuaGQgYXJncykgKEVudiBlbnYpIGluXG4gICAgaWYgc3hfdHJ1dGh5IGNvbmRfdmFsIHRoZW5cbiAgICAgIChpZiBMaXN0Lmxlbmd0aCBhcmdzID4gMSB0aGVuIHJlbmRlcl90b19idWYgYnVmIChMaXN0Lm50aCBhcmdzIDEpIGVudilcbiAgICBlbHNlXG4gICAgICAoaWYgTGlzdC5sZW5ndGggYXJncyA+IDIgdGhlbiByZW5kZXJfdG9fYnVmIGJ1ZiAoTGlzdC5udGggYXJncyAyKSBlbnYpXG4gIHwgU3ltYm9sIFwid2hlblwiIC0+XG4gICAgbGV0IGNvbmRfdmFsID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdC5oZCBhcmdzKSAoRW52IGVudikgaW5cbiAgICBpZiBzeF90cnV0aHkgY29uZF92YWwgdGhlblxuICAgICAgTGlzdC5pdGVyIChmdW4gZSAtPiByZW5kZXJfdG9fYnVmIGJ1ZiBlIGVudikgKExpc3QudGwgYXJncylcbiAgfCBTeW1ib2wgXCJjb25kXCIgLT5cbiAgICByZW5kZXJfY29uZF9idWYgYnVmIGFyZ3MgZW52XG4gIHwgU3ltYm9sIFwiY2FzZVwiIC0+XG4gICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0IChoZWFkIDo6IGFyZ3MpKSAoRW52IGVudikgaW5cbiAgICByZW5kZXJfdG9fYnVmIGJ1ZiB2IGVudlxuICB8IFN5bWJvbCAoXCJsZXRcIiB8IFwibGV0KlwiKSAtPlxuICAgIHJlbmRlcl9sZXRfYnVmIGJ1ZiBhcmdzIGVudlxuICB8IFN5bWJvbCAoXCJiZWdpblwiIHwgXCJkb1wiKSAtPlxuICAgIGxldCByZWMgZ28gPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiAoKVxuICAgICAgfCBbbGFzdF0gLT4gcmVuZGVyX3RvX2J1ZiBidWYgbGFzdCBlbnZcbiAgICAgIHwgZSA6OiByZXN0IC0+IGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciBlIChFbnYgZW52KSk7IGdvIHJlc3RcbiAgICBpbiBnbyBhcmdzXG4gIHwgU3ltYm9sIChcImRlZmluZVwiIHwgXCJkZWZjb21wXCIgfCBcImRlZm1hY3JvXCIgfCBcImRlZmlzbGFuZFwiKSAtPlxuICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpKVxuICB8IFN5bWJvbCBcIm1hcFwiIC0+IHJlbmRlcl9tYXBfYnVmIGJ1ZiBhcmdzIGVudiBmYWxzZVxuICB8IFN5bWJvbCBcIm1hcC1pbmRleGVkXCIgLT4gcmVuZGVyX21hcF9idWYgYnVmIGFyZ3MgZW52IHRydWVcbiAgfCBTeW1ib2wgXCJmaWx0ZXJcIiAtPlxuICAgIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgcmVuZGVyX3RvX2J1ZiBidWYgdiBlbnZcbiAgfCBTeW1ib2wgXCJmb3ItZWFjaFwiIC0+IHJlbmRlcl9mb3JfZWFjaF9idWYgYnVmIGFyZ3MgZW52XG4gIHwgU3ltYm9sIG5hbWUgLT5cbiAgICAodHJ5XG4gICAgICBsZXQgdiA9IGVudl9nZXQgZW52IG5hbWUgaW5cbiAgICAgIChtYXRjaCB2IHdpdGhcbiAgICAgICB8IENvbXBvbmVudCBjIHdoZW4gYy5jX2FmZmluaXR5ID0gXCJjbGllbnRcIiAtPiAoKVxuICAgICAgIHwgQ29tcG9uZW50IF8gLT4gcmVuZGVyX2NvbXBvbmVudF9idWYgYnVmIHYgYXJncyBlbnZcbiAgICAgICB8IElzbGFuZCBfaSAtPlxuICAgICAgICAgKCogSXNsYW5kcyBhcmUgY2xpZW50LXJlbmRlcmVkIOKAlCBlbWl0IHBsYWNlaG9sZGVyIHdpdGggU1ggY2FsbFxuICAgICAgICAgICAgZXhwcmVzc2lvbiBzbyB0aGUgY2xpZW50IGNhbiBoeWRyYXRlIGZyb20gc291cmNlLiAqKVxuICAgICAgICAgbGV0IGNhbGxfc3ggPSBcIihcIiBeIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIChmdW4gdiAtPlxuICAgICAgICAgICBtYXRjaCB2IHdpdGhcbiAgICAgICAgICAgfCBTeW1ib2wgcyAtPiBzIHwgS2V5d29yZCBrIC0+IFwiOlwiIF4gayB8IFN0cmluZyBzIC0+IFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiXG4gICAgICAgICAgIHwgXyAtPiBTeF9ydW50aW1lLnZhbHVlX3RvX3N0ciB2XG4gICAgICAgICApIChTeW1ib2wgbmFtZSA6OiBhcmdzKSkgXiBcIilcIiBpblxuICAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChQcmludGYuc3ByaW50ZiBcIjxzcGFuIGRhdGEtc3gtaXNsYW5kPVxcXCIlc1xcXCI+JXM8L3NwYW4+XCJcbiAgICAgICAgICAgX2kuaV9uYW1lIGNhbGxfc3gpXG4gICAgICAgfCBNYWNybyBtIC0+XG4gICAgICAgICBsZXQgZXhwYW5kZWQgPSBleHBhbmRfbWFjcm8gbSBhcmdzIGVudiBpblxuICAgICAgICAgcmVuZGVyX3RvX2J1ZiBidWYgZXhwYW5kZWQgZW52XG4gICAgICAgfCBfIC0+XG4gICAgICAgICBsZXQgcmVzdWx0ID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCAoaGVhZCA6OiBhcmdzKSkgKEVudiBlbnYpIGluXG4gICAgICAgICByZW5kZXJfdG9fYnVmIGJ1ZiByZXN1bHQgZW52KVxuICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICgqIFVua25vd24gc3ltYm9sL2NvbXBvbmVudCDigJQgc2tpcCBzaWxlbnRseSBkdXJpbmcgU1NSLlxuICAgICAgICAgVGhlIGNsaWVudCB3aWxsIHJlbmRlciBmcm9tIHBhZ2Utc3guICopXG4gICAgICBQcmludGYuZXByaW50ZiBcIltzc3Itc2tpcF0gJXNcXG4lIVwiIG1zZylcbiAgfCBfIC0+XG4gICAgKHRyeVxuICAgICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgKExpc3QgKGhlYWQgOjogYXJncykpIChFbnYgZW52KSBpblxuICAgICAgcmVuZGVyX3RvX2J1ZiBidWYgcmVzdWx0IGVudlxuICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgIFByaW50Zi5lcHJpbnRmIFwiW3Nzci1za2lwXSAlc1xcbiUhXCIgbXNnKVxuXG5hbmQgcmVuZGVyX2VsZW1lbnRfYnVmIGJ1ZiB0YWcgYXJncyBlbnYgPVxuICBsZXQgKGF0dHJzLCBjaGlsZHJlbikgPSBwYXJzZV9lbGVtZW50X2FyZ3MgYXJncyBlbnYgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnPCc7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiB0YWc7XG4gIHJlbmRlcl9hdHRyc19idWYgYnVmIGF0dHJzO1xuICBpZiBpc192b2lkIHRhZyB0aGVuXG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiIC8+XCJcbiAgZWxzZSBiZWdpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgJz4nO1xuICAgIExpc3QuaXRlciAoZnVuIGMgLT4gcmVuZGVyX3RvX2J1ZiBidWYgYyBlbnYpIGNoaWxkcmVuO1xuICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIjwvXCI7XG4gICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHRhZztcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmICc+J1xuICBlbmRcblxuYW5kIHJlbmRlcl9jb21wb25lbnRfYnVmIGJ1ZiBjb21wIGFyZ3MgZW52ID1cbiAgbWF0Y2ggY29tcCB3aXRoXG4gIHwgQ29tcG9uZW50IGMgLT5cbiAgICBsZXQga3dhcmdzID0gSGFzaHRibC5jcmVhdGUgOCBpblxuICAgIGxldCBjaGlsZHJlbl9leHBycyA9IHJlZiBbXSBpblxuICAgIGxldCBza2lwID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGFyZ3MgaW5cbiAgICBMaXN0Lml0ZXJpIChmdW4gaWR4IGFyZyAtPlxuICAgICAgaWYgIXNraXAgdGhlbiBza2lwIDo9IGZhbHNlXG4gICAgICBlbHNlIG1hdGNoIGFyZyB3aXRoXG4gICAgICB8IEtleXdvcmQgayB3aGVuIGlkeCArIDEgPCBsZW4gLT5cbiAgICAgICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIChMaXN0Lm50aCBhcmdzIChpZHggKyAxKSkgKEVudiBlbnYpIGluXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSBrd2FyZ3MgayB2O1xuICAgICAgICBza2lwIDo9IHRydWVcbiAgICAgIHwgXyAtPiBjaGlsZHJlbl9leHBycyA6PSBhcmcgOjogIWNoaWxkcmVuX2V4cHJzXG4gICAgKSBhcmdzO1xuICAgIGxldCBjaGlsZHJlbiA9IExpc3QucmV2ICFjaGlsZHJlbl9leHBycyBpblxuICAgIGxldCBsb2NhbCA9IGVudl9tZXJnZSBjLmNfY2xvc3VyZSBlbnYgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biBwIC0+XG4gICAgICBsZXQgdiA9IG1hdGNoIEhhc2h0YmwuZmluZF9vcHQga3dhcmdzIHAgd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gTmlsIGluXG4gICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIHAgdilcbiAgICApIGMuY19wYXJhbXM7XG4gICAgaWYgYy5jX2hhc19jaGlsZHJlbiB0aGVuIGJlZ2luXG4gICAgICBsZXQgY2hpbGRfYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIGMgLT4gcmVuZGVyX3RvX2J1ZiBjaGlsZF9idWYgYyBlbnYpIGNoaWxkcmVuO1xuICAgICAgaWdub3JlIChlbnZfYmluZCBsb2NhbCBcImNoaWxkcmVuXCIgKFJhd0hUTUwgKEJ1ZmZlci5jb250ZW50cyBjaGlsZF9idWYpKSlcbiAgICBlbmQ7XG4gICAgcmVuZGVyX3RvX2J1ZiBidWYgYy5jX2JvZHkgbG9jYWxcbiAgfCBfIC0+ICgpXG5cbmFuZCByZW5kZXJfY29uZF9idWYgYnVmIGFyZ3MgZW52ID1cbiAgbGV0IGFzX2xpc3QgPSBmdW5jdGlvbiBMaXN0IGwgfCBMaXN0UmVmIHsgY29udGVudHMgPSBsIH0gLT4gU29tZSBsIHwgXyAtPiBOb25lIGluXG4gIGxldCBpc19zY2hlbWUgPSBMaXN0LmZvcl9hbGwgKGZ1biBhIC0+IG1hdGNoIGFzX2xpc3QgYSB3aXRoXG4gICAgfCBTb21lIGl0ZW1zIHdoZW4gTGlzdC5sZW5ndGggaXRlbXMgPSAyIC0+IHRydWUgfCBfIC0+IGZhbHNlKSBhcmdzIGluXG4gIGlmIGlzX3NjaGVtZSB0aGVuIGJlZ2luXG4gICAgbGV0IHJlYyBnbyA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+ICgpXG4gICAgICB8IGNsYXVzZSA6OiByZXN0IC0+XG4gICAgICAgIChtYXRjaCBhc19saXN0IGNsYXVzZSB3aXRoXG4gICAgICAgICB8IFNvbWUgW3Rlc3Q7IGJvZHldIC0+XG4gICAgICAgICAgIGxldCBpc19lbHNlID0gbWF0Y2ggdGVzdCB3aXRoXG4gICAgICAgICAgICAgfCBLZXl3b3JkIFwiZWxzZVwiIHwgU3ltYm9sIFwiZWxzZVwiIHwgU3ltYm9sIFwiOmVsc2VcIiAtPiB0cnVlIHwgXyAtPiBmYWxzZSBpblxuICAgICAgICAgICBpZiBpc19lbHNlIHRoZW4gcmVuZGVyX3RvX2J1ZiBidWYgYm9keSBlbnZcbiAgICAgICAgICAgZWxzZSBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgdGVzdCAoRW52IGVudikgaW5cbiAgICAgICAgICAgICBpZiBzeF90cnV0aHkgdiB0aGVuIHJlbmRlcl90b19idWYgYnVmIGJvZHkgZW52IGVsc2UgZ28gcmVzdFxuICAgICAgICAgfCBfIC0+ICgpKVxuICAgIGluIGdvIGFyZ3NcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gKCkgfCBbX10gLT4gKClcbiAgICAgIHwgdGVzdCA6OiBib2R5IDo6IHJlc3QgLT5cbiAgICAgICAgbGV0IGlzX2Vsc2UgPSBtYXRjaCB0ZXN0IHdpdGhcbiAgICAgICAgICB8IEtleXdvcmQgXCJlbHNlXCIgfCBTeW1ib2wgXCJlbHNlXCIgfCBTeW1ib2wgXCI6ZWxzZVwiIC0+IHRydWUgfCBfIC0+IGZhbHNlIGluXG4gICAgICAgIGlmIGlzX2Vsc2UgdGhlbiByZW5kZXJfdG9fYnVmIGJ1ZiBib2R5IGVudlxuICAgICAgICBlbHNlIGxldCB2ID0gU3hfcmVmLmV2YWxfZXhwciB0ZXN0IChFbnYgZW52KSBpblxuICAgICAgICAgIGlmIHN4X3RydXRoeSB2IHRoZW4gcmVuZGVyX3RvX2J1ZiBidWYgYm9keSBlbnYgZWxzZSBnbyByZXN0XG4gICAgaW4gZ28gYXJnc1xuICBlbmRcblxuYW5kIHJlbmRlcl9sZXRfYnVmIGJ1ZiBhcmdzIGVudiA9XG4gIGxldCBhc19saXN0ID0gZnVuY3Rpb24gTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IFNvbWUgbCB8IF8gLT4gTm9uZSBpblxuICBsZXQgYmluZGluZ3NfZXhwciA9IExpc3QuaGQgYXJncyBpblxuICBsZXQgYm9keSA9IExpc3QudGwgYXJncyBpblxuICBsZXQgbG9jYWwgPSBlbnZfZXh0ZW5kIGVudiBpblxuICBsZXQgYmluZGluZ3MgPSBtYXRjaCBhc19saXN0IGJpbmRpbmdzX2V4cHIgd2l0aCBTb21lIGwgLT4gbCB8IE5vbmUgLT4gW10gaW5cbiAgbGV0IGlzX3NjaGVtZSA9IG1hdGNoIGJpbmRpbmdzIHdpdGggKExpc3QgXyA6OiBfKSB8IChMaXN0UmVmIF8gOjogXykgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UgaW5cbiAgaWYgaXNfc2NoZW1lIHRoZW5cbiAgICBMaXN0Lml0ZXIgKGZ1biBiIC0+XG4gICAgICBtYXRjaCBhc19saXN0IGIgd2l0aFxuICAgICAgfCBTb21lIFtTeW1ib2wgbmFtZTsgZXhwcl0gfCBTb21lIFtTdHJpbmcgbmFtZTsgZXhwcl0gLT5cbiAgICAgICAgbGV0IHYgPSBTeF9yZWYuZXZhbF9leHByIGV4cHIgKEVudiBsb2NhbCkgaW5cbiAgICAgICAgaWdub3JlIChlbnZfYmluZCBsb2NhbCBuYW1lIHYpXG4gICAgICB8IF8gLT4gKClcbiAgICApIGJpbmRpbmdzXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgcmVjIGdvID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gKClcbiAgICAgIHwgKFN5bWJvbCBuYW1lKSA6OiBleHByIDo6IHJlc3QgfCAoU3RyaW5nIG5hbWUpIDo6IGV4cHIgOjogcmVzdCAtPlxuICAgICAgICBsZXQgdiA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGxvY2FsKSBpblxuICAgICAgICBpZ25vcmUgKGVudl9iaW5kIGxvY2FsIG5hbWUgdik7IGdvIHJlc3RcbiAgICAgIHwgXyAtPiAoKVxuICAgIGluIGdvIGJpbmRpbmdzXG4gIGVuZDtcbiAgbGV0IHJlYyByZW5kZXJfYm9keSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiAoKVxuICAgIHwgW2xhc3RdIC0+IHJlbmRlcl90b19idWYgYnVmIGxhc3QgbG9jYWxcbiAgICB8IGUgOjogcmVzdCAtPiBpZ25vcmUgKFN4X3JlZi5ldmFsX2V4cHIgZSAoRW52IGxvY2FsKSk7IHJlbmRlcl9ib2R5IHJlc3RcbiAgaW4gcmVuZGVyX2JvZHkgYm9keVxuXG5hbmQgcmVuZGVyX21hcF9idWYgYnVmIGFyZ3MgZW52IGluZGV4ZWQgPVxuICBsZXQgKGZuX3ZhbCwgY29sbF92YWwpID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCB2YSA9IFN4X3JlZi5ldmFsX2V4cHIgYSAoRW52IGVudikgaW5cbiAgICAgIGxldCB2YiA9IFN4X3JlZi5ldmFsX2V4cHIgYiAoRW52IGVudikgaW5cbiAgICAgIChtYXRjaCB2YSwgdmIgd2l0aFxuICAgICAgIHwgKExhbWJkYSBfIHwgTmF0aXZlRm4gXyksIF8gLT4gKHZhLCB2YilcbiAgICAgICB8IF8sIChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pIC0+ICh2YiwgdmEpXG4gICAgICAgfCBfIC0+ICh2YSwgdmIpKVxuICAgIHwgXyAtPiAoTmlsLCBOaWwpXG4gIGluXG4gIGxldCBpdGVtcyA9IG1hdGNoIGNvbGxfdmFsIHdpdGggTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IGwgfCBfIC0+IFtdIGluXG4gIExpc3QuaXRlcmkgKGZ1biBpIGl0ZW0gLT5cbiAgICBsZXQgY2FsbF9hcmdzID0gaWYgaW5kZXhlZCB0aGVuIFtOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgaXRlbV0gZWxzZSBbaXRlbV0gaW5cbiAgICBtYXRjaCBmbl92YWwgd2l0aFxuICAgIHwgTGFtYmRhIGwgLT5cbiAgICAgIGxldCBsb2NhbCA9IGVudl9leHRlbmQgbC5sX2Nsb3N1cmUgaW5cbiAgICAgIExpc3QuaXRlcjIgKGZ1biBwIGEgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIGEpKSBsLmxfcGFyYW1zIGNhbGxfYXJncztcbiAgICAgIHJlbmRlcl90b19idWYgYnVmIGwubF9ib2R5IGxvY2FsXG4gICAgfCBfIC0+XG4gICAgICBsZXQgcmVzdWx0ID0gU3hfcnVudGltZS5zeF9jYWxsIGZuX3ZhbCBjYWxsX2FyZ3MgaW5cbiAgICAgIHJlbmRlcl90b19idWYgYnVmIHJlc3VsdCBlbnZcbiAgKSBpdGVtc1xuXG5hbmQgcmVuZGVyX2Zvcl9lYWNoX2J1ZiBidWYgYXJncyBlbnYgPVxuICBsZXQgKGZuX3ZhbCwgY29sbF92YWwpID0gbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbYTsgYl0gLT5cbiAgICAgIGxldCB2YSA9IFN4X3JlZi5ldmFsX2V4cHIgYSAoRW52IGVudikgaW5cbiAgICAgIGxldCB2YiA9IFN4X3JlZi5ldmFsX2V4cHIgYiAoRW52IGVudikgaW5cbiAgICAgIChtYXRjaCB2YSwgdmIgd2l0aFxuICAgICAgIHwgKExhbWJkYSBfIHwgTmF0aXZlRm4gXyksIF8gLT4gKHZhLCB2YilcbiAgICAgICB8IF8sIChMYW1iZGEgXyB8IE5hdGl2ZUZuIF8pIC0+ICh2YiwgdmEpXG4gICAgICAgfCBfIC0+ICh2YSwgdmIpKVxuICAgIHwgXyAtPiAoTmlsLCBOaWwpXG4gIGluXG4gIGxldCBpdGVtcyA9IG1hdGNoIGNvbGxfdmFsIHdpdGggTGlzdCBsIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gbCB9IC0+IGwgfCBfIC0+IFtdIGluXG4gIExpc3QuaXRlciAoZnVuIGl0ZW0gLT5cbiAgICBtYXRjaCBmbl92YWwgd2l0aFxuICAgIHwgTGFtYmRhIGwgLT5cbiAgICAgIGxldCBsb2NhbCA9IGVudl9leHRlbmQgbC5sX2Nsb3N1cmUgaW5cbiAgICAgIExpc3QuaXRlcjIgKGZ1biBwIGEgLT4gaWdub3JlIChlbnZfYmluZCBsb2NhbCBwIGEpKSBsLmxfcGFyYW1zIFtpdGVtXTtcbiAgICAgIHJlbmRlcl90b19idWYgYnVmIGwubF9ib2R5IGxvY2FsXG4gICAgfCBfIC0+XG4gICAgICBsZXQgcmVzdWx0ID0gU3hfcnVudGltZS5zeF9jYWxsIGZuX3ZhbCBbaXRlbV0gaW5cbiAgICAgIHJlbmRlcl90b19idWYgYnVmIHJlc3VsdCBlbnZcbiAgKSBpdGVtc1xuXG4oKiogUHVibGljIEFQSTogcmVuZGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIuICopXG5sZXQgcmVuZGVyX3RvX2J1ZmZlciBidWYgZXhwciBlbnYgPSByZW5kZXJfdG9fYnVmIGJ1ZiBleHByIGVudlxuXG4oKiogQ29udmVuaWVuY2U6IHJlbmRlciB0byBzdHJpbmcgdXNpbmcgdGhlIGJ1ZmZlciByZW5kZXJlci4gKilcbmxldCByZW5kZXJfdG9faHRtbF9zdHJlYW1pbmcgZXhwciBlbnYgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NTUzNiBpblxuICByZW5kZXJfdG9fYnVmIGJ1ZiBleHByIGVudjtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFNldHVwIOKAlCBiaW5kIHJlbmRlciBwcmltaXRpdmVzIGluIGFuIGVudiBhbmQgd2lyZSB1cCB0aGUgcmVmICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IHNldHVwX3JlbmRlcl9lbnYgZW52ID1cbiAgcmVuZGVyX3RvX2h0bWxfcmVmIDo9IGRvX3JlbmRlcl90b19odG1sO1xuXG4gIGxldCBiaW5kIG5hbWUgZm4gPVxuICAgIGlnbm9yZSAoZW52X2JpbmQgZW52IG5hbWUgKE5hdGl2ZUZuIChuYW1lLCBmbikpKVxuICBpblxuXG4gIGJpbmQgXCJyZW5kZXItaHRtbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgbGV0IGV4cHIgPSBtYXRjaCBleHBycyB3aXRoXG4gICAgICAgIHwgW2VdIC0+IGVcbiAgICAgICAgfCBbXSAtPiBOaWxcbiAgICAgICAgfCBfIC0+IExpc3QgKFN5bWJvbCBcImRvXCIgOjogZXhwcnMpXG4gICAgICBpblxuICAgICAgU3RyaW5nIChyZW5kZXJfdG9faHRtbCBleHByIGVudilcbiAgICB8IFtleHByXSAtPlxuICAgICAgU3RyaW5nIChyZW5kZXJfdG9faHRtbCBleHByIGVudilcbiAgICB8IFtleHByOyBFbnYgZV0gLT5cbiAgICAgIFN0cmluZyAocmVuZGVyX3RvX2h0bWwgZXhwciBlKVxuICAgIHwgXyAtPiBTdHJpbmcgXCJcIik7XG5cbiAgYmluZCBcInJlbmRlci10by1odG1sXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gLT5cbiAgICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgICBsZXQgZXhwciA9IG1hdGNoIGV4cHJzIHdpdGhcbiAgICAgICAgfCBbZV0gLT4gZVxuICAgICAgICB8IFtdIC0+IE5pbFxuICAgICAgICB8IF8gLT4gTGlzdCAoU3ltYm9sIFwiZG9cIiA6OiBleHBycylcbiAgICAgIGluXG4gICAgICBTdHJpbmcgKHJlbmRlcl90b19odG1sIGV4cHIgZW52KVxuICAgIHwgW2V4cHJdIC0+XG4gICAgICBTdHJpbmcgKHJlbmRlcl90b19odG1sIGV4cHIgZW52KVxuICAgIHwgW2V4cHI7IEVudiBlXSAtPlxuICAgICAgU3RyaW5nIChyZW5kZXJfdG9faHRtbCBleHByIGUpXG4gICAgfCBfIC0+IFN0cmluZyBcIlwiKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXkiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJjc3RfYnIiLCJjc3RfY29sIiwiY3N0X2VtYmVkIiwiY3N0X2ZpbHRlciIsImNzdF9ociIsImNzdF9pbWciLCJjc3RfaW5wdXQiLCJjc3RfbGluayIsImNzdF9tZXRhIiwiY3N0X3BhcmFtIiwiY3N0X3NvdXJjZSIsImNzdF93YnIiLCJodG1sX3RhZ3MiLCJ2b2lkX2VsZW1lbnRzIiwiYm9vbGVhbl9hdHRycyIsIlN4X3JlZiIsIlN0ZGxpYl9GbG9hdCIsIlN0ZGxpYiIsIlN0ZGxpYl9QcmludGYiLCJTeF9ydW50aW1lIiwiU3RkbGliX0xpc3QiLCJTeF90eXBlcyIsIlN0ZGxpYl9TdHJpbmciLCJTdGRsaWJfQnVmZmVyIiwiU3RkbGliX0hhc2h0YmwiLCJTeF9wYXJzZXIiLCJpc19odG1sX3RhZyIsIm5hbWUiLCJpc192b2lkIiwiaXNfYm9vbGVhbl9hdHRyIiwiY3N0X2FtcCIsImNzdF9ndCIsImNzdF9sdCIsImNzdF9xdW90IiwiZXNjYXBlX2h0bWwiLCJzIiwiYnVmIiwiYyIsImNzdCIsInJlbmRlcl9hdHRycyIsImF0dHJzIiwiayIsInYiLCJyZW5kZXJfdG9faHRtbF9yZWYiLCJleHByIiwiZW52IiwicmVuZGVyX3RvX2h0bWwiLCJjc3RfcmVuZGVyX3RvX2h0bWwiLCJzeF9yZW5kZXJfdG9faHRtbCIsInJlbmRlcl9lbnYiLCJldmFsX2VudiIsImZuIiwicmVzdWx0IiwicmVuZGVyX2NoaWxkcmVuIiwiY2hpbGRyZW4iLCJwYXJzZV9lbGVtZW50X2FyZ3MiLCJhcmdzIiwibGVuIiwic2tpcCIsImlkeCIsImFyZyIsInBhaXJzIiwicGFyYW0iLCJyZW5kZXJfaHRtbF9lbGVtZW50IiwidGFnIiwibWF0Y2giLCJhdHRyX3N0ciIsImNvbnRlbnQiLCJjc3RfY2hpbGRyZW4iLCJyZW5kZXJfY29tcG9uZW50IiwiY29tcCIsImt3YXJncyIsImNoaWxkcmVuX2V4cHJzIiwibG9jYWwiLCJwIiwicmVuZGVyZWRfY2hpbGRyZW4iLCJleHBhbmRfbWFjcm8iLCJtIiwicGFyYW1zIiwicHMiLCJhcyIsInJwIiwicHNfcmVzdCIsImFzX3Jlc3QiLCJhIiwiY3N0X2ciLCJjc3RfZmFsc2UiLCJjc3RfdHJ1ZSIsImRvX3JlbmRlcl90b19odG1sIiwiY291bnRlciIsIm4iLCJoZWFkIiwiY3N0X3NwYW4iLCJjc3Rfc3Bhbl9kYXRhX3N4X2lzbGFuZCIsImNzdF9zcGFuX2RhdGFfc3hfaXNsYW5kX3Nfc19zcCIsImNzdF9iZWdpbiIsImNzdF9jYXNlIiwiY3N0X2NsaWVudCIsImNzdF9jb25kIiwiY3N0X2RlZmNvbXAiLCJjc3RfZGVmaW5lIiwiY3N0X2RlZmlzbGFuZCIsImNzdF9kZWZtYWNybyIsImNzdF9kbyIsImNzdF9mb3JfZWFjaCIsImNzdF9pZiIsImNzdF9sZXQiLCJjc3RfbWFwIiwiY3N0X21hcF9pbmRleGVkIiwiY3N0X3JhdyIsImNzdF93aGVuIiwicmVuZGVyX2xpc3RfdG9faHRtbCIsInN3aXRjaCQiLCJjb25kX3ZhbCIsImUiLCJsYXN0IiwicmVzdCIsImkiLCJjYWxsX3N4IiwiZXhwYW5kZWQiLCJleG4iLCJjc3RfZWxzZSIsInJlbmRlcl9jb25kIiwiYXNfbGlzdCIsImwiLCJpc19zY2hlbWUiLCJpdGVtcyIsImNsYXVzZSIsImJvZHkiLCJ0ZXN0IiwiaXNfZWxzZSIsInJlbmRlcl9sZXQiLCJiaW5kaW5nc19leHByIiwiYmluZGluZ3MiLCJiIiwicmVuZGVyX21hcCIsImluZGV4ZWQiLCJ2YSIsInZiIiwiY29sbF92YWwiLCJmbl92YWwiLCJpdGVtIiwiY2FsbF9hcmdzIiwicmVuZGVyX2Zvcl9lYWNoIiwiZXNjYXBlX2h0bWxfYnVmIiwicmVuZGVyX2F0dHJzX2J1ZiIsInJlbmRlcl90b19idWYiLCJjc3Rfc3NyX3NraXAiLCJjc3Rfc3NyX3NraXBfcyIsInJlbmRlcl9saXN0X2J1ZiIsIm1zZyIsInJlbmRlcl9lbGVtZW50X2J1ZiIsInJlbmRlcl9jb21wb25lbnRfYnVmIiwiY2hpbGRfYnVmIiwicmVuZGVyX2NvbmRfYnVmIiwicmVuZGVyX2xldF9idWYiLCJyZW5kZXJfbWFwX2J1ZiIsInJlbmRlcl9mb3JfZWFjaF9idWYiLCJyZW5kZXJfdG9fYnVmZmVyIiwicmVuZGVyX3RvX2h0bWxfc3RyZWFtaW5nIiwic2V0dXBfcmVuZGVyX2VudiIsImJpbmQiLCJzcmMiLCJleHBycyJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyx3QkFBQTtBQUFBLElBQUFDLDhCQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMseUJBQUE7QUFBQSxJQUFBQyxzQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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QSxZQUFBa0gseUJBQUFuSCxNQUFBQztBQUFBQSxRQUFBVCxNQUlsRDtBQUFBLElBQ1Y7QUFBQSxJQUEwQix1Q0FDUDtBQUFBO0FBQUEsV0Rwc0JyQjtBQUFBLFlBQUE0SCxpQkFBQW5IO0FBQUFBLElDNHNCRTtBQUFBLGFBQUFvSCxLQUFBdEksTUFBQXdCO0FBQUFBLEtBR1M7QUFBQSxLQUF5QztBQUFBO0FBQUEsSUFHbEQ7QUFBQTtBQUFBLGVBQUFLO0FBQUFBLE9BQ0U7QUFBQSxZQUFBWixPQUFBO0FBQUE7QUFBQSxhQUFBc0gsTUFBQSxTQUFBQyxRQUVjO0FBQUEsU0FDWjtBQUFBO0FBQUEsZUFBQXZILFNBR1M7QUFBQTtBQUFBLGVBQUFzRSxNQUhULFVBQUF0RSxTQUNXO0FBQUE7QUFBQSxjQUFBQSxTQUNEO0FBQUEsU0FHSCx1Q0FBeUI7QUFBQTtBQUFBLFlBQUFxQixRQVJsQztBQUFBLG9CQVVTLHFDQUF5QjtBQUFBLGdCQVZsQztBQUFBLG1FQUFBaUQsSUFBQSxNQVlTLG1DQUF1QjtBQUFBO0FBQUEsT0FDekI7QUFBQSxNQUFTO0FBQUEsSUFBQztBQUFBO0FBQUEsc0JBQUExRDtBQUFBQSxjQUdqQjtBQUFBLG1CQUFBWixPQUFBO0FBQUE7QUFBQSxvQkFBQXNILE1BQUEsU0FBQUMsUUFFYztBQUFBLGdCQUNaO0FBQUE7QUFBQSxzQkFBQXZILFNBR1M7QUFBQTtBQUFBLHNCQUFBc0UsTUFIVCxVQUFBdEUsU0FDVztBQUFBO0FBQUEscUJBQUFBLFNBQ0Q7QUFBQSxnQkFHSCx1Q0FBeUI7QUFBQTtBQUFBLG1CQUFBcUIsUUFSbEM7QUFBQSwyQkFVUyxxQ0FBeUI7QUFBQSx1QkFWbEM7QUFBQSwwRUFBQWlELElBQUEsTUFZUyxtQ0FBdUI7QUFBQTtBQUFBLGNBQ3pCO0FBQUEsYUFBUyxFQUFDO0FBQUE7QUFBQSxHRGh2QnJCIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6Mzk2MzUsImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvb19ydW50aW1lLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiXSwibmFtZXMiOlsicnVudGltZSJdLCJtYXBwaW5ncyI6Ik9BQUFBLFVBQUEiLCJpZ25vcmVMaXN0IjpbMF19fSx7Im9mZnNldCI6eyJsaW5lIjozOTY0OCwiY29sdW1uIjowfSwibWFwIjp7InZlcnNpb24iOjMsImZpbGUiOiJqc29vX3J1bnRpbWUuY21hLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9qc19vZl9vY2FtbC1jb21waWxlci9ydW50aW1lL2pzb29fcnVudGltZS5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqIEpzX29mX29jYW1sIGxpYnJhcnlcbiAqIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5cbm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlIHRcblxuICB0eXBlICdhIGpzX2FycmF5ID0gdFxuXG4gIHR5cGUgKCdhLCAnYikgbWV0aF9jYWxsYmFjayA9IHRcblxuICBleHRlcm5hbCBzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgYnl0ZXN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19ieXRlc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcIlxuXG4gIGV4dGVybmFsIGJvb2wgOiBib29sIC0+IHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuICBleHRlcm5hbCB0b19ib29sIDogdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG4gIGV4dGVybmFsIGFycmF5IDogJ2EgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19hcnJheSA6IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IHQgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2ludDMyIDogaW50MzIgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2ludDMyXCJcblxuICBleHRlcm5hbCBpbnQzMl9vZl9udW1iZXIgOiB0IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IHQgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIG5hdGl2ZWludF9vZl9udW1iZXIgOiB0IC0+IG5hdGl2ZWludCA9IFwiY2FtbF9qc190b19uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIHR5cGVvZiA6IHQgLT4gdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG4gIGV4dGVybmFsIGluc3RhbmNlb2YgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gdCAtPiB0ID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19zZXRcIlxuXG4gIGV4dGVybmFsIGRlbGV0ZSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbCA6IHQgLT4gdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgZnVuX2NhbGwgOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogdCAtPiBzdHJpbmcgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbmV3X29iaiA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiB0IC0+IHQganNfYXJyYXkgLT4gdCA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIHQpIGFycmF5IC0+IHQgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICBleHRlcm5hbCBlcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwganNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19leHByXCJcblxuICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKHQganNfYXJyYXkgLT4gJ2IpIC0+ICgnYywgdCBqc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICgnYiAtPiB0IGpzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIHQganNfYXJyYXkgLT4gJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCBydW50aW1lX3ZhbHVlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzb29fcnVudGltZV92YWx1ZVwiXG4gICgqKiBbcnVudGltZV92YWx1ZSBcIkZPT1wiXSByZXR1cm5zIHRoZSBKYXZhU2NyaXB0IHZhbHVlIEZPTyBwcm92aWRlZCBieSB0aGUgSmF2YVNjcmlwdCBydW50aW1lICh3aXRoICcvL1Byb3ZpZGVzOiBGT08nKS4gVGhlIHN0cmluZyBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwuICopXG5cbiAgZXh0ZXJuYWwgY3VzdG9tX2lkZW50aWZpZXIgOiBPYmoudCAtPiBzdHJpbmcgPSBcImNhbWxfY3VzdG9tX2lkZW50aWZpZXJcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICB0eXBlIHJlZGlyZWN0aW9uXG5cbiAgZXh0ZXJuYWwgcmVkaXJlY3RfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IGludG86b3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb25cbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XCJcblxuICBleHRlcm5hbCByZXN0b3JlX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvbiAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgdHlwZSBlZmZlY3RzX2JhY2tlbmQgPVxuICAgICAgWyBgRGlzYWJsZWRcbiAgICAgIHwgYENwc1xuICAgICAgfCBgRG91YmxlX3RyYW5zbGF0aW9uXG4gICAgICBdXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzXyA6IHVuaXQgLT4gc3RyaW5nID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG5cbiAgICBsZXQgZWZmZWN0cyAoKSA9XG4gICAgICBtYXRjaCBlZmZlY3RzXyAoKSB3aXRoXG4gICAgICB8IFwiZGlzYWJsZWRcIiAtPiBgRGlzYWJsZWRcbiAgICAgIHwgXCJjcHNcIiAtPiBgQ3BzXG4gICAgICB8IFwiZG91YmxlLXRyYW5zbGF0aW9uXCIgLT4gYERvdWJsZV90cmFuc2xhdGlvblxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YVNjcmlwdCBlcnJvciBpcyBhbHJlYWR5IGF0dGFjaGVkLCBpdCB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvXG4gICAgc3RvcmUgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzLlxuXG4gICAgQXR0YWNoaW5nIEphdmFTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHRyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGV4dGVybmFsIHJhaXNlXyA6IHQgLT4gJ2EgPSBcImNhbWxfdGhyb3dfanNfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb24gPSBcImNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4biA9IFwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2VcIlxuZW5kXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyLTYwXCJdXG5cbm1vZHVsZSBGb3JfY29tcGF0aWJpbGl0eV9vbmx5ID0gc3RydWN0XG4gICgqIEFkZCBwcmltaXRpdmVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEV4aXN0aW5nIHVzZXJzIG1pZ2h0XG4gICAgIGRlcGVuZCBvbiBpdCAoZS5nLiBnZW5fanNfYXBpKSwgd2UgZG9uJ3Qgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2UgbWlzc2luZyBwcmltaXRpdmVzLiAqKVxuXG4gIGV4dGVybmFsIGNhbWxfanNfZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gSnMudCA9IFwiY2FtbF9qc19mcm9tX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19ieXRlX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX2J5dGVfc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X29mX2pzX2FycmF5IDogJ2EgSnMuanNfYXJyYXkgLT4gJ2EgbGlzdCA9IFwiY2FtbF9saXN0X29mX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3RfdG9fanNfYXJyYXkgOiAnYSBsaXN0IC0+ICdhIEpzLmpzX2FycmF5ID0gXCJjYW1sX2xpc3RfdG9fanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHZhcmlhYmxlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX3ZhclwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9zdHJpbmdfb2ZfYXJyYXkgOiAnYSBhcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBzdHJpbmdfb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl91aW50OF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgYnl0ZXNfb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gYnl0ZXMgPSBcImNhbWxfYnl0ZXNfb2ZfdWludDhfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHVpbnQ4QXJyYXlfb2ZfYnl0ZXMgOiBieXRlcyAtPiB1aW50OEFycmF5ID0gXCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcblxubW9kdWxlIEVmZmVjdCA6IHNpZ1xuICBleHRlcm5hbCBhc3N1bWVfbm9fcGVyZm9ybSA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9hc3N1bWVfbm9fcGVyZm9ybVwiXG4gICgqKiBQYXNzaW5nIGEgZnVuY3Rpb24gW2ZdIGFzIGFyZ3VtZW50IG9mIGBhc3N1bWVfbm9fcGVyZm9ybWAgZ3VhcmFudGVlcyB0aGF0LFxuICAgICAgd2hlbiBjb21waWxpbmcgd2l0aCBgLS1lZmZlY3RzPWRvdWJsZS10cmFuc2xhdGlvbmAsIHRoZSBkaXJlY3Qtc3R5bGVcbiAgICAgIHZlcnNpb24gb2YgW2ZdIGlzIGNhbGxlZCwgd2hpY2ggaXMgZmFzdGVyIHRoYW4gdGhlIENQUyB2ZXJzaW9uLiBBcyBhXG4gICAgICBjb25zZXF1ZW5jZSwgcGVyZm9ybWluZyBhbiBlZmZlY3QgaW4gYSB0cmFuc2l0aXZlIGNhbGxlZSBvZiBbZl0gd2lsbFxuICAgICAgcmFpc2UgYEVmZmVjdC5VbmhhbmRsZWRgLCByZWdhcmRsZXNzIG9mIGFueSBlZmZlY3QgaGFuZGxlcnMgaW5zdGFsbGVkXG4gICAgICBiZWZvcmUgdGhlIGNhbGwgdG8gYGFzc3VtZV9ub19wZXJmb3JtYCwgdW5sZXNzIGEgbmV3IGVmZmVjdCBoYW5kbGVyIHdhc1xuICAgICAgaW5zdGFsbGVkIGluIHRoZSBtZWFudGltZS5cblxuICAgICAgVGhpcyBiZWhhdmlvdXIgaXMgdGhlIHNhbWUgd2hlbiBkb3VibGUgdHJhbnNsYXRpb24gaXMgZGlzYWJsZWQuICopXG5lbmQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgYXNzdW1lX25vX3BlcmZvcm0gOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfYXNzdW1lX25vX3BlcmZvcm1cIlxuZW5kXG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImdsb2JhbF9kYXRhIiwiQXNzZXJ0X2ZhaWx1cmUiLCJKc29vX3J1bnRpbWVfUnVudGltZV92ZXJzaW9uIiwiU3RkbGliX0NhbGxiYWNrIiwiZWZmZWN0cyIsInBhcmFtIiwibWF0Y2giLCJ2ZXJzaW9uIiwiZ2l0X3ZlcnNpb24iLCJFeG4iLCJFcnJvciJdLCJtYXBwaW5ncyI6IklBQUFBLFVBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLCtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQTtBQUFBLFlBQUFDLFFBQUFDO0FBQUFBLFFBQUFDLFFDaUtZO0FBQUEsSUFBVyxvQkFFTjtBQUFBLElBRk0seUJBQ0Q7QUFBQSxJQURDO0FBQUEsS0FJVjtBQUFBLElBRG1CO0FBQUEsR0FDUDtBQUFBO0FBQUEsSUFBQUMsVURyS3pCO0FBQUEsSUFBQUMsY0FBQTtBQUFBLElBQUFDLE1BQUE7QUFBQSxHQ3dNVTtBQUFBO0FBQUEsSUFBQUM7QUFBQUEsTUFBNEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVEeE10RSIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM5Njk2LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6ImpzX29mX29jYW1sLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwvaW1wb3J0Lm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCogSnNfb2Zfb2NhbWxcbiAqIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbiAqIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuICopXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcblxuICBleHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcblxuICBleHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBleHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5cbiAgZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5cbiAgZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG4gIGV4dGVybmFsIGVxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmVuZFxuXG5tb2R1bGUgSW50X3JlcGxhY2VfcG9seW1vcnBoaWNfY29tcGFyZSA9IHN0cnVjdFxuICBleHRlcm5hbCAoIDwgKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcblxuICBleHRlcm5hbCAoIDw9ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuXG4gIGV4dGVybmFsICggPD4gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcblxuICBleHRlcm5hbCAoID0gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxuICBleHRlcm5hbCAoID4gKSA6IGludCAtPiBpbnQgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcblxuICBleHRlcm5hbCAoID49ICkgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuXG4gIGV4dGVybmFsIGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG4gIGV4dGVybmFsIGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gXCIlZXF1YWxcIlxuXG4gIGxldCBtYXggKHggOiBpbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4gIGxldCBtaW4gKHggOiBpbnQpIHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxuZW5kXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcblxuICBsZXQgZXF1YWwgKHggOiBzdHJpbmcpICh5IDogc3RyaW5nKSA9IFBvbHkuZXF1YWwgeCB5XG5lbmRcblxubW9kdWxlIENoYXIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBDaGFyXG5cbiAgbGV0IGVxdWFsICh4IDogY2hhcikgKHkgOiBjaGFyKSA9IFBvbHkuZXF1YWwgeCB5XG5lbmRcblxuaW5jbHVkZSBJbnRfcmVwbGFjZV9wb2x5bW9ycGhpY19jb21wYXJlXG4iXSwibmFtZXMiOlsicnVudGltZSIsImdsb2JhbF9kYXRhIiwiU3RkbGliX1N0cmluZyIsIlN0ZGxpYl9DaGFyIiwibWF4IiwieCIsInkiLCJtaW4iLCJtYWtlIiwiaW5pdCIsImVtcHR5Iiwib2ZfYnl0ZXMiLCJ0b19ieXRlcyIsImJsaXQiLCJjb25jYXQiLCJjYXQiLCJjb21wYXJlIiwic3RhcnRzX3dpdGgiLCJlbmRzX3dpdGgiLCJjb250YWluc19mcm9tIiwicmNvbnRhaW5zX2Zyb20iLCJjb250YWlucyIsInN1YiIsInNwbGl0X29uX2NoYXIiLCJtYXAiLCJtYXBpIiwiZm9sZF9sZWZ0IiwiZm9sZF9yaWdodCIsImZvcl9hbGwiLCJleGlzdHMiLCJ0cmltIiwiZXNjYXBlZCIsInVwcGVyY2FzZV9hc2NpaSIsImxvd2VyY2FzZV9hc2NpaSIsImNhcGl0YWxpemVfYXNjaWkiLCJ1bmNhcGl0YWxpemVfYXNjaWkiLCJpdGVyIiwiaXRlcmkiLCJpbmRleF9mcm9tIiwiaW5kZXhfZnJvbV9vcHQiLCJyaW5kZXhfZnJvbSIsInJpbmRleF9mcm9tX29wdCIsImluZGV4IiwiaW5kZXhfb3B0IiwicmluZGV4IiwicmluZGV4X29wdCIsInRvX3NlcSIsInRvX3NlcWkiLCJvZl9zZXEiLCJnZXRfdXRmXzhfdWNoYXIiLCJpc192YWxpZF91dGZfOCIsImdldF91dGZfMTZiZV91Y2hhciIsImlzX3ZhbGlkX3V0Zl8xNmJlIiwiZ2V0X3V0Zl8xNmxlX3VjaGFyIiwiaXNfdmFsaWRfdXRmXzE2bGUiLCJnZXRfdWludDgiLCJnZXRfaW50OCIsImdldF91aW50MTZfbmUiLCJnZXRfdWludDE2X2JlIiwiZ2V0X3VpbnQxNl9sZSIsImdldF9pbnQxNl9uZSIsImdldF9pbnQxNl9iZSIsImdldF9pbnQxNl9sZSIsImdldF9pbnQzMl9uZSIsImhhc2giLCJzZWVkZWRfaGFzaCIsImdldF9pbnQzMl9iZSIsImdldF9pbnQzMl9sZSIsImdldF9pbnQ2NF9uZSIsImdldF9pbnQ2NF9iZSIsImdldF9pbnQ2NF9sZSIsImVxdWFsIiwiY2hyIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxZQUFBQyxJQUFBQyxHQUFBQyxHQ3FEd0IscUJBQXVCO0FBQUEsWUFBQUMsSUFBQUYsR0FBQUMsR0FFdkIscUJBQXVCO0FBQUE7QUFBQSxJQUFBRSxPRHZEL0M7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFlBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxPQUFBO0FBQUEsSUFBQUMsVUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxtQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsaUJBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxRQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLFVBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLHFCQUFBO0FBQUEsSUFBQUMsb0JBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLG9CQUFBO0FBQUEsSUFBQUMsWUFBQTtBQUFBLElBQUFDLFdBQUE7QUFBQSxJQUFBQyxnQkFBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsT0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGVBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLFFBQUE7QUFBQSxJQUFBQyxNQUFBO0FBQUEsSUFBQXpDLFlBQUE7QUFBQSxJQUFBRSxvQkFBQTtBQUFBLElBQUFELG9CQUFBO0FBQUEsSUFBQWhCLFlBQUE7QUFBQSxJQUFBaUQsZ0JBQUE7QUFBQSxJQUFBRCxTQUFBO0FBQUEsWUFBQU8sUUFBQWxFLEdBQUFDLEdDbUVvQyx1QkFBYztBQUFBLEdEbkVsRCIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjM5ODY4LCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6ImpzX29mX29jYW1sLmNtYS5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvcm9vdC8ub3BhbS81LjIuMC9saWIvanNfb2Zfb2NhbWwvanMubWwiXSwic291cmNlc0NvbnRlbnQiOlsiKCogZ2VuZXJhdGVkIGNvZGUgKikiLCIoKiBKc19vZl9vY2FtbCBsaWJyYXJ5XG4gKiBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuICogQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4gKiBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3RcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuICogZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4gKilcbm9wZW4hIEltcG9ydFxuXG4oKiBUaGlzIGxvY2FsIG1vZHVsZSBbSnNdIGlzIG5lZWRlZCBzbyB0aGF0IHRoZSBwcHhfanMgZXh0ZW5zaW9uIHdvcmsgd2l0aGluIHRoYXQgZmlsZS4gKilcbm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlICsnYSB0XG5cbiAgdHlwZSAoLSdhLCArJ2IpIG1ldGhfY2FsbGJhY2tcblxuICBtb2R1bGUgVW5zYWZlID0gc3RydWN0XG4gICAgdHlwZSB0b3BcblxuICAgIHR5cGUgYW55ID0gdG9wIHRcblxuICAgIHR5cGUgYW55X2pzX2FycmF5ID0gYW55XG5cbiAgICBleHRlcm5hbCBpbmplY3QgOiAnYSAtPiBhbnkgPSBcIiVpZGVudGl0eVwiXG5cbiAgICBleHRlcm5hbCBjb2VyY2UgOiBfIHQgLT4gXyB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgZXh0ZXJuYWwgZ2V0IDogJ2EgLT4gJ2IgLT4gJ2MgPSBcImNhbWxfanNfZ2V0XCJcblxuICAgIGV4dGVybmFsIHNldCA6ICdhIC0+ICdiIC0+ICdjIC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICAgIGV4dGVybmFsIGRlbGV0ZSA6ICdhIC0+ICdiIC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICAgIGV4dGVybmFsIGNhbGwgOiAnYSAtPiAnYiAtPiBhbnkgYXJyYXkgLT4gJ2MgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgICBleHRlcm5hbCBmdW5fY2FsbCA6ICdhIC0+IGFueSBhcnJheSAtPiAnYiA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGwgOiAnYSAtPiBzdHJpbmcgLT4gYW55IGFycmF5IC0+ICdiID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgICBleHRlcm5hbCBuZXdfb2JqIDogJ2EgLT4gYW55IGFycmF5IC0+ICdiID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgICBleHRlcm5hbCBuZXdfb2JqX2FyciA6ICdhIC0+IGFueV9qc19hcnJheSAtPiAnYiA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogYW55KSBhcnJheSAtPiAnYSA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogJ2EgLT4gJ2IgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6ICdhIC0+ICdiIC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICAgIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICAgIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICAgIGxldCBnbG9iYWwgPSBwdXJlX2pzX2V4cHIgXCJnbG9iYWxUaGlzXCJcblxuICAgIGV4dGVybmFsIGNhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgICAoYW55X2pzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIGFueV9qc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gICAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICAgIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gICAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAgICgnYiAtPiBhbnlfanNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgYW55X2pzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICAgIGV4dGVybmFsIHJ1bnRpbWVfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNvb19ydW50aW1lX3ZhbHVlXCJcblxuICAgICgqIERFUFJFQ0FURUQgKilcbiAgICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuICBlbmRcblxuICAoKioqKilcblxuICB0eXBlICdhIG9wdCA9ICdhXG5cbiAgdHlwZSAnYSBvcHRkZWYgPSAnYVxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgbGV0IG51bGwgOiAnYSBvcHQgPSBVbnNhZmUucHVyZV9qc19leHByIFwibnVsbFwiXG5cbiAgZXh0ZXJuYWwgc29tZSA6ICdhIC0+ICdhIG9wdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgdW5kZWZpbmVkIDogJ2Egb3B0ZGVmID0gVW5zYWZlLnB1cmVfanNfZXhwciBcInVuZGVmaW5lZFwiXG5cbiAgZXh0ZXJuYWwgZGVmIDogJ2EgLT4gJ2Egb3B0ZGVmID0gXCIlaWRlbnRpdHlcIlxuXG4gIG1vZHVsZSB0eXBlIE9QVCA9IHNpZ1xuICAgIHR5cGUgJ2EgdFxuXG4gICAgdmFsIGVtcHR5IDogJ2EgdFxuXG4gICAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcblxuICAgIHZhbCBtYXAgOiAnYSB0IC0+ICgnYSAtPiAnYikgLT4gJ2IgdFxuXG4gICAgdmFsIGJpbmQgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5cbiAgICB2YWwgdGVzdCA6ICdhIHQgLT4gYm9vbFxuXG4gICAgdmFsIGl0ZXIgOiAnYSB0IC0+ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbiAgICB2YWwgY2FzZSA6ICdhIHQgLT4gKHVuaXQgLT4gJ2IpIC0+ICgnYSAtPiAnYikgLT4gJ2JcblxuICAgIHZhbCBnZXQgOiAnYSB0IC0+ICh1bml0IC0+ICdhKSAtPiAnYVxuXG4gICAgdmFsIG9wdGlvbiA6ICdhIG9wdGlvbiAtPiAnYSB0XG5cbiAgICB2YWwgdG9fb3B0aW9uIDogJ2EgdCAtPiAnYSBvcHRpb25cblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcbiAgZW5kXG5cbiAgbW9kdWxlIE9wdCA6IE9QVCB3aXRoIHR5cGUgJ2EgdCA9ICdhIG9wdCA9IHN0cnVjdFxuICAgIHR5cGUgJ2EgdCA9ICdhIG9wdFxuXG4gICAgbGV0IGVtcHR5ID0gbnVsbFxuXG4gICAgbGV0IHJldHVybiA9IHNvbWVcblxuICAgIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gICAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICAgIGxldCBtYXAgeCBmID0gaWYgZXF1YWxzIHggbnVsbCB0aGVuIG51bGwgZWxzZSByZXR1cm4gKGYgeClcblxuICAgIGxldCBiaW5kIHggZiA9IGlmIGVxdWFscyB4IG51bGwgdGhlbiBudWxsIGVsc2UgZiB4XG5cbiAgICBsZXQgdGVzdCB4ID0gbm90IChlcXVhbHMgeCBudWxsKVxuXG4gICAgbGV0IGl0ZXIgeCBmID0gaWYgbm90IChlcXVhbHMgeCBudWxsKSB0aGVuIGYgeFxuXG4gICAgbGV0IGNhc2UgeCBmIGcgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gZiAoKSBlbHNlIGcgeFxuXG4gICAgbGV0IGdldCB4IGYgPSBpZiBlcXVhbHMgeCBudWxsIHRoZW4gZiAoKSBlbHNlIHhcblxuICAgIGxldCBvcHRpb24geCA9XG4gICAgICBtYXRjaCB4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBlbXB0eVxuICAgICAgfCBTb21lIHggLT4gcmV0dXJuIHhcblxuICAgIGxldCB0b19vcHRpb24geCA9IGNhc2UgeCAoZnVuICgpIC0+IE5vbmUpIChmdW4geCAtPiBTb21lIHgpXG4gIGVuZFxuXG4gIG1vZHVsZSBPcHRkZWYgOiBPUFQgd2l0aCB0eXBlICdhIHQgPSAnYSBvcHRkZWYgPSBzdHJ1Y3RcbiAgICB0eXBlICdhIHQgPSAnYSBvcHRkZWZcblxuICAgIGxldCBlbXB0eSA9IHVuZGVmaW5lZFxuXG4gICAgbGV0IHJldHVybiA9IGRlZlxuXG4gICAgZXh0ZXJuYWwgZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogXyB0IC0+IF8gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gICAgbGV0IG1hcCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gdW5kZWZpbmVkIGVsc2UgcmV0dXJuIChmIHgpXG5cbiAgICBsZXQgYmluZCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gdW5kZWZpbmVkIGVsc2UgZiB4XG5cbiAgICBsZXQgdGVzdCB4ID0gbm90IChzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkKVxuXG4gICAgbGV0IGl0ZXIgeCBmID0gaWYgbm90IChzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkKSB0aGVuIGYgeFxuXG4gICAgbGV0IGNhc2UgeCBmIGcgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gZiAoKSBlbHNlIGcgeFxuXG4gICAgbGV0IGdldCB4IGYgPSBpZiBzdHJpY3RfZXF1YWxzIHggdW5kZWZpbmVkIHRoZW4gZiAoKSBlbHNlIHhcblxuICAgIGxldCBvcHRpb24geCA9XG4gICAgICBtYXRjaCB4IHdpdGhcbiAgICAgIHwgTm9uZSAtPiBlbXB0eVxuICAgICAgfCBTb21lIHggLT4gcmV0dXJuIHhcblxuICAgIGxldCB0b19vcHRpb24geCA9IGNhc2UgeCAoZnVuICgpIC0+IE5vbmUpIChmdW4geCAtPiBTb21lIHgpXG4gIGVuZFxuXG4gICgqKioqKVxuXG4gIGxldCBjb2VyY2UgeCBmIGcgPSBPcHQuZ2V0IChmIHgpIChmdW4gKCkgLT4gZyB4KVxuXG4gIGxldCBjb2VyY2Vfb3B0IHggZiBnID0gT3B0LmdldCAoT3B0LmJpbmQgeCBmKSAoZnVuICgpIC0+IGcgeClcblxuICAoKioqKilcblxuICB0eXBlICsnYSBtZXRoXG5cbiAgdHlwZSArJ2EgZ2VuX3Byb3BcblxuICB0eXBlICdhIHJlYWRvbmx5X3Byb3AgPSA8IGdldCA6ICdhID4gZ2VuX3Byb3BcblxuICB0eXBlICdhIHdyaXRlb25seV9wcm9wID0gPCBzZXQgOiAnYSAtPiB1bml0ID4gZ2VuX3Byb3BcblxuICB0eXBlICdhIHByb3AgPSA8IGdldCA6ICdhIDsgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSAnYSBvcHRkZWZfcHJvcCA9IDwgZ2V0IDogJ2Egb3B0ZGVmIDsgc2V0IDogJ2EgLT4gdW5pdCA+IGdlbl9wcm9wXG5cbiAgdHlwZSArJ2EgY29uc3RyXG5cbiAgKCoqKiopXG5cbiAgdHlwZSAnYSBjYWxsYmFjayA9ICh1bml0LCAnYSkgbWV0aF9jYWxsYmFja1xuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuXG4gICgqKioqKVxuXG4gIGV4dGVybmFsIGVxdWFscyA6IF8gdCAtPiBfIHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiBfIHQgLT4gXyB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgKCoqKiopXG5cbiAgbGV0IF90cnVlID0gVW5zYWZlLnB1cmVfanNfZXhwciBcInRydWVcIlxuXG4gIGxldCBfZmFsc2UgPSBVbnNhZmUucHVyZV9qc19leHByIFwiZmFsc2VcIlxuXG4gIHR5cGUgbWF0Y2hfcmVzdWx0X2hhbmRsZVxuXG4gIHR5cGUgc3RyaW5nX2FycmF5XG5cbiAgY2xhc3MgdHlwZSBudW1iZXIgPSBvYmplY3RcbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9TdHJpbmdfcmFkaXggOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRml4ZWQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvRXhwb25lbnRpYWwgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9FeHBvbmVudGlhbF9kaWdpdHMgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvUHJlY2lzaW9uIDogaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcbiAgZW5kXG5cbiAgYW5kIGpzX3N0cmluZyA9IG9iamVjdFxuICAgIG1ldGhvZCB0b1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCB2YWx1ZU9mIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNoYXJBdCA6IGludCAtPiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgY2hhckNvZGVBdCA6IGludCAtPiBudW1iZXIgdCBtZXRoXG5cbiAgICBtZXRob2QgY29kZVBvaW50QXQgOiBpbnQgLT4gbnVtYmVyIHQgb3B0ZGVmIG1ldGhcblxuICAgICgqIFRoaXMgbWF5IHJldHVybiBOYU4uLi4gKilcbiAgICBtZXRob2QgY29uY2F0IDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF8yIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF8zIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIGNvbmNhdF80IDpcbiAgICAgIGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBpbmRleE9mIDoganNfc3RyaW5nIHQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBpbmRleE9mX2Zyb20gOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gaW50IG1ldGhcblxuICAgIG1ldGhvZCBsYXN0SW5kZXhPZiA6IGpzX3N0cmluZyB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2QgbGFzdEluZGV4T2ZfZnJvbSA6IGpzX3N0cmluZyB0IC0+IGludCAtPiBpbnQgbWV0aFxuXG4gICAgbWV0aG9kIGxvY2FsZUNvbXBhcmUgOiBqc19zdHJpbmcgdCAtPiBudW1iZXIgdCBtZXRoXG5cbiAgICBtZXRob2QgX21hdGNoIDogcmVnRXhwIHQgLT4gbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IG9wdCBtZXRoXG5cbiAgICBtZXRob2Qgbm9ybWFsaXplIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIG5vcm1hbGl6ZV9mb3JtIDogbm9ybWFsaXphdGlvbiB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCByZXBsYWNlIDogcmVnRXhwIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHJlcGxhY2Vfc3RyaW5nIDoganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNlYXJjaCA6IHJlZ0V4cCB0IC0+IGludCBtZXRoXG5cbiAgICBtZXRob2Qgc2xpY2UgOiBpbnQgLT4gaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzbGljZV9lbmQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0IDoganNfc3RyaW5nIHQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0X2xpbWl0ZWQgOiBqc19zdHJpbmcgdCAtPiBpbnQgLT4gc3RyaW5nX2FycmF5IHQgbWV0aFxuXG4gICAgbWV0aG9kIHNwbGl0X3JlZ0V4cCA6IHJlZ0V4cCB0IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzcGxpdF9yZWdFeHBMaW1pdGVkIDogcmVnRXhwIHQgLT4gaW50IC0+IHN0cmluZ19hcnJheSB0IG1ldGhcblxuICAgIG1ldGhvZCBzdWJzdHJpbmcgOiBpbnQgLT4gaW50IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICAgIG1ldGhvZCBzdWJzdHJpbmdfdG9FbmQgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG93ZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlTG93ZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvVXBwZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRvTG9jYWxlVXBwZXJDYXNlIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gICAgbWV0aG9kIHRyaW0gOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2QgbGVuZ3RoIDogaW50IHJlYWRvbmx5X3Byb3BcbiAgZW5kXG5cbiAgYW5kIHJlZ0V4cCA9IG9iamVjdFxuICAgIG1ldGhvZCBleGVjIDoganNfc3RyaW5nIHQgLT4gbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IG9wdCBtZXRoXG5cbiAgICBtZXRob2QgdGVzdCA6IGpzX3N0cmluZyB0IC0+IGJvb2wgdCBtZXRoXG5cbiAgICBtZXRob2QgdG9TdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgICBtZXRob2Qgc291cmNlIDoganNfc3RyaW5nIHQgcmVhZG9ubHlfcHJvcFxuXG4gICAgbWV0aG9kIGdsb2JhbCA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgaWdub3JlQ2FzZSA6IGJvb2wgdCByZWFkb25seV9wcm9wXG5cbiAgICBtZXRob2QgbXVsdGlsaW5lIDogYm9vbCB0IHJlYWRvbmx5X3Byb3BcblxuICAgIG1ldGhvZCBsYXN0SW5kZXggOiBpbnQgcHJvcFxuICBlbmRcblxuICBhbmQgbm9ybWFsaXphdGlvbiA9IGpzX3N0cmluZ1xuXG4gIHR5cGUgbnVtYmVyX3QgPSBudW1iZXIgdFxuXG4gICgqIHN0cmluZyBpcyB1c2VkIGJ5IHBweF9qcywgaXQgbmVlZHMgdG8gY29tZSBiZWZvcmUgYW55IHVzZSBvZiB0aGVcbiAgICAgbmV3IHN5bnRheCBpbiB0aGlzIGZpbGUgKilcbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDoganNfc3RyaW5nIHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgbGV0IG5mYyA9IHN0cmluZyBcIk5GQ1wiXG5cbiAgbGV0IG5mZCA9IHN0cmluZyBcIk5GRFwiXG5cbiAgbGV0IG5ma2MgPSBzdHJpbmcgXCJORktDXCJcblxuICBsZXQgbmZrZCA9IHN0cmluZyBcIk5GS0RcIlxuZW5kXG5cbmluY2x1ZGUgSnNcblxuY2xhc3MgdHlwZSBzdHJpbmdfY29uc3RyID0gb2JqZWN0XG4gIG1ldGhvZCBmcm9tQ2hhckNvZGUgOiBpbnQgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBzdHJpbmdfY29uc3RyID0gVW5zYWZlLmdsb2JhbCMjLl9TdHJpbmdcblxubGV0IHJlZ0V4cCA9IFVuc2FmZS5nbG9iYWwjIy5fUmVnRXhwXG5cbmxldCByZWdFeHBfY29weSA9IHJlZ0V4cFxuXG5sZXQgcmVnRXhwX3dpdGhGbGFncyA9IHJlZ0V4cFxuXG5jbGFzcyB0eXBlIFsnYV0ganNfYXJyYXkgPSBvYmplY3RcbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0xvY2FsZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgY29uY2F0IDogJ2EganNfYXJyYXkgdCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgam9pbiA6IGpzX3N0cmluZyB0IC0+IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgcG9wIDogJ2Egb3B0ZGVmIG1ldGhcblxuICBtZXRob2QgcHVzaCA6ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfMiA6ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfMyA6ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHB1c2hfNCA6ICdhIC0+ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHJldmVyc2UgOiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc2hpZnQgOiAnYSBvcHRkZWYgbWV0aFxuXG4gIG1ldGhvZCBzbGljZSA6IGludCAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNsaWNlX2VuZCA6IGludCAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc29ydCA6ICgnYSAtPiAnYSAtPiBudW1iZXJfdCkgY2FsbGJhY2sgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNvcnRfYXNTdHJpbmdzIDogJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZSA6IGludCAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV8xIDogaW50IC0+IGludCAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2Qgc3BsaWNlXzIgOiBpbnQgLT4gaW50IC0+ICdhIC0+ICdhIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCBzcGxpY2VfMyA6IGludCAtPiBpbnQgLT4gJ2EgLT4gJ2EgLT4gJ2EgLT4gJ2EganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIHNwbGljZV80IDogaW50IC0+IGludCAtPiAnYSAtPiAnYSAtPiAnYSAtPiAnYSAtPiAnYSBqc19hcnJheSB0IG1ldGhcblxuICBtZXRob2QgdW5zaGlmdCA6ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfMiA6ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfMyA6ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHVuc2hpZnRfNCA6ICdhIC0+ICdhIC0+ICdhIC0+ICdhIC0+IGludCBtZXRoXG5cbiAgbWV0aG9kIHNvbWUgOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gYm9vbCB0KSBjYWxsYmFjayAtPiBib29sIHQgbWV0aFxuXG4gIG1ldGhvZCBldmVyeSA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiBib29sIHQpIGNhbGxiYWNrIC0+IGJvb2wgdCBtZXRoXG5cbiAgbWV0aG9kIGZvckVhY2ggOiAoJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdCBtZXRoXG5cbiAgbWV0aG9kIG1hcCA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IganNfYXJyYXkgdCBtZXRoXG5cbiAgbWV0aG9kIGZpbHRlciA6ICgnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiBib29sIHQpIGNhbGxiYWNrIC0+ICdhIGpzX2FycmF5IHQgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2VfaW5pdCA6ICgnYiAtPiAnYSAtPiBpbnQgLT4gJ2EganNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgLT4gJ2IgbWV0aFxuXG4gIG1ldGhvZCByZWR1Y2UgOiAoJ2EgLT4gJ2EgLT4gaW50IC0+ICdhIGpzX2FycmF5IHQgLT4gJ2EpIGNhbGxiYWNrIC0+ICdhIG1ldGhcblxuICBtZXRob2QgcmVkdWNlUmlnaHRfaW5pdCA6XG4gICAgKCdiIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdiKSBjYWxsYmFjayAtPiAnYiAtPiAnYiBtZXRoXG5cbiAgbWV0aG9kIHJlZHVjZVJpZ2h0IDogKCdhIC0+ICdhIC0+IGludCAtPiAnYSBqc19hcnJheSB0IC0+ICdhKSBjYWxsYmFjayAtPiAnYSBtZXRoXG5cbiAgbWV0aG9kIGxlbmd0aCA6IGludCBwcm9wXG5lbmRcblxubGV0IG9iamVjdF9jb25zdHJ1Y3RvciA9IFVuc2FmZS5nbG9iYWwjIy5fT2JqZWN0XG5cbmxldCBvYmplY3Rfa2V5cyBvIDoganNfc3RyaW5nIHQganNfYXJyYXkgdCA9IG9iamVjdF9jb25zdHJ1Y3RvciMja2V5cyBvXG5cbmxldCBhcnJheV9jb25zdHJ1Y3RvciA9IFVuc2FmZS5nbG9iYWwjIy5fQXJyYXlcblxubGV0IGFycmF5X2VtcHR5ID0gYXJyYXlfY29uc3RydWN0b3JcblxubGV0IGFycmF5X2xlbmd0aCA9IGFycmF5X2NvbnN0cnVjdG9yXG5cbmxldCBhcnJheV9nZXQgOiAnYSAjanNfYXJyYXkgdCAtPiBpbnQgLT4gJ2Egb3B0ZGVmID0gVW5zYWZlLmdldFxuXG5sZXQgYXJyYXlfc2V0IDogJ2EgI2pzX2FycmF5IHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBVbnNhZmUuc2V0XG5cbmxldCBhcnJheV9tYXBfcG9seSA6XG4gICAgJ2EgI2pzX2FycmF5IHQgLT4gKCdhIC0+IGludCAtPiAnYSAjanNfYXJyYXkgdCAtPiAnYikgY2FsbGJhY2sgLT4gJ2IgI2pzX2FycmF5IHQgPVxuIGZ1biBhIGNiIC0+IChVbnNhZmUuY29lcmNlIGEpIyNtYXAgY2JcblxubGV0IGFycmF5X21hcCBmIGEgPSBhcnJheV9tYXBfcG9seSBhICh3cmFwX2NhbGxiYWNrIChmdW4geCBfaWR4IF8gLT4gZiB4KSlcblxubGV0IGFycmF5X21hcGkgZiBhID0gYXJyYXlfbWFwX3BvbHkgYSAod3JhcF9jYWxsYmFjayAoZnVuIHggaWR4IF8gLT4gZiBpZHggeCkpXG5cbmNsYXNzIHR5cGUgbWF0Y2hfcmVzdWx0ID0gb2JqZWN0XG4gIGluaGVyaXQgW2pzX3N0cmluZyB0XSBqc19hcnJheVxuXG4gIG1ldGhvZCBpbmRleCA6IGludCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIGlucHV0IDoganNfc3RyaW5nIHQgcmVhZG9ubHlfcHJvcFxuZW5kXG5cbmxldCBzdHJfYXJyYXkgOiBzdHJpbmdfYXJyYXkgdCAtPiBqc19zdHJpbmcgdCBqc19hcnJheSB0ID0gVW5zYWZlLmNvZXJjZVxuXG5sZXQgbWF0Y2hfcmVzdWx0IDogbWF0Y2hfcmVzdWx0X2hhbmRsZSB0IC0+IG1hdGNoX3Jlc3VsdCB0ID0gVW5zYWZlLmNvZXJjZVxuXG5jbGFzcyB0eXBlIGRhdGUgPSBvYmplY3RcbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0RhdGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvVGltZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVTdHJpbmcgOiBqc19zdHJpbmcgdCBtZXRoXG5cbiAgbWV0aG9kIHRvTG9jYWxlRGF0ZVN0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9Mb2NhbGVUaW1lU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB2YWx1ZU9mIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBnZXRUaW1lIDogbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBnZXRGdWxsWWVhciA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ0Z1bGxZZWFyIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0TW9udGggOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNb250aCA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldERhdGUgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENEYXRlIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0RGF5IDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0VVRDRGF5IDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0SG91cnMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENIb3VycyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldE1pbnV0ZXMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNaW51dGVzIDogaW50IG1ldGhcblxuICBtZXRob2QgZ2V0U2Vjb25kcyA6IGludCBtZXRoXG5cbiAgbWV0aG9kIGdldFVUQ1NlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRNaWxsaXNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRVVENNaWxsaXNlY29uZHMgOiBpbnQgbWV0aFxuXG4gIG1ldGhvZCBnZXRUaW1lem9uZU9mZnNldCA6IGludCBtZXRoXG5cbiAgbWV0aG9kIHNldFRpbWUgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldEZ1bGxZZWFyIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDRnVsbFllYXIgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRNb250aCA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01vbnRoIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0RGF0ZSA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0RhdGUgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRIb3VycyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ0hvdXJzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0TWludXRlcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01pbnV0ZXMgOiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzZXRTZWNvbmRzIDogaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgc2V0VVRDU2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldE1pbGxpc2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNldFVUQ01pbGxpc2Vjb25kcyA6IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHRvVVRDU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuXG4gIG1ldGhvZCB0b0lTT1N0cmluZyA6IGpzX3N0cmluZyB0IG1ldGhcblxuICBtZXRob2QgdG9KU09OIDogJ2EgLT4ganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmNsYXNzIHR5cGUgZGF0ZV9jb25zdHIgPSBvYmplY3RcbiAgbWV0aG9kIHBhcnNlIDoganNfc3RyaW5nIHQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21vbnRoIDogaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfZGF5IDogaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfaG91ciA6IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfbWluIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIF9VVENfc2VjIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBfVVRDX21zIDogaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2Qgbm93IDogbnVtYmVyX3QgbWV0aFxuZW5kXG5cbmxldCBkYXRlX2NvbnN0ciA9IFVuc2FmZS5nbG9iYWwjIy5fRGF0ZVxuXG5sZXQgZGF0ZSA6IGRhdGVfY29uc3RyIHQgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9ub3cgOiBkYXRlIHQgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfZnJvbVRpbWVWYWx1ZSA6IChudW1iZXJfdCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21vbnRoIDogKGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9kYXkgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gZGF0ZSB0KSBjb25zdHIgPSBkYXRlX2NvbnN0clxuXG5sZXQgZGF0ZV9ob3VyIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBkYXRlIHQpIGNvbnN0ciA9IGRhdGVfY29uc3RyXG5cbmxldCBkYXRlX21pbiA6IChpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfc2VjIDogKGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID0gZGF0ZV9jb25zdHJcblxubGV0IGRhdGVfbXMgOiAoaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gaW50IC0+IGRhdGUgdCkgY29uc3RyID1cbiAgZGF0ZV9jb25zdHJcblxuY2xhc3MgdHlwZSBtYXRoID0gb2JqZWN0XG4gIG1ldGhvZCBfRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xOMiA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xOMTAgOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9MT0cyRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX0xPRzEwRSA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgX1BJIDogbnVtYmVyX3QgcmVhZG9ubHlfcHJvcFxuXG4gIG1ldGhvZCBfU1FSVDFfMl8gOiBudW1iZXJfdCByZWFkb25seV9wcm9wXG5cbiAgbWV0aG9kIF9TUVJUMiA6IG51bWJlcl90IHJlYWRvbmx5X3Byb3BcblxuICBtZXRob2QgYWJzIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhY29zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhc2luIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhdGFuIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBhdGFuMiA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgY2VpbCA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgY29zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBleHAgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIGZsb29yIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBsb2cgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgbWF4XzMgOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1heF80IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIG1pbl8zIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBtaW5fNCA6IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcblxuICBtZXRob2QgcG93IDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCByYW5kb20gOiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHJvdW5kIDogbnVtYmVyX3QgLT4gbnVtYmVyX3QgbWV0aFxuXG4gIG1ldGhvZCBzaW4gOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHNxcnQgOiBudW1iZXJfdCAtPiBudW1iZXJfdCBtZXRoXG5cbiAgbWV0aG9kIHRhbiA6IG51bWJlcl90IC0+IG51bWJlcl90IG1ldGhcbmVuZFxuXG5sZXQgbWF0aCA9IFVuc2FmZS5nbG9iYWwjIy5fTWF0aFxuXG5jbGFzcyB0eXBlIGVycm9yID0gb2JqZWN0XG4gIG1ldGhvZCBuYW1lIDoganNfc3RyaW5nIHQgcHJvcFxuXG4gIG1ldGhvZCBtZXNzYWdlIDoganNfc3RyaW5nIHQgcHJvcFxuXG4gIG1ldGhvZCBzdGFjayA6IGpzX3N0cmluZyB0IG9wdGRlZiBwcm9wXG5cbiAgbWV0aG9kIHRvU3RyaW5nIDoganNfc3RyaW5nIHQgbWV0aFxuZW5kXG5cbmxldCBlcnJvcl9jb25zdHIgPSBVbnNhZmUuZ2xvYmFsIyMuX0Vycm9yXG5cbm1vZHVsZSBKc19lcnJvciA9IHN0cnVjdFxuICB0eXBlIGVycm9yX3QgPSBlcnJvciB0XG5cbiAgaW5jbHVkZSBKc29vX3J1bnRpbWUuRXJyb3JcblxuICBleHRlcm5hbCBvZl9lcnJvciA6IGVycm9yX3QgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBleHRlcm5hbCB0b19lcnJvciA6IHQgLT4gZXJyb3JfdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgbmFtZSBlID0gdG9fc3RyaW5nICh0b19lcnJvciBlKSMjLm5hbWVcblxuICBsZXQgbWVzc2FnZSBlID0gdG9fc3RyaW5nICh0b19lcnJvciBlKSMjLm1lc3NhZ2VcblxuICBsZXQgc3RhY2sgKGUgOiB0KSA6IHN0cmluZyBvcHRpb24gPVxuICAgIE9wdC50b19vcHRpb24gKE9wdC5tYXAgKHRvX2Vycm9yIGUpIyMuc3RhY2sgdG9fc3RyaW5nKVxuXG4gIGxldCB0b19zdHJpbmcgZSA9IHRvX3N0cmluZyAodG9fZXJyb3IgZSkjI3RvU3RyaW5nXG5lbmRcblxubW9kdWxlIE1hZ2ljID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFQgPSBzaWdcbiAgICBleGNlcHRpb24gRXJyb3Igb2YgZXJyb3IgdFxuICBlbmRcblxuICB0eXBlICgnYSwgJ2IpIGVxID0gRXEgOiAoJ2EsICdhKSBlcVxuXG4gIGxldCAoZXEgOiAoZXJyb3IgdCwgSnNfZXJyb3IudCkgZXEpID0gT2JqLm1hZ2ljIEVxXG5cbiAgbGV0IG0gPVxuICAgIG1hdGNoIGVxIHdpdGhcbiAgICB8IEVxIC0+XG4gICAgICAgIChtb2R1bGUgc3RydWN0XG4gICAgICAgICAgZXhjZXB0aW9uIEVycm9yID0gSnNfZXJyb3IuRXhuXG4gICAgICAgIGVuZCA6IFQpXG5cbiAgbW9kdWxlIEVycm9yID0gKHZhbCBtIDogVClcbmVuZFxuXG5pbmNsdWRlIE1hZ2ljLkVycm9yXG5cbmxldCByYWlzZV9qc19lcnJvciBlID0gSnNfZXJyb3IucmFpc2VfIChKc19lcnJvci5vZl9lcnJvciBlKVxuXG5sZXQgc3RyaW5nX29mX2Vycm9yIGUgPSBKc19lcnJvci50b19zdHJpbmcgKEpzX2Vycm9yLm9mX2Vycm9yIGUpXG5cbmxldCBleG5fd2l0aF9qc19iYWNrdHJhY2UgPSBKc19lcnJvci5hdHRhY2hfanNfYmFja3RyYWNlXG5cbmV4dGVybmFsIGpzX2Vycm9yX29mX2V4biA6IGV4biAtPiBlcnJvciB0IG9wdCA9IFwiY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cIlxuXG5jbGFzcyB0eXBlIGpzb24gPSBvYmplY3RcbiAgbWV0aG9kIHBhcnNlIDoganNfc3RyaW5nIHQgLT4gJ2EgbWV0aFxuXG4gIG1ldGhvZCBzdHJpbmdpZnkgOiAnYSAtPiBqc19zdHJpbmcgdCBtZXRoXG5lbmRcblxubGV0IF9KU09OIDoganNvbiB0ID0gVW5zYWZlLmdsb2JhbCMjLl9KU09OXG5cbmxldCBkZWNvZGVVUkkgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZGVjb2RlVVJJIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZGVjb2RlVVJJQ29tcG9uZW50IChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmRlY29kZVVSSUNvbXBvbmVudCBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IGVuY29kZVVSSSAocyA6IGpzX3N0cmluZyB0KSA6IGpzX3N0cmluZyB0ID1cbiAgVW5zYWZlLmZ1bl9jYWxsIFVuc2FmZS5nbG9iYWwjIy5lbmNvZGVVUkkgW3wgVW5zYWZlLmluamVjdCBzIHxdXG5cbmxldCBlbmNvZGVVUklDb21wb25lbnQgKHMgOiBqc19zdHJpbmcgdCkgOiBqc19zdHJpbmcgdCA9XG4gIFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuZW5jb2RlVVJJQ29tcG9uZW50IFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5sZXQgZXNjYXBlIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLmVzY2FwZSBbfCBVbnNhZmUuaW5qZWN0IHMgfF1cblxubGV0IHVuZXNjYXBlIChzIDoganNfc3RyaW5nIHQpIDoganNfc3RyaW5nIHQgPVxuICBVbnNhZmUuZnVuX2NhbGwgVW5zYWZlLmdsb2JhbCMjLnVuZXNjYXBlIFt8IFVuc2FmZS5pbmplY3QgcyB8XVxuXG5leHRlcm5hbCBib29sIDogYm9vbCAtPiBib29sIHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuZXh0ZXJuYWwgdG9fYm9vbCA6IGJvb2wgdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG5leHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+ICdhIGpzX2FycmF5IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbmV4dGVybmFsIHRvX2FycmF5IDogJ2EganNfYXJyYXkgdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbmV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4ganNfc3RyaW5nIHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCB0b19ieXRlc3RyaW5nIDoganNfc3RyaW5nIHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuZXh0ZXJuYWwgZmxvYXQgOiBmbG9hdCAtPiBudW1iZXJfdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBudW1iZXJfdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbmV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IG51bWJlciB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG5leHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiBudW1iZXIgdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbmV4dGVybmFsIGludDMyIDogaW50MzIgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbmV4dGVybmFsIHRvX2ludDMyIDogbnVtYmVyX3QgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG5leHRlcm5hbCBuYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gbnVtYmVyX3QgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG5leHRlcm5hbCB0b19uYXRpdmVpbnQgOiBudW1iZXJfdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuZXh0ZXJuYWwgdHlwZW9mIDogXyB0IC0+IGpzX3N0cmluZyB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbmV4dGVybmFsIGluc3RhbmNlb2YgOiBfIHQgLT4gXyBjb25zdHIgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxubGV0IGlzTmFOIChpIDogJ2EpIDogYm9vbCA9XG4gIHRvX2Jvb2wgKFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMuaXNOYU4gW3wgVW5zYWZlLmluamVjdCBpIHxdKVxuXG5sZXQgcGFyc2VJbnQgKHMgOiBqc19zdHJpbmcgdCkgOiBpbnQgPVxuICBsZXQgcyA9IFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMucGFyc2VJbnQgW3wgVW5zYWZlLmluamVjdCBzIHxdIGluXG4gIGlmIGlzTmFOIHMgdGhlbiBmYWlsd2l0aCBcInBhcnNlSW50XCIgZWxzZSBzXG5cbmxldCBwYXJzZUZsb2F0IChzIDoganNfc3RyaW5nIHQpIDogbnVtYmVyX3QgPVxuICBsZXQgcyA9IFVuc2FmZS5mdW5fY2FsbCBVbnNhZmUuZ2xvYmFsIyMucGFyc2VGbG9hdCBbfCBVbnNhZmUuaW5qZWN0IHMgfF0gaW5cbiAgaWYgaXNOYU4gcyB0aGVuIGZhaWx3aXRoIFwicGFyc2VGbG9hdFwiIGVsc2Ugc1xuXG5sZXQgXyA9XG4gIFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgKGZ1biBlIC0+XG4gICAgICBpZiBpbnN0YW5jZW9mIChPYmoubWFnaWMgZSA6IDwgLi4gPiB0KSBlcnJvcl9jb25zdHJcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IGUgPSBKc19lcnJvci5vZl9lcnJvciAoT2JqLm1hZ2ljIGUgOiBlcnJvciB0KSBpblxuICAgICAgICBTb21lIChKc19lcnJvci50b19zdHJpbmcgZSlcbiAgICAgIGVsc2VcbiAgICAgICAgbWF0Y2ggZSB3aXRoXG4gICAgICAgIHwgSnNfZXJyb3IuRXhuIGUgLT4gU29tZSAoSnNfZXJyb3IudG9fc3RyaW5nIGUpXG4gICAgICAgIHwgXyAtPiBOb25lKVxuXG5sZXQgZXhwb3J0X2pzIChmaWVsZCA6IGpzX3N0cmluZyB0KSB4ID1cbiAgVW5zYWZlLnNldFxuICAgIChVbnNhZmUucHVyZV9qc19leHByIFwianNvb19leHBvcnRzXCIpXG4gICAgZmllbGRcbiAgICAoaWZcbiAgICAgICBTdHJpbmcuZXF1YWwgKEpzLnRvX3N0cmluZyAodHlwZW9mIChPYmoubWFnaWMgeCkpKSBcImZ1bmN0aW9uXCJcbiAgICAgICAoKiBmdW5jdGlvbiB3aXRoIGFyaXR5L2xlbmd0aCBlcXVhbCB0byB6ZXJvIGFyZSBhbHJlYWR5IHdyYXBwZWQgKilcbiAgICAgICAmJiBVbnNhZmUuZ2V0IChPYmoubWFnaWMgeCkgKEpzLnN0cmluZyBcImxlbmd0aFwiKSA+IDBcbiAgICAgdGhlbiBPYmoubWFnaWMgKHdyYXBfY2FsbGJhY2sgKE9iai5tYWdpYyB4KSlcbiAgICAgZWxzZSB4KVxuXG5sZXQgZXhwb3J0IGZpZWxkIHggPSBleHBvcnRfanMgKHN0cmluZyBmaWVsZCkgeFxuXG5sZXQgZXhwb3J0X2FsbCBvYmogPVxuICBsZXQga2V5cyA9IG9iamVjdF9rZXlzIG9iaiBpblxuICBrZXlzIyNmb3JFYWNoXG4gICAgKHdyYXBfY2FsbGJhY2sgKGZ1biAoa2V5IDoganNfc3RyaW5nIHQpIF8gXyAtPiBleHBvcnRfanMga2V5IChVbnNhZmUuZ2V0IG9iaiBrZXkpKSlcblxuKCoqKiopXG5cbigqIERFUFJFQ0FURUQgKilcblxudHlwZSBmbG9hdF9wcm9wID0gbnVtYmVyX3QgcHJvcFxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2pzX2dldCIsImNhbWxfanNfc2V0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiY2FtbF9jYWxsMiIsImExIiwiZ2xvYmFsX2RhdGEiLCJKc19vZl9vY2FtbF9JbXBvcnQiLCJTdGRsaWIiLCJKc29vX3J1bnRpbWUiLCJTdGRsaWJfUHJpbnRleGMiLCJnbG9iYWwiLCJudWxsJCIsInVuZGVmaW5lZCQiLCJyZXR1cm4kIiwibWFwIiwieCIsImJpbmQiLCJ0ZXN0IiwiaXRlciIsImNhc2UkIiwiZyIsImdldCIsIm9wdGlvbiIsInRvX29wdGlvbiIsImNvZXJjZSIsImNvZXJjZV9vcHQiLCJzdHJpbmdfY29uc3RyIiwicmVnRXhwIiwib2JqZWN0X2NvbnN0cnVjdG9yIiwib2JqZWN0X2tleXMiLCJ0NCIsImFycmF5X2NvbnN0cnVjdG9yIiwiYXJyYXlfbWFwIiwidDYiLCJjYiIsImlkeCIsInBhcmFtIiwiYXJyYXlfbWFwaSIsInN0cl9hcnJheSIsIm1hdGNoX3Jlc3VsdCIsImRhdGVfY29uc3RyIiwibWF0aCIsImVycm9yX2NvbnN0ciIsImluY2x1ZGUiLCJyYWlzZSIsImV4bl93aXRoX2pzX2JhY2t0cmFjZSIsIm9mX2V4biIsIkVycm9yIiwibmFtZSIsInQxMSIsIm1lc3NhZ2UiLCJ0MTIiLCJzdGFjayIsInQxMyIsInRvX3N0cmluZyIsInQxNCIsInJhaXNlX2pzX2Vycm9yIiwiZSIsInN0cmluZ19vZl9lcnJvciIsIkpTT04iLCJkZWNvZGVVUkkiLCJzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwidW5lc2NhcGUiLCJpc05hTiIsImkiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJleHBvcnRfanMiLCJmaWVsZCIsImV4cG9ydCQiLCJleHBvcnRfYWxsIiwib2JqIiwia2V5cyIsInQyNiIsImtleSIsIkpzX29mX29jYW1sX0pzIl0sIm1hcHBpbmdzIjoiSUFBQUEsVUFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsd0JBQUE7QUFBQSxJQUFBQywwQkFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBRixHQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxTQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsU0NvRWlCO0FBQUEsSUFBQUMsUUFvQ0s7QUFBQSxJQUFBQyxhQUlRO0FBQUEsWUFBQUMsUUFBQSxHRDVHOUI7QUFBQSxZQUFBQyxJQUFBQyxHQUFBZCxHQ3VKa0MsNEJBQXVCLGdCQUFLO0FBQUEsWUFBQWUsS0FBQUQsR0FBQWQsR0FFM0IsNEJBQWdCLGdCQUFHO0FBQUEsWUFBQWdCLEtBQUFGLEdBRWxCO0FBQUEsWUFBQUcsS0FBQUgsR0FBQWQ7QUFBQUEsUUFBQSxJQUVLO0FBQUEsZUFBTSxvQkFBRztBQUFBO0FBQUEsWUFBQWtCLE1BQUFKLEdB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ekJvQjtBQUFBO0FBQUEsRUR2ekJwQiIsImlnbm9yZUxpc3QiOlswXX19LHsib2Zmc2V0Ijp7ImxpbmUiOjQwMTIxLCJjb2x1bW4iOjB9LCJtYXAiOnsidmVyc2lvbiI6MywiZmlsZSI6Ii5zeF9icm93c2VyLmVvYmpzL2pzb28vZHVuZV9fZXhlX19TeF9icm93c2VyLmNtby5qcyIsInNvdXJjZXMiOlsiL2J1aWx0aW4vYmxhY2tib3gubWwiLCIvd29ya3NwYWNlX3Jvb3QvYnJvd3Nlci9zeF9icm93c2VyLm1sIl0sInNvdXJjZXNDb250ZW50IjpbIigqIGdlbmVyYXRlZCBjb2RlICopIiwiKCoqIHN4X2Jyb3dzZXIubWwg4oCUIE9DYW1sIFNYIGtlcm5lbCBjb21waWxlZCB0byBXQVNNL0pTIGZvciBicm93c2VyIHVzZS5cblxuICAgIEV4cG9zZXMgdGhlIENFSyBtYWNoaW5lLCBieXRlY29kZSBWTSwgcGFyc2VyLCBhbmQgcHJpbWl0aXZlcyBhcyBhXG4gICAgZ2xvYmFsIFtTeEtlcm5lbF0gb2JqZWN0IHRoYXQgdGhlIEpTIHBsYXRmb3JtIGxheWVyIGJpbmRzIHRvLlxuXG4gICAgRnJlc2ggaW1wbGVtZW50YXRpb24gb24gdGhlIG9jYW1sLXZtIGJyYW5jaCDigJQgYnVpbGRzIG9uIHRoZSBieXRlY29kZVxuICAgIFZNICsgbGF6eSBKSVQgaW5mcmFzdHJ1Y3R1cmUuICopXG5cbm9wZW4gSnNfb2Zfb2NhbWxcbm9wZW4gU3hfdHlwZXNcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBPcGFxdWUgdmFsdWUgaGFuZGxlIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiBOb24tcHJpbWl0aXZlIFNYIHZhbHVlcyAobGFtYmRhcywgY29tcG9uZW50cywgc2lnbmFscywgZXRjLikgYXJlICAgICopXG4oKiBzdG9yZWQgaGVyZSBhbmQgcmVwcmVzZW50ZWQgb24gdGhlIEpTIHNpZGUgYXMgb2JqZWN0cyB3aXRoIGFuICAgICAgICopXG4oKiBfX3N4X2hhbmRsZSBpbnRlZ2VyIGtleS4gIFByZXNlcnZlcyBpZGVudGl0eSBhY3Jvc3MgSlPihpRPQ2FtbC4gICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCBfbmV4dF9oYW5kbGUgPSByZWYgMFxubGV0IF9oYW5kbGVfdGFibGUgOiAoaW50LCB2YWx1ZSkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgMjU2XG5cbmxldCBhbGxvY19oYW5kbGUgKHYgOiB2YWx1ZSkgOiBpbnQgPVxuICBsZXQgaWQgPSAhX25leHRfaGFuZGxlIGluXG4gIGluY3IgX25leHRfaGFuZGxlO1xuICBIYXNodGJsLnJlcGxhY2UgX2hhbmRsZV90YWJsZSBpZCB2O1xuICBpZFxuXG5sZXQgZ2V0X2hhbmRsZSAoaWQgOiBpbnQpIDogdmFsdWUgPVxuICBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IF9oYW5kbGVfdGFibGUgaWQgd2l0aFxuICB8IFNvbWUgdiAtPiB2XG4gIHwgTm9uZSAtPiByYWlzZSAoRXZhbF9lcnJvciAoUHJpbnRmLnNwcmludGYgXCJJbnZhbGlkIFNYIGhhbmRsZTogJWRcIiBpZCkpXG5cbigqIEpTLXNpZGUgb3BhcXVlIGhvc3Qgb2JqZWN0IHRhYmxlLlxuICAgSG9zdCBvYmplY3RzIChET00gZWxlbWVudHMsIGNvbnNvbGUsIGV0Yy4pIGFyZSBzdG9yZWQgaGVyZSB0byBwcmVzZXJ2ZVxuICAgaWRlbnRpdHkgYWNyb3NzIHRoZSBPQ2FtbOKGlEpTIGJvdW5kYXJ5LiBSZXByZXNlbnRlZCBhcyBEaWN0IHdpdGhcbiAgIF9faG9zdF9oYW5kbGUga2V5IG9uIHRoZSBPQ2FtbCBzaWRlLiAqKVxubGV0IF9uZXh0X2hvc3RfaGFuZGxlID0gcmVmIDBcbmxldCBfYWxsb2NfaG9zdF9oYW5kbGUgPSBKcy5VbnNhZmUucHVyZV9qc19leHByXG4gIFwiKGZ1bmN0aW9uKCkgeyB2YXIgdCA9IHt9OyB2YXIgbiA9IDA7IHJldHVybiB7IHB1dDogZnVuY3Rpb24ob2JqKSB7IHZhciBpZCA9IG4rKzsgdFtpZF0gPSBvYmo7IHJldHVybiBpZDsgfSwgZ2V0OiBmdW5jdGlvbihpZCkgeyByZXR1cm4gdFtpZF07IH0gfTsgfSkoKVwiXG5sZXQgaG9zdF9wdXQgKG9iaiA6IEpzLlVuc2FmZS5hbnkpIDogaW50ID1cbiAgbGV0IGlkID0gIV9uZXh0X2hvc3RfaGFuZGxlIGluXG4gIGluY3IgX25leHRfaG9zdF9oYW5kbGU7XG4gIGlnbm9yZSAoSnMuVW5zYWZlLm1ldGhfY2FsbCBfYWxsb2NfaG9zdF9oYW5kbGUgXCJwdXRcIiBbfCBvYmogfF0pO1xuICBpZFxubGV0IGhvc3RfZ2V0X2pzIChpZCA6IGludCkgOiBKcy5VbnNhZmUuYW55ID1cbiAgSnMuVW5zYWZlLm1ldGhfY2FsbCBfYWxsb2NfaG9zdF9oYW5kbGUgXCJnZXRcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IGlkIHxdXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogR2xvYmFsIGVudmlyb25tZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIEZvcmNlIG1vZHVsZSBpbml0aWFsaXphdGlvbiDigJQgdGhlc2UgbW9kdWxlcyByZWdpc3RlciBwcmltaXRpdmVzXG4gICBpbiB0aGVpciBsZXQgKCkgPSAuLi4gYmxvY2tzIGJ1dCBhcmVuJ3QgcmVmZXJlbmNlZCBkaXJlY3RseS4gKilcbmxldCAoKSA9IFN4X3Njb3BlLmNsZWFyX2FsbCAoKVxuXG5sZXQgZ2xvYmFsX2VudiA9IG1ha2VfZW52ICgpXG5sZXQgX3N4X3JlbmRlcl9tb2RlID0gcmVmIGZhbHNlXG5cbmxldCBjYWxsX3N4X2ZuIChmbiA6IHZhbHVlKSAoYXJncyA6IHZhbHVlIGxpc3QpIDogdmFsdWUgPVxuICBsZXQgcmVzdWx0ID0gU3hfcnVudGltZS5zeF9jYWxsIGZuIGFyZ3MgaW5cbiAgIVN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gcmVzdWx0XG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogVmFsdWUgY29udmVyc2lvbjogT0NhbWwgPC0+IEpTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqKiBUYWcgYSBKUyBmdW5jdGlvbiB3aXRoIF9fc3hfaGFuZGxlIGFuZCBfdHlwZSBwcm9wZXJ0aWVzLiAqKVxubGV0IF90YWdfZm4gPSBKcy5VbnNhZmUucHVyZV9qc19leHByXG4gIFwiKGZ1bmN0aW9uKGZuLCBoYW5kbGUsIHR5cGUpIHsgZm4uX19zeF9oYW5kbGUgPSBoYW5kbGU7IGZuLl90eXBlID0gdHlwZTsgcmV0dXJuIGZuOyB9KVwiXG5cbmxldCByZWMgdmFsdWVfdG9fanMgKHYgOiB2YWx1ZSkgOiBKcy5VbnNhZmUuYW55ID1cbiAgbWF0Y2ggdiB3aXRoXG4gIHwgTmlsIC0+IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbFxuICB8IEJvb2wgYiAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIGIpXG4gIHwgTnVtYmVyIG4gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMubnVtYmVyX29mX2Zsb2F0IG4pXG4gIHwgU3RyaW5nIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpXG4gIHwgUmF3SFRNTCBzIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyBzKVxuICB8IFN5bWJvbCBzIC0+XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwic3ltYm9sXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpKSB8XSlcbiAgfCBLZXl3b3JkIGsgLT5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJrZXl3b3JkXCIpKTtcbiAgICAgIChcIm5hbWVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIGspKSB8XSlcbiAgfCBMaXN0IGl0ZW1zIHwgTGlzdFJlZiB7IGNvbnRlbnRzID0gaXRlbXMgfSAtPlxuICAgIGxldCBhcnIgPSBpdGVtcyB8PiBMaXN0Lm1hcCB2YWx1ZV90b19qcyB8PiBBcnJheS5vZl9saXN0IGluXG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuVW5zYWZlLm9iaiBbfFxuICAgICAgKFwiX3R5cGVcIiwgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwibGlzdFwiKSk7XG4gICAgICAoXCJpdGVtc1wiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSBhcnIpKSB8XSlcbiAgfCBEaWN0IGQgLT5cbiAgICAoKiBDaGVjayBmb3IgX19ob3N0X2hhbmRsZSDigJQgcmV0dXJuIG9yaWdpbmFsIEpTIG9iamVjdCAqKVxuICAgIChtYXRjaCBIYXNodGJsLmZpbmRfb3B0IGQgXCJfX2hvc3RfaGFuZGxlXCIgd2l0aFxuICAgICB8IFNvbWUgKE51bWJlciBuKSAtPiBob3N0X2dldF9qcyAoaW50X29mX2Zsb2F0IG4pXG4gICAgIHwgXyAtPlxuICAgICAgIGxldCBvYmogPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIFwiX3R5cGVcIikgKEpzLnN0cmluZyBcImRpY3RcIik7XG4gICAgICAgSGFzaHRibC5pdGVyIChmdW4gayB2IC0+XG4gICAgICAgICBKcy5VbnNhZmUuc2V0IG9iaiAoSnMuc3RyaW5nIGspICh2YWx1ZV90b19qcyB2KSkgZDtcbiAgICAgICBKcy5VbnNhZmUuaW5qZWN0IG9iailcbiAgKCogQ2FsbGFibGUgdmFsdWVzOiB3cmFwIGFzIEpTIGZ1bmN0aW9ucyB3aXRoIF9fc3hfaGFuZGxlICopXG4gIHwgTGFtYmRhIF8gfCBOYXRpdmVGbiBfIHwgQ29udGludWF0aW9uIF8gfCBWbUNsb3N1cmUgXyAtPlxuICAgIGxldCBoYW5kbGUgPSBhbGxvY19oYW5kbGUgdiBpblxuICAgIGxldCBpbm5lciA9IEpzLndyYXBfY2FsbGJhY2sgKGZ1biBhcmdzX2pzIC0+XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGFyZyA9IGpzX3RvX3ZhbHVlIGFyZ3NfanMgaW5cbiAgICAgICAgbGV0IGFyZ3MgPSBtYXRjaCBhcmcgd2l0aCBOaWwgLT4gW10gfCBfIC0+IFthcmddIGluXG4gICAgICAgIGxldCByZXN1bHQgPSBjYWxsX3N4X2ZuIHYgYXJncyBpblxuICAgICAgICB2YWx1ZV90b19qcyByZXN1bHRcbiAgICAgIHdpdGhcbiAgICAgIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgbGV0IGZuX2luZm8gPSBQcmludGYuc3ByaW50ZiBcIiBbY2FsbGJhY2sgJXMgaGFuZGxlPSVkXVwiICh0eXBlX29mIHYpIGhhbmRsZSBpblxuICAgICAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgICAgIFwiZXJyb3JcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiW3N4XSBcIiBeIG1zZyBeIGZuX2luZm8pKSB8XSk7XG4gICAgICAgIEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbFxuICAgICAgfCBleG4gLT5cbiAgICAgICAgbGV0IGZuX2luZm8gPSBQcmludGYuc3ByaW50ZiBcIiBbY2FsbGJhY2sgJXMgaGFuZGxlPSVkXVwiICh0eXBlX29mIHYpIGhhbmRsZSBpblxuICAgICAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgICAgICAoSnMuVW5zYWZlLmdldCBKcy5VbnNhZmUuZ2xvYmFsIChKcy5zdHJpbmcgXCJjb25zb2xlXCIpKVxuICAgICAgICAgIFwiZXJyb3JcIiBbfCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiW3N4XSBVTkNBVUdIVDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuIF4gZm5faW5mbykpIHxdKTtcbiAgICAgICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSBpblxuICAgIEpzLlVuc2FmZS5mdW5fY2FsbCBfdGFnX2ZuIFt8XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IGlubmVyO1xuICAgICAgSnMuVW5zYWZlLmluamVjdCBoYW5kbGU7XG4gICAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKHR5cGVfb2YgdikpIHxdXG4gICgqIE5vbi1jYWxsYWJsZSBjb21wb3VuZDogdGFnZ2VkIG9iamVjdCB3aXRoIGhhbmRsZSAqKVxuICB8IF8gLT5cbiAgICBsZXQgaGFuZGxlID0gYWxsb2NfaGFuZGxlIHYgaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5VbnNhZmUub2JqIFt8XG4gICAgICAoXCJfdHlwZVwiLCBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKHR5cGVfb2YgdikpKTtcbiAgICAgIChcIl9fc3hfaGFuZGxlXCIsIEpzLlVuc2FmZS5pbmplY3QgaGFuZGxlKSB8XSlcblxuYW5kIGpzX3RvX3ZhbHVlIChqcyA6IEpzLlVuc2FmZS5hbnkpIDogdmFsdWUgPVxuICBpZiBKcy5VbnNhZmUuZXF1YWxzIGpzIEpzLm51bGwgfHwgSnMuVW5zYWZlLmVxdWFscyBqcyBKcy51bmRlZmluZWQgdGhlbiBOaWxcbiAgZWxzZVxuICAgIGxldCB0eSA9IEpzLnRvX3N0cmluZyAoSnMudHlwZW9mIGpzKSBpblxuICAgIG1hdGNoIHR5IHdpdGhcbiAgICB8IFwibnVtYmVyXCIgLT4gTnVtYmVyIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UganMpKVxuICAgIHwgXCJib29sZWFuXCIgLT4gQm9vbCAoSnMudG9fYm9vbCAoSnMuVW5zYWZlLmNvZXJjZSBqcykpXG4gICAgfCBcInN0cmluZ1wiIC0+IFN0cmluZyAoSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuY29lcmNlIGpzKSlcbiAgICB8IFwiZnVuY3Rpb25cIiAtPlxuICAgICAgbGV0IGggPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJfX3N4X2hhbmRsZVwiKSBpblxuICAgICAgaWYgbm90IChKcy5VbnNhZmUuZXF1YWxzIGggSnMudW5kZWZpbmVkKSB0aGVuXG4gICAgICAgIGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpXG4gICAgICBlbHNlXG4gICAgICAgICgqIFBsYWluIEpTIGZ1bmN0aW9uIOKAlCB3cmFwIGFzIE5hdGl2ZUZuICopXG4gICAgICAgIE5hdGl2ZUZuIChcImpzLWNhbGxiYWNrXCIsIGZ1biBhcmdzIC0+XG4gICAgICAgICAgbGV0IGpzX2FyZ3MgPSBhcmdzIHw+IExpc3QubWFwIHZhbHVlX3RvX2pzIHw+IEFycmF5Lm9mX2xpc3QgaW5cbiAgICAgICAgICBqc190b192YWx1ZSAoSnMuVW5zYWZlLmZ1bl9jYWxsIGpzIChBcnJheS5tYXAgRnVuLmlkIGpzX2FyZ3MpKSlcbiAgICB8IFwib2JqZWN0XCIgLT5cbiAgICAgIGxldCBoID0gSnMuVW5zYWZlLmdldCBqcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgICAgIGlmIG5vdCAoSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCkgdGhlblxuICAgICAgICBnZXRfaGFuZGxlIChKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgaCkgfD4gaW50X29mX2Zsb2F0KVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgdHlwZV9maWVsZCA9IEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIl90eXBlXCIpIGluXG4gICAgICAgIGlmIEpzLlVuc2FmZS5lcXVhbHMgdHlwZV9maWVsZCBKcy51bmRlZmluZWQgdGhlbiBiZWdpblxuICAgICAgICAgIGlmIEpzLnRvX2Jvb2wgKEpzLlVuc2FmZS5nbG9iYWwjIy5fQXJyYXkjI2lzQXJyYXkganMpIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGxldCBuID0gSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJsZW5ndGhcIikpKSB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICAgICAgICAgIExpc3QgKExpc3QuaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgICAgICBqc190b192YWx1ZSAoSnMuYXJyYXlfZ2V0IChKcy5VbnNhZmUuY29lcmNlIGpzKSBpIHw+IEpzLk9wdGRlZi50b19vcHRpb24gfD4gT3B0aW9uLmdldCkpKVxuICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICAoKiBPcGFxdWUgaG9zdCBvYmplY3Qg4oCUIHN0b3JlIGluIEpTLXNpZGUgdGFibGUsIHJldHVybiBEaWN0IHdpdGggX19ob3N0X2hhbmRsZSAqKVxuICAgICAgICAgICAgbGV0IGlkID0gaG9zdF9wdXQganMgaW5cbiAgICAgICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpblxuICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJfX2hvc3RfaGFuZGxlXCIgKE51bWJlciAoZmxvYXRfb2ZfaW50IGlkKSk7XG4gICAgICAgICAgICBEaWN0IGRcbiAgICAgICAgICBlbmRcbiAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBsZXQgdGFnID0gSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuY29lcmNlIHR5cGVfZmllbGQpIGluXG4gICAgICAgICAgbWF0Y2ggdGFnIHdpdGhcbiAgICAgICAgICB8IFwic3ltYm9sXCIgLT4gU3ltYm9sIChKcy50b19zdHJpbmcgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBcIm5hbWVcIikpKVxuICAgICAgICAgIHwgXCJrZXl3b3JkXCIgLT4gS2V5d29yZCAoSnMudG9fc3RyaW5nIChKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJuYW1lXCIpKSlcbiAgICAgICAgICB8IFwibGlzdFwiIC0+XG4gICAgICAgICAgICBsZXQgaXRlbXNfanMgPSBKcy5VbnNhZmUuZ2V0IGpzIChKcy5zdHJpbmcgXCJpdGVtc1wiKSBpblxuICAgICAgICAgICAgbGV0IG4gPSBKcy5mbG9hdF9vZl9udW1iZXIgKEpzLlVuc2FmZS5jb2VyY2UgKEpzLlVuc2FmZS5nZXQgaXRlbXNfanMgKEpzLnN0cmluZyBcImxlbmd0aFwiKSkpIHw+IGludF9vZl9mbG9hdCBpblxuICAgICAgICAgICAgTGlzdCAoTGlzdC5pbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgICAgIGpzX3RvX3ZhbHVlIChKcy5hcnJheV9nZXQgKEpzLlVuc2FmZS5jb2VyY2UgaXRlbXNfanMpIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSkpXG4gICAgICAgICAgfCBcImRpY3RcIiAtPlxuICAgICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICAgICAgICBsZXQga2V5cyA9IEpzLlVuc2FmZS5nbG9iYWwjIy5fT2JqZWN0IyNrZXlzIGpzIGluXG4gICAgICAgICAgICBsZXQgbGVuID0ga2V5cyMjLmxlbmd0aCBpblxuICAgICAgICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgICAgICAgbGV0IGsgPSBKcy50b19zdHJpbmcgKEpzLmFycmF5X2dldCBrZXlzIGkgfD4gSnMuT3B0ZGVmLnRvX29wdGlvbiB8PiBPcHRpb24uZ2V0KSBpblxuICAgICAgICAgICAgICBpZiBrIDw+IFwiX3R5cGVcIiB0aGVuXG4gICAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgayAoanNfdG9fdmFsdWUgKEpzLlVuc2FmZS5nZXQganMgKEpzLnN0cmluZyBrKSkpXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgRGljdCBkXG4gICAgICAgICAgfCBfIC0+IE5pbFxuICAgICAgICBlbmRcbiAgICB8IF8gLT4gTmlsXG5cbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuKCogU2lkZS1jaGFubmVsIHJldHVybiAoYnlwYXNzZXMganNfb2Zfb2NhbWwgc3RyaXBwaW5nIHByb3BlcnRpZXMpICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbmxldCByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodiA6IEpzLlVuc2FmZS5hbnkpIDogSnMuVW5zYWZlLmFueSA9XG4gIEpzLlVuc2FmZS5zZXQgSnMuVW5zYWZlLmdsb2JhbCAoSnMuc3RyaW5nIFwiX19zeFJcIikgdjsgdlxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBlcnNpc3RlbnQgVk0gZ2xvYmFscyDigJQgc3luY2VkIHdpdGggZ2xvYmFsX2VudiAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG5cbigqIFN0cmluZy1rZXllZCBtaXJyb3Igb2YgZ2xvYmFsX2Vudi5iaW5kaW5ncyBmb3IgVm1DbG9zdXJlcy5cbiAgIFZtQ2xvc3VyZXMgZnJvbSBieXRlY29kZSBtb2R1bGVzIGhvbGQgdm1fZW52X3JlZiBwb2ludGluZyBoZXJlLlxuICAgTXVzdCBzdGF5IGluIHN5bmMgc28gVm1DbG9zdXJlcyBzZWUgcG9zdC1ib290IGRlZmluaXRpb25zLiAqKVxubGV0IF92bV9nbG9iYWxzIDogKHN0cmluZywgdmFsdWUpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDUxMlxubGV0IF9pbl9iYXRjaCA9IHJlZiBmYWxzZVxuXG4oKiBTeW5jIGVuduKGklZNOiBjb3B5IGFsbCBiaW5kaW5ncyBmcm9tIGdsb2JhbF9lbnYuYmluZGluZ3MgdG8gX3ZtX2dsb2JhbHMuXG4gICBDYWxsZWQgYWZ0ZXIgQ0VLIGV2YWwvbG9hZCBzbyBWbUNsb3N1cmVzIGNhbiBzZWUgbmV3IGRlZmluaXRpb25zLiAqKVxubGV0IHN5bmNfZW52X3RvX3ZtICgpID1cbiAgSGFzaHRibC5pdGVyIChmdW4gaWQgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyAodW5pbnRlcm4gaWQpIHZcbiAgKSBnbG9iYWxfZW52LmJpbmRpbmdzXG5cbigqIEhvb2s6IGludGVyY2VwdCBlbnZfYmluZCBvbiBnbG9iYWxfZW52IHRvIGFsc28gdXBkYXRlIF92bV9nbG9iYWxzLlxuICAgT25seSBzeW5jIGJpbmRpbmdzIG9uIHRoZSBnbG9iYWwgZW52IOKAlCBsZXQgYmluZGluZ3MgaW4gY2hpbGQgZW52c1xuICAgbXVzdCBOT1QgbGVhayBpbnRvIF92bV9nbG9iYWxzICh0aGV5J2Qgb3ZlcndyaXRlIHJlYWwgZGVmaW5pdGlvbnMpLiAqKVxubGV0ICgpID1cbiAgU3hfdHlwZXMuX2Vudl9iaW5kX2hvb2sgOj0gU29tZSAoZnVuIGVudiBuYW1lIHYgLT5cbiAgICBpZiBlbnYgPT0gZ2xvYmFsX2VudiB0aGVuXG4gICAgICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2KVxuXG4oKiBSZXZlcnNlIGhvb2s6IHN5bmMgVk0gR0xPQkFMX1NFVCBtdXRhdGlvbnMgYmFjayB0byBnbG9iYWxfZW52LlxuICAgV2l0aG91dCB0aGlzLCBzZXQhIGluc2lkZSBKSVQtY29tcGlsZWQgZnVuY3Rpb25zIHdyaXRlcyB0byBfdm1fZ2xvYmFsc1xuICAgYnV0IGxlYXZlcyBnbG9iYWxfZW52IHN0YWxlIOKAlCBDRUsgcmVhZHMgdGhlbiBzZWUgdGhlIG9sZCB2YWx1ZS4gKilcbmxldCAoKSA9XG4gIFN4X3R5cGVzLl92bV9nbG9iYWxfc2V0X2hvb2sgOj0gU29tZSAoZnVuIG5hbWUgdiAtPlxuICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChTeF90eXBlcy5pbnRlcm4gbmFtZSkgdilcblxuKCogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICopXG4oKiBDb3JlIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcblxubGV0IGFwaV9wYXJzZSBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgdmFsdWVzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5hcnJheSAodmFsdWVzIHw+IExpc3QubWFwIHZhbHVlX3RvX2pzIHw+IEFycmF5Lm9mX2xpc3QpKVxuICB3aXRoIFBhcnNlX2Vycm9yIG1zZyAtPlxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuXG5sZXQgYXBpX2V2YWwgc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgZW52ID0gRW52IGdsb2JhbF9lbnYgaW5cbiAgICBsZXQgcmVzdWx0ID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBfYWNjIGV4cHIgLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGVudikgTmlsIGV4cHJzIGluXG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxuKCoqIGV2YWxWTTogY29tcGlsZSBTWCBzb3VyY2UgdG8gYnl0ZWNvZGUgYW5kIHJ1biB0aHJvdWdoIHRoZSBWTS5cbiAgICBHbG9iYWxzIGRlZmluZWQgd2l0aCBgZGVmaW5lYCBhcmUgdmlzaWJsZSB0byBzdWJzZXF1ZW50IGV2YWxWTS9ldmFsIGNhbGxzLlxuICAgIFRoaXMgdGVzdHMgdGhlIGV4YWN0IHNhbWUgY29kZSBwYXRoIGFzIGlzbGFuZCBoeWRyYXRpb24gYW5kIGNsaWNrIGhhbmRsZXJzLiAqKVxubGV0IGFwaV9ldmFsX3ZtIHNyY19qcyA9XG4gIGxldCBzcmMgPSBKcy50b19zdHJpbmcgc3JjX2pzIGluXG4gIHRyeVxuICAgIGxldCBleHBycyA9IFN4X3BhcnNlci5wYXJzZV9hbGwgc3JjIGluXG4gICAgbGV0IGNvbXBpbGVfZm4gPSBtYXRjaCBIYXNodGJsLmZpbmRfb3B0IF92bV9nbG9iYWxzIFwiY29tcGlsZS1tb2R1bGVcIiB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICB8IE5vbmUgLT4gZW52X2dldCBnbG9iYWxfZW52IFwiY29tcGlsZS1tb2R1bGVcIiBpblxuICAgIGxldCBjb2RlX3ZhbCA9IFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgY29tcGlsZV9mbiBbTGlzdCBleHByc10pIGluXG4gICAgbGV0IGNvZGUgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgY29kZV92YWwgaW5cbiAgICBsZXQgcmVzdWx0ID0gU3hfdm0uZXhlY3V0ZV9tb2R1bGUgY29kZSBfdm1fZ2xvYmFscyBpblxuICAgICgqIFN5bmMgVk0gZ2xvYmFscyDihpIgQ0VLIGVudiBzbyBzdWJzZXF1ZW50IGV2YWwoKSBjYWxscyBzZWUgZGVmaW5lcyAqKVxuICAgIEhhc2h0YmwuaXRlciAoZnVuIG5hbWUgdiAtPlxuICAgICAgbGV0IGlkID0gaW50ZXJuIG5hbWUgaW5cbiAgICAgIGlmIG5vdCAoSGFzaHRibC5tZW0gZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCkgdGhlblxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICBlbHNlIChtYXRjaCBIYXNodGJsLmZpbmQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCwgdiB3aXRoXG4gICAgICAgIHwgVm1DbG9zdXJlIF8sIFZtQ2xvc3VyZSBfIHwgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgICB8IF8gLT4gKCkpXG4gICAgKSBfdm1fZ2xvYmFscztcbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgcmVzdWx0KVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIG1zZykpXG4gIHwgUGFyc2VfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJQYXJzZSBlcnJvcjogXCIgXiBtc2cpKVxuICB8IE5vdF9mb3VuZCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJFcnJvcjogY29tcGlsZS1tb2R1bGUgbm90IGxvYWRlZFwiKVxuXG5sZXQgYXBpX2V2YWxfZXhwciBleHByX2pzIF9lbnZfanMgPVxuICBsZXQgZXhwciA9IGpzX3RvX3ZhbHVlIGV4cHJfanMgaW5cbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpIGluXG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIHJlc3VsdClcbiAgd2l0aCBFdmFsX2Vycm9yIG1zZyAtPlxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuXG5sZXQgYXBpX2xvYWQgc3JjX2pzID1cbiAgbGV0IHNyYyA9IEpzLnRvX3N0cmluZyBzcmNfanMgaW5cbiAgdHJ5XG4gICAgbGV0IGV4cHJzID0gU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMgaW5cbiAgICBsZXQgZW52ID0gRW52IGdsb2JhbF9lbnYgaW5cbiAgICBsZXQgY291bnQgPSByZWYgMCBpblxuICAgIExpc3QuaXRlciAoZnVuIGV4cHIgLT4gaWdub3JlIChTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52KTsgaW5jciBjb3VudCkgZXhwcnM7XG4gICAgc3luY19lbnZfdG9fdm0gKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCAhY291bnRcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcblxubGV0IGFwaV9iZWdpbl9tb2R1bGVfbG9hZCAoKSA9XG4gICgqIFNuYXBzaG90IGN1cnJlbnQgZW52IGludG8gdGhlIHBlcnNpc3RlbnQgVk0gZ2xvYmFscyB0YWJsZSAqKVxuICBIYXNodGJsLmNsZWFyIF92bV9nbG9iYWxzO1xuICBIYXNodGJsLml0ZXIgKGZ1biBpZCB2IC0+IEhhc2h0YmwucmVwbGFjZSBfdm1fZ2xvYmFscyAodW5pbnRlcm4gaWQpIHYpIGdsb2JhbF9lbnYuYmluZGluZ3M7XG4gIF9pbl9iYXRjaCA6PSB0cnVlO1xuICBKcy5VbnNhZmUuaW5qZWN0IHRydWVcblxubGV0IGFwaV9lbmRfbW9kdWxlX2xvYWQgKCkgPVxuICBpZiAhX2luX2JhdGNoIHRoZW4gYmVnaW5cbiAgICAoKiBDb3B5IFZNIGdsb2JhbHMgYmFjayB0byBlbnYgKGJ5dGVjb2RlIG1vZHVsZXMgZGVmaW5lZCBuZXcgc3ltYm9scykgKilcbiAgICBIYXNodGJsLml0ZXIgKGZ1biBrIHYgLT5cbiAgICAgIEhhc2h0YmwucmVwbGFjZSBnbG9iYWxfZW52LmJpbmRpbmdzIChpbnRlcm4gaykgdlxuICAgICkgX3ZtX2dsb2JhbHM7XG4gICAgX2luX2JhdGNoIDo9IGZhbHNlXG4gIGVuZDtcbiAgSnMuVW5zYWZlLmluamVjdCB0cnVlXG5cbmxldCBzeW5jX3ZtX3RvX2VudiAoKSA9XG4gIEhhc2h0YmwuaXRlciAoZnVuIG5hbWUgdiAtPlxuICAgIGxldCBpZCA9IGludGVybiBuYW1lIGluXG4gICAgaWYgbm90IChIYXNodGJsLm1lbSBnbG9iYWxfZW52LmJpbmRpbmdzIGlkKSB0aGVuXG4gICAgICBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgZWxzZSBiZWdpblxuICAgICAgKCogVXBkYXRlIGV4aXN0aW5nIGJpbmRpbmcgaWYgdGhlIFZNIGhhcyBhIG5ld2VyIHZhbHVlICopXG4gICAgICBsZXQgZXhpc3RpbmcgPSBIYXNodGJsLmZpbmQgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCBpblxuICAgICAgbWF0Y2ggZXhpc3RpbmcsIHYgd2l0aFxuICAgICAgfCBWbUNsb3N1cmUgXywgVm1DbG9zdXJlIF8gLT4gSGFzaHRibC5yZXBsYWNlIGdsb2JhbF9lbnYuYmluZGluZ3MgaWQgdlxuICAgICAgfCBfLCBWbUNsb3N1cmUgXyAtPiBIYXNodGJsLnJlcGxhY2UgZ2xvYmFsX2Vudi5iaW5kaW5ncyBpZCB2XG4gICAgICB8IF8gLT4gKClcbiAgICBlbmRcbiAgKSBfdm1fZ2xvYmFsc1xuXG5sZXQgYXBpX2xvYWRfbW9kdWxlIG1vZHVsZV9qcyA9XG4gIHRyeVxuICAgIGxldCBjb2RlX3ZhbCA9IGpzX3RvX3ZhbHVlIG1vZHVsZV9qcyBpblxuICAgIGxldCBjb2RlID0gU3hfdm0uY29kZV9mcm9tX3ZhbHVlIGNvZGVfdmFsIGluXG4gICAgbGV0IF9yZXN1bHQgPSBTeF92bS5leGVjdXRlX21vZHVsZSBjb2RlIF92bV9nbG9iYWxzIGluXG4gICAgc3luY192bV90b19lbnYgKCk7XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSGFzaHRibC5sZW5ndGggX3ZtX2dsb2JhbHMpXG4gIHdpdGhcbiAgfCBFdmFsX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBleG4gLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIkVycm9yOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pKVxuXG5sZXQgYXBpX2RlYnVnX2VudiBuYW1lX2pzID1cbiAgbGV0IG5hbWUgPSBKcy50b19zdHJpbmcgbmFtZV9qcyBpblxuICBsZXQgaWQgPSBpbnRlcm4gbmFtZSBpblxuICBsZXQgZm91bmRfZW52ID0gSGFzaHRibC5maW5kX29wdCBnbG9iYWxfZW52LmJpbmRpbmdzIGlkIGluXG4gIGxldCBmb3VuZF92bSA9IEhhc2h0YmwuZmluZF9vcHQgX3ZtX2dsb2JhbHMgbmFtZSBpblxuICBsZXQgdG90YWxfZW52ID0gSGFzaHRibC5sZW5ndGggZ2xvYmFsX2Vudi5iaW5kaW5ncyBpblxuICBsZXQgdG90YWxfdm0gPSBIYXNodGJsLmxlbmd0aCBfdm1fZ2xvYmFscyBpblxuICBsZXQgZW52X3MgPSBtYXRjaCBmb3VuZF9lbnYgd2l0aCBTb21lIHYgLT4gXCJlbnY6XCIgXiB0eXBlX29mIHYgfCBOb25lIC0+IFwiZW52Ok1JU1NJTkdcIiBpblxuICBsZXQgdm1fcyA9IG1hdGNoIGZvdW5kX3ZtIHdpdGggU29tZSB2IC0+IFwidm06XCIgXiB0eXBlX29mIHYgfCBOb25lIC0+IFwidm06TUlTU0lOR1wiIGluXG4gIEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoUHJpbnRmLnNwcmludGYgXCIlcyAlcyAoZW52PSVkIHZtPSVkKVwiIGVudl9zIHZtX3MgdG90YWxfZW52IHRvdGFsX3ZtKSlcblxubGV0IGFwaV9jb21waWxlX21vZHVsZSBzcmNfanMgPVxuICBsZXQgc3JjID0gSnMudG9fc3RyaW5nIHNyY19qcyBpblxuICB0cnlcbiAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgIGxldCBjb21waWxlX2ZuID0gZW52X2dldCBnbG9iYWxfZW52IFwiY29tcGlsZS1tb2R1bGVcIiBpblxuICAgIGxldCBjb2RlID0gU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbY29tcGlsZV9mbjsgTGlzdCBleHByc10pIChFbnYgZ2xvYmFsX2VudikgaW5cbiAgICByZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCAodmFsdWVfdG9fanMgY29kZSlcbiAgd2l0aFxuICB8IEV2YWxfZXJyb3IgbXNnIC0+IEpzLlVuc2FmZS5pbmplY3QgKEpzLnN0cmluZyAoXCJFcnJvcjogXCIgXiBtc2cpKVxuICB8IFBhcnNlX2Vycm9yIG1zZyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiUGFyc2UgZXJyb3I6IFwiIF4gbXNnKSlcbiAgfCBOb3RfZm91bmQgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIFwiRXJyb3I6IGNvbXBpbGUtbW9kdWxlIG5vdCBsb2FkZWRcIilcblxubGV0IGFwaV9yZW5kZXJfdG9faHRtbCBleHByX2pzID1cbiAgbGV0IGV4cHIgPSBqc190b192YWx1ZSBleHByX2pzIGluXG4gIGxldCBwcmV2ID0gIV9zeF9yZW5kZXJfbW9kZSBpblxuICBfc3hfcmVuZGVyX21vZGUgOj0gdHJ1ZTtcbiAgKHRyeVxuICAgIGxldCBodG1sID0gU3hfcmVuZGVyLnN4X3JlbmRlcl90b19odG1sIGdsb2JhbF9lbnYgZXhwciBnbG9iYWxfZW52IGluXG4gICAgX3N4X3JlbmRlcl9tb2RlIDo9IHByZXY7XG4gICAgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIGh0bWwpXG4gIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICBfc3hfcmVuZGVyX21vZGUgOj0gcHJldjtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKFwiRXJyb3I6IFwiIF4gbXNnKSkpXG5cbmxldCBhcGlfc3RyaW5naWZ5IHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKGluc3BlY3QgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV90eXBlX29mIHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKHR5cGVfb2YgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV9pbnNwZWN0IHZfanMgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgKGluc3BlY3QgKGpzX3RvX3ZhbHVlIHZfanMpKSlcblxubGV0IGFwaV9lbmdpbmUgKCkgPVxuICBKcy5VbnNhZmUuaW5qZWN0IChKcy5zdHJpbmcgXCJvY2FtbC12bS13YXNtXCIpXG5cbmxldCBhcGlfcmVnaXN0ZXJfbmF0aXZlIG5hbWVfanMgY2FsbGJhY2tfanMgPVxuICBsZXQgbmFtZSA9IEpzLnRvX3N0cmluZyBuYW1lX2pzIGluXG4gIGxldCBuYXRpdmVfZm4gYXJncyA9XG4gICAgbGV0IGpzX2FyZ3MgPSBhcmdzIHw+IExpc3QubWFwIHZhbHVlX3RvX2pzIHw+IEFycmF5Lm9mX2xpc3QgaW5cbiAgICBqc190b192YWx1ZSAoSnMuVW5zYWZlLmZ1bl9jYWxsIGNhbGxiYWNrX2pzIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5IGpzX2FyZ3MpIHxdKVxuICBpblxuICBsZXQgdiA9IE5hdGl2ZUZuIChuYW1lLCBuYXRpdmVfZm4pIGluXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBuYW1lIHYpO1xuICBIYXNodGJsLnJlcGxhY2UgX3ZtX2dsb2JhbHMgbmFtZSB2O1xuICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcblxubGV0IGFwaV9jYWxsX2ZuIGZuX2pzIGFyZ3NfanMgPVxuICB0cnlcbiAgICBsZXQgZm4gPSBqc190b192YWx1ZSBmbl9qcyBpblxuICAgIGxldCBhcmdzID0gQXJyYXkudG9fbGlzdCAoQXJyYXkubWFwIGpzX3RvX3ZhbHVlIChKcy50b19hcnJheSAoSnMuVW5zYWZlLmNvZXJjZSBhcmdzX2pzKSkpIGluXG4gICAgcmV0dXJuX3ZpYV9zaWRlX2NoYW5uZWwgKHZhbHVlX3RvX2pzIChjYWxsX3N4X2ZuIGZuIGFyZ3MpKVxuICB3aXRoXG4gIHwgRXZhbF9lcnJvciBtc2cgLT5cbiAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gY2FsbEZuOiBcIiBeIG1zZykpIHxdKTtcbiAgICBKcy5VbnNhZmUuaW5qZWN0IEpzLm51bGxcbiAgfCBleG4gLT5cbiAgICBpZ25vcmUgKEpzLlVuc2FmZS5tZXRoX2NhbGxcbiAgICAgIChKcy5VbnNhZmUuZ2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcImNvbnNvbGVcIikpXG4gICAgICBcImVycm9yXCIgW3wgSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIChcIltzeF0gY2FsbEZuOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pKSB8XSk7XG4gICAgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsXG5cbmxldCBhcGlfaXNfY2FsbGFibGUgZm5fanMgPVxuICBpZiBKcy5VbnNhZmUuZXF1YWxzIGZuX2pzIEpzLm51bGwgfHwgSnMuVW5zYWZlLmVxdWFscyBmbl9qcyBKcy51bmRlZmluZWQgdGhlblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgZmFsc2UpXG4gIGVsc2VcbiAgICBsZXQgaCA9IEpzLlVuc2FmZS5nZXQgZm5fanMgKEpzLnN0cmluZyBcIl9fc3hfaGFuZGxlXCIpIGluXG4gICAgaWYgSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCB0aGVuIEpzLlVuc2FmZS5pbmplY3QgKEpzLmJvb2wgZmFsc2UpXG4gICAgZWxzZSBKcy5VbnNhZmUuaW5qZWN0IChKcy5ib29sIChpc19jYWxsYWJsZSAoZ2V0X2hhbmRsZSAoSnMuZmxvYXRfb2ZfbnVtYmVyIChKcy5VbnNhZmUuY29lcmNlIGgpIHw+IGludF9vZl9mbG9hdCkpKSlcblxubGV0IGFwaV9mbl9hcml0eSBmbl9qcyA9XG4gIGxldCBoID0gSnMuVW5zYWZlLmdldCBmbl9qcyAoSnMuc3RyaW5nIFwiX19zeF9oYW5kbGVcIikgaW5cbiAgaWYgSnMuVW5zYWZlLmVxdWFscyBoIEpzLnVuZGVmaW5lZCB0aGVuIEpzLlVuc2FmZS5pbmplY3QgKEpzLm51bWJlcl9vZl9mbG9hdCAoLTEuMCkpXG4gIGVsc2VcbiAgICBsZXQgdiA9IGdldF9oYW5kbGUgKEpzLmZsb2F0X29mX251bWJlciAoSnMuVW5zYWZlLmNvZXJjZSBoKSB8PiBpbnRfb2ZfZmxvYXQpIGluXG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBMYW1iZGEgbCAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKGZsb2F0X29mX2ludCAoTGlzdC5sZW5ndGggbC5sX3BhcmFtcykpKVxuICAgIHwgXyAtPiBKcy5VbnNhZmUuaW5qZWN0IChKcy5udW1iZXJfb2ZfZmxvYXQgKC0xLjApKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFBsYXRmb3JtIGJpbmRpbmdzIChyZWdpc3RlcmVkIGluIGdsb2JhbCBlbnYpICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgKCkgPVxuICBsZXQgYmluZCBuYW1lIGZuID0gaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IG5hbWUgKE5hdGl2ZUZuIChuYW1lLCBmbikpKSBpblxuXG4gICgqIGNsaWVudD8gcmV0dXJucyB0cnVlIGluIGJyb3dzZXIg4oCUIHNldCB0aGUgcmVmIHNvIHRoZSBwcmltaXRpdmUgcmV0dXJucyB0cnVlICopXG4gIFN4X3ByaW1pdGl2ZXMuX2lzX2NsaWVudCA6PSB0cnVlO1xuXG4gICgqIC0tLSBFdmFsdWF0aW9uIC0tLSAqKVxuICBiaW5kIFwiY2VrLWV2YWxcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtTdHJpbmcgc10gLT4gbGV0IGUgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHMgaW4gKG1hdGNoIGUgd2l0aCBoIDo6IF8gLT4gU3hfcmVmLmV2YWxfZXhwciBoIChFbnYgZ2xvYmFsX2VudikgfCBbXSAtPiBOaWwpXG4gICAgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudilcbiAgICB8IFtleHByOyBlbnZfdmFsXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52X3ZhbFxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1ldmFsOiBleHBlY3RlZCAxLTIgYXJnc1wiKSk7XG5cbiAgYmluZCBcImV2YWwtZXhwci1jZWtcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtleHByOyBlXSAtPiBTeF9yZWYuZXZhbF9leHByIGV4cHIgZVxuICAgIHwgW2V4cHJdIC0+IFN4X3JlZi5ldmFsX2V4cHIgZXhwciAoRW52IGdsb2JhbF9lbnYpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZXZhbC1leHByLWNlazogZXhwZWN0ZWQgMS0yIGFyZ3NcIikpO1xuXG4gIGJpbmQgXCJjZWstY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgbGV0IGFyZ19saXN0ID0gbWF0Y2ggYSB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgdiAtPiBbdl0gaW5cbiAgICAgIFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgZiBhcmdfbGlzdClcbiAgICB8IFtmOyBfXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjZWstY2FsbDogbm90IGNhbGxhYmxlOiBcIiBeIHR5cGVfb2YgZikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWNhbGw6IGV4cGVjdGVkIChmbiBhcmdzKVwiKSk7XG5cbiAgYmluZCBcInN4LXBhcnNlXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNyY10gLT4gTGlzdCAoU3hfcGFyc2VyLnBhcnNlX2FsbCBzcmMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtcGFyc2U6IGV4cGVjdGVkIHN0cmluZ1wiKSk7XG5cbiAgKCogcGFyc2U6IHNhbWUgYXMgc2VydmVyIOKAlCB1bndyYXBzIHNpbmdsZSByZXN1bHRzLCByZXR1cm5zIGxpc3QgZm9yIG11bHRpcGxlLlxuICAgICBVc2VkIGJ5IGJvb3Quc3ggKHBhZ2Ugc2NyaXB0cywgc3VzcGVuc2UpIGFuZCBlbmdpbmUuc3ggKG1hcnNoIHVwZGF0ZSkuICopXG4gIGJpbmQgXCJwYXJzZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW1N0cmluZyBzcmNdIHwgW1N4RXhwciBzcmNdIC0+XG4gICAgICBsZXQgZXhwcnMgPSBTeF9wYXJzZXIucGFyc2VfYWxsIHNyYyBpblxuICAgICAgKG1hdGNoIGV4cHJzIHdpdGggW2VdIC0+IGUgfCBfIC0+IExpc3QgZXhwcnMpXG4gICAgfCBbdl0gLT4gdlxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcInBhcnNlOiBleHBlY3RlZCBzdHJpbmdcIikpO1xuXG4gIGJpbmQgXCJzeC1zZXJpYWxpemVcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFt2XSAtPiBTdHJpbmcgKGluc3BlY3QgdilcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJzeC1zZXJpYWxpemU6IGV4cGVjdGVkIDEgYXJnXCIpKTtcblxuICAoKiAtLS0gQXNzZXJ0aW9ucyAmIGVxdWFsaXR5IC0tLSAqKVxuICBsZXQgcmVjIGRlZXBfZXF1YWwgYSBiID1cbiAgICBtYXRjaCBhLCBiIHdpdGhcbiAgICB8IE5pbCwgTmlsIC0+IHRydWUgfCBCb29sIGEsIEJvb2wgYiAtPiBhID0gYlxuICAgIHwgTnVtYmVyIGEsIE51bWJlciBiIC0+IGEgPSBiIHwgU3RyaW5nIGEsIFN0cmluZyBiIC0+IGEgPSBiXG4gICAgfCBTeW1ib2wgYSwgU3ltYm9sIGIgLT4gYSA9IGIgfCBLZXl3b3JkIGEsIEtleXdvcmQgYiAtPiBhID0gYlxuICAgIHwgKExpc3QgYSB8IExpc3RSZWYgeyBjb250ZW50cyA9IGEgfSksIChMaXN0IGIgfCBMaXN0UmVmIHsgY29udGVudHMgPSBiIH0pIC0+XG4gICAgICBMaXN0Lmxlbmd0aCBhID0gTGlzdC5sZW5ndGggYiAmJiBMaXN0LmZvcl9hbGwyIGRlZXBfZXF1YWwgYSBiXG4gICAgfCBEaWN0IGEsIERpY3QgYiAtPlxuICAgICAgbGV0IGthID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgYSBbXSBpblxuICAgICAgbGV0IGtiID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGFjYyAtPiBrIDo6IGFjYykgYiBbXSBpblxuICAgICAgTGlzdC5sZW5ndGgga2EgPSBMaXN0Lmxlbmd0aCBrYiAmJlxuICAgICAgTGlzdC5mb3JfYWxsIChmdW4gayAtPiBIYXNodGJsLm1lbSBiIGsgJiZcbiAgICAgICAgZGVlcF9lcXVhbCAoSGFzaHRibC5maW5kIGEgaykgKEhhc2h0YmwuZmluZCBiIGspKSBrYVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBiaW5kIFwiZXF1YWw/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbYTsgYl0gLT4gQm9vbCAoZGVlcF9lcXVhbCBhIGIpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVxdWFsPzogMiBhcmdzXCIpKTtcbiAgYmluZCBcImFzc2VydFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2NvbmRdIC0+IGlmIG5vdCAoc3hfdHJ1dGh5IGNvbmQpIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgXCJBc3NlcnRpb24gZmFpbGVkXCIpOyBCb29sIHRydWVcbiAgICB8IFtjb25kOyBtc2ddIC0+IGlmIG5vdCAoc3hfdHJ1dGh5IGNvbmQpIHRoZW4gcmFpc2UgKEV2YWxfZXJyb3IgKFwiQXNzZXJ0aW9uOiBcIiBeIHZhbHVlX3RvX3N0cmluZyBtc2cpKTsgQm9vbCB0cnVlXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXNzZXJ0OiAxLTIgYXJnc1wiKSk7XG5cbiAgYmluZCBcInRyeS1jYWxsXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5IGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbdGh1bmtdKSAoRW52IGdsb2JhbF9lbnYpKTtcbiAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSAyIGluIEhhc2h0YmwucmVwbGFjZSBkIFwib2tcIiAoQm9vbCB0cnVlKTsgRGljdCBkXG4gICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgIGxldCBkID0gSGFzaHRibC5jcmVhdGUgMiBpbiBIYXNodGJsLnJlcGxhY2UgZCBcIm9rXCIgKEJvb2wgZmFsc2UpOyBIYXNodGJsLnJlcGxhY2UgZCBcImVycm9yXCIgKFN0cmluZyBtc2cpOyBEaWN0IGQpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwidHJ5LWNhbGw6IDEgYXJnXCIpKTtcblxuICAoKiAtLS0gQnl0ZWNvZGUgbG9hZGluZyBmcm9tIHMtZXhwcmVzc2lvbiBmb3JtYXQgLS0tXG4gICAgIChzeGJjIHZlcnNpb24gaGFzaCAoY29kZSA6YXJpdHkgTiA6dXB2YWx1ZS1jb3VudCBOIDpieXRlY29kZSAoLi4uKSA6Y29uc3RhbnRzICguLi4pKSlcbiAgICAgUmVjdXJzaXZlbHkgY29udmVydHMgdGhlIFNYIHRyZWUgaW50byB0aGUgZGljdCBmb3JtYXQgdGhhdCBsb2FkTW9kdWxlIGV4cGVjdHMuICopXG4gIGJpbmQgXCJsb2FkLXN4YmNcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IFtMaXN0IChfIDo6IF8gOjogXyA6OiBjb2RlX2Zvcm0gOjogXyldIHwgW0xpc3QgKF8gOjogXyA6OiBjb2RlX2Zvcm0gOjogXyldIC0+XG4gICAgICBsZXQgcmVjIGNvbnZlcnRfY29kZSBmb3JtID1cbiAgICAgICAgbWF0Y2ggZm9ybSB3aXRoXG4gICAgICAgIHwgTGlzdCAoU3ltYm9sIFwiY29kZVwiIDo6IHJlc3QpIC0+XG4gICAgICAgICAgbGV0IGQgPSBIYXNodGJsLmNyZWF0ZSA4IGluXG4gICAgICAgICAgbGV0IHJlYyBwYXJzZV9rdiA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IEtleXdvcmQgXCJhcml0eVwiIDo6IE51bWJlciBuIDo6IHJlc3QgLT4gSGFzaHRibC5yZXBsYWNlIGQgXCJhcml0eVwiIChOdW1iZXIgbik7IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgS2V5d29yZCBcInVwdmFsdWUtY291bnRcIiA6OiBOdW1iZXIgbiA6OiByZXN0IC0+IEhhc2h0YmwucmVwbGFjZSBkIFwidXB2YWx1ZS1jb3VudFwiIChOdW1iZXIgbik7IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgS2V5d29yZCBcImJ5dGVjb2RlXCIgOjogTGlzdCBudW1zIDo6IHJlc3QgLT5cbiAgICAgICAgICAgICAgSGFzaHRibC5yZXBsYWNlIGQgXCJieXRlY29kZVwiIChMaXN0IG51bXMpOyBwYXJzZV9rdiByZXN0XG4gICAgICAgICAgICB8IEtleXdvcmQgXCJjb25zdGFudHNcIiA6OiBMaXN0IGNvbnN0cyA6OiByZXN0IC0+XG4gICAgICAgICAgICAgIEhhc2h0YmwucmVwbGFjZSBkIFwiY29uc3RhbnRzXCIgKExpc3QgKExpc3QubWFwIGNvbnZlcnRfY29uc3QgY29uc3RzKSk7IHBhcnNlX2t2IHJlc3RcbiAgICAgICAgICAgIHwgXyA6OiByZXN0IC0+IHBhcnNlX2t2IHJlc3QgICgqIHNraXAgdW5rbm93biBrZXl3b3JkcyAqKVxuICAgICAgICAgICAgfCBbXSAtPiAoKVxuICAgICAgICAgIGluXG4gICAgICAgICAgcGFyc2Vfa3YgcmVzdDtcbiAgICAgICAgICBEaWN0IGRcbiAgICAgICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIChcImxvYWQtc3hiYzogZXhwZWN0ZWQgKGNvZGUgLi4uKSwgZ290IFwiIF4gdHlwZV9vZiBmb3JtKSlcbiAgICAgIGFuZCBjb252ZXJ0X2NvbnN0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBMaXN0IChTeW1ib2wgXCJjb2RlXCIgOjogXykgYXMgZm9ybSAtPiBjb252ZXJ0X2NvZGUgZm9ybVxuICAgICAgICB8IExpc3QgKFN5bWJvbCBcImxpc3RcIiA6OiBpdGVtcykgLT4gTGlzdCAoTGlzdC5tYXAgY29udmVydF9jb25zdCBpdGVtcylcbiAgICAgICAgfCB2IC0+IHYgICgqIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zLCBuaWwsIHN5bWJvbHMsIGtleXdvcmRzIHBhc3MgdGhyb3VnaCAqKVxuICAgICAgaW5cbiAgICAgIGxldCBtb2R1bGVfdmFsID0gY29udmVydF9jb2RlIGNvZGVfZm9ybSBpblxuICAgICAgbGV0IGNvZGUgPSBTeF92bS5jb2RlX2Zyb21fdmFsdWUgbW9kdWxlX3ZhbCBpblxuICAgICAgbGV0IF9yZXN1bHQgPSBTeF92bS5leGVjdXRlX21vZHVsZSBjb2RlIF92bV9nbG9iYWxzIGluXG4gICAgICBzeW5jX3ZtX3RvX2VudiAoKTtcbiAgICAgIE51bWJlciAoZmxvYXRfb2ZfaW50IChIYXNodGJsLmxlbmd0aCBfdm1fZ2xvYmFscykpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibG9hZC1zeGJjOiBleHBlY3RlZCAoc3hiYyB2ZXJzaW9uIGhhc2ggKGNvZGUgLi4uKSlcIikpO1xuXG4gICgqIC0tLSBMaXN0IG11dGF0aW9uIC0tLSAqKVxuICBiaW5kIFwiYXBwZW5kIVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW0xpc3RSZWYgcjsgdl0gLT4gciA6PSAhciBAIFt2XTsgTGlzdFJlZiByXG4gICAgfCBbTGlzdCBpdGVtczsgdl0gLT4gTGlzdCAoaXRlbXMgQCBbdl0pXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwZW5kITogZXhwZWN0ZWQgbGlzdCBhbmQgdmFsdWVcIikpO1xuXG4gICgqIHJlbW92ZSEg4oCUIG11dGF0ZSBMaXN0UmVmIGluLXBsYWNlLCByZW1vdmluZyBieSBpZGVudGl0eSAoPT0pICopXG4gIGJpbmQgXCJyZW1vdmUhXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbTGlzdFJlZiByOyB0YXJnZXRdIC0+XG4gICAgICByIDo9IExpc3QuZmlsdGVyIChmdW4geCAtPiB4ICE9IHRhcmdldCkgIXI7IExpc3RSZWYgclxuICAgIHwgW0xpc3QgaXRlbXM7IHRhcmdldF0gLT5cbiAgICAgIExpc3QgKExpc3QuZmlsdGVyIChmdW4geCAtPiB4ICE9IHRhcmdldCkgaXRlbXMpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiYXBwZW5kITogbGlzdCBhbmQgdmFsdWVcIikpO1xuXG4gICgqIC0tLSBFbnZpcm9ubWVudCBvcHMgLS0tICopXG4gICgqIFVzZSB1bndyYXBfZW52IGZvciBuaWwvZGljdCB0b2xlcmFuY2UsIG1hdGNoaW5nIHRoZSBzZXJ2ZXIga2VybmVsICopXG4gIGxldCB1dyA9IFN4X3J1bnRpbWUudW53cmFwX2VudiBpblxuICBiaW5kIFwibWFrZS1lbnZcIiAoZnVuIF8gLT4gRW52IChtYWtlX2VudiAoKSkpO1xuICBiaW5kIFwiZ2xvYmFsLWVudlwiIChmdW4gXyAtPiBFbnYgZ2xvYmFsX2Vudik7XG4gIGJpbmQgXCJlbnYtaGFzP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2U7IFN0cmluZyBrXSB8IFtlOyBLZXl3b3JkIGtdIC0+IEJvb2wgKGVudl9oYXMgKHV3IGUpIGspIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1oYXM/XCIpKTtcbiAgYmluZCBcImVudi1nZXRcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcga10gfCBbZTsgS2V5d29yZCBrXSAtPiBlbnZfZ2V0ICh1dyBlKSBrIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1nZXRcIikpO1xuICBiaW5kIFwiZW52LWJpbmQhXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbZTsgU3RyaW5nIGs7IHZdIHwgW2U7IEtleXdvcmQgazsgdl0gLT4gZW52X2JpbmQgKHV3IGUpIGsgdiB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJlbnYtYmluZCFcIikpO1xuICBiaW5kIFwiZW52LXNldCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtlOyBTdHJpbmcgazsgdl0gfCBbZTsgS2V5d29yZCBrOyB2XSAtPiBlbnZfc2V0ICh1dyBlKSBrIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZW52LXNldCFcIikpO1xuICBiaW5kIFwiZW52LWV4dGVuZFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2VdIC0+IEVudiAoZW52X2V4dGVuZCAodXcgZSkpIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1leHRlbmRcIikpO1xuICBiaW5kIFwiZW52LW1lcmdlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbYTsgYl0gLT4gU3hfcnVudGltZS5lbnZfbWVyZ2UgYSBiIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImVudi1tZXJnZVwiKSk7XG5cbiAgKCogLS0tIFR5cGUgY29uc3RydWN0b3JzIC0tLSAqKVxuICBiaW5kIFwibWFrZS1zeW1ib2xcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTdHJpbmcgc10gLT4gU3ltYm9sIHMgfCBbdl0gLT4gU3ltYm9sICh2YWx1ZV90b19zdHJpbmcgdikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwibWFrZS1zeW1ib2xcIikpO1xuICBiaW5kIFwibWFrZS1rZXl3b3JkXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IEtleXdvcmQgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJtYWtlLWtleXdvcmRcIikpO1xuICBiaW5kIFwia2V5d29yZC1uYW1lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbS2V5d29yZCBrXSAtPiBTdHJpbmcgayB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJrZXl3b3JkLW5hbWVcIikpO1xuICBiaW5kIFwic3ltYm9sLW5hbWVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtTeW1ib2wgc10gLT4gU3RyaW5nIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3ltYm9sLW5hbWVcIikpO1xuXG4gICgqIC0tLSBDb21wb25lbnQvSXNsYW5kIGFjY2Vzc29ycyAobXVzdCBoYW5kbGUgYm90aCB0eXBlcykgLS0tICopXG4gIGJpbmQgXCJjb21wb25lbnQtbmFtZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IFN0cmluZyBjLmNfbmFtZSB8IFtJc2xhbmQgaV0gLT4gU3RyaW5nIGkuaV9uYW1lIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIGJpbmQgXCJjb21wb25lbnQtY2xvc3VyZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbQ29tcG9uZW50IGNdIC0+IEVudiBjLmNfY2xvc3VyZSB8IFtJc2xhbmQgaV0gLT4gRW52IGkuaV9jbG9zdXJlIHwgXyAtPiBEaWN0IChIYXNodGJsLmNyZWF0ZSAwKSk7XG4gIGJpbmQgXCJjb21wb25lbnQtcGFyYW1zXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbQ29tcG9uZW50IGNdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgYy5jX3BhcmFtcylcbiAgICB8IFtJc2xhbmQgaV0gLT4gTGlzdCAoTGlzdC5tYXAgKGZ1biBzIC0+IFN0cmluZyBzKSBpLmlfcGFyYW1zKVxuICAgIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiY29tcG9uZW50LWJvZHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBjXSAtPiBjLmNfYm9keSB8IFtJc2xhbmQgaV0gLT4gaS5pX2JvZHkgfCBfIC0+IE5pbCk7XG4gIGxldCBoYXNfY2hpbGRyZW5faW1wbCA9IE5hdGl2ZUZuIChcImNvbXBvbmVudC1oYXMtY2hpbGRyZW4/XCIsIGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gQm9vbCBjLmNfaGFzX2NoaWxkcmVuIHwgW0lzbGFuZCBpXSAtPiBCb29sIGkuaV9oYXNfY2hpbGRyZW4gfCBfIC0+IEJvb2wgZmFsc2UpIGluXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcImNvbXBvbmVudC1oYXMtY2hpbGRyZW5cIiBoYXNfY2hpbGRyZW5faW1wbCk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcImNvbXBvbmVudC1oYXMtY2hpbGRyZW4/XCIgaGFzX2NoaWxkcmVuX2ltcGwpO1xuICBiaW5kIFwiY29tcG9uZW50LWFmZmluaXR5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoIFtDb21wb25lbnQgY10gLT4gU3RyaW5nIGMuY19hZmZpbml0eSB8IFtJc2xhbmQgX10gLT4gU3RyaW5nIFwiY2xpZW50XCIgfCBfIC0+IFN0cmluZyBcImF1dG9cIik7XG4gIGJpbmQgXCJjb21wb25lbnQtcGFyYW0tdHlwZXNcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImNvbXBvbmVudC1zZXQtcGFyYW0tdHlwZXMhXCIgKGZ1biBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIENFSyBzdGVwcGluZyAtLS0gKilcbiAgYmluZCBcIm1ha2UtY2VrLXN0YXRlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbYzsgZTsga10gLT4gU3hfcmVmLm1ha2VfY2VrX3N0YXRlIGMgZSBrIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2UtY2VrLXN0YXRlXCIpKTtcbiAgYmluZCBcImNlay1zdGVwXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla19zdGVwIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXN0ZXBcIikpO1xuICBiaW5kIFwiY2VrLXBoYXNlXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla19waGFzZSBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNlay1waGFzZVwiKSk7XG4gIGJpbmQgXCJjZWstdmFsdWVcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtzXSAtPiBTeF9yZWYuY2VrX3ZhbHVlIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLXZhbHVlXCIpKTtcbiAgYmluZCBcImNlay10ZXJtaW5hbD9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtzXSAtPiBTeF9yZWYuY2VrX3Rlcm1pbmFsX3AgcyB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJjZWstdGVybWluYWw/XCIpKTtcbiAgYmluZCBcImNlay1rb250XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbc10gLT4gU3hfcmVmLmNla19rb250IHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWtvbnRcIikpO1xuICBiaW5kIFwiZnJhbWUtdHlwZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2ZdIC0+IFN4X3JlZi5mcmFtZV90eXBlIGYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiZnJhbWUtdHlwZVwiKSk7XG5cbiAgKCogLS0tIFN0cmljdCBtb2RlIC0tLSAqKVxuICBpZ25vcmUgKGVudl9iaW5kIGdsb2JhbF9lbnYgXCIqc3RyaWN0KlwiIChCb29sIGZhbHNlKSk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIipwcmltLXBhcmFtLXR5cGVzKlwiIE5pbCk7XG4gIGJpbmQgXCJzZXQtc3RyaWN0IVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IFN4X3JlZi5fc3RyaWN0X3JlZiA6PSB2OyBpZ25vcmUgKGVudl9zZXQgZ2xvYmFsX2VudiBcIipzdHJpY3QqXCIgdik7IE5pbCB8IF8gLT4gTmlsKTtcbiAgYmluZCBcInNldC1wcmltLXBhcmFtLXR5cGVzIVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3ZdIC0+IFN4X3JlZi5fcHJpbV9wYXJhbV90eXBlc19yZWYgOj0gdjsgaWdub3JlIChlbnZfc2V0IGdsb2JhbF9lbnYgXCIqcHJpbS1wYXJhbS10eXBlcypcIiB2KTsgTmlsIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidmFsdWUtbWF0Y2hlcy10eXBlP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW3Y7IHRdIC0+IFN4X3JlZi52YWx1ZV9tYXRjaGVzX3R5cGVfcCB2IHQgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEFwcGx5IC0tLSAqKVxuICBiaW5kIFwiYXBwbHlcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IGYgOjogcmVzdCAtPlxuICAgICAgbGV0IGFsbF9hcmdzID0gbWF0Y2ggTGlzdC5yZXYgcmVzdCB3aXRoIExpc3QgbGFzdCA6OiBwcmVmaXggLT4gTGlzdC5yZXYgcHJlZml4IEAgbGFzdCB8IF8gLT4gcmVzdCBpblxuICAgICAgU3hfcnVudGltZS5zeF9jYWxsIGYgYWxsX2FyZ3NcbiAgICB8IF8gLT4gcmFpc2UgKEV2YWxfZXJyb3IgXCJhcHBseVwiKSk7XG5cbiAgKCogLS0tIFNjb3BlIHN0YWNrIC0tLSAqKVxuICAoKiBTY29wZSBwcmltaXRpdmVzIChzY29wZS1wdXNoISwgc2NvcGUtcG9wISwgY29udGV4dCwgY29sbGVjdCEsIGNvbGxlY3RlZCxcbiAgICAgZW1pdCEsIGVtaXR0ZWQsIHNjb3BlLWVtaXQhLCBzY29wZS1lbWl0dGVkLCBldGMuKSBhcmUgcmVnaXN0ZXJlZCBieVxuICAgICBTeF9zY29wZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gaW4gdGhlIHByaW1pdGl2ZXMgdGFibGUuXG4gICAgIFRoZSBDRUsgZXZhbHVhdG9yIGZhbGxzIHRocm91Z2ggdG8gdGhlIHByaW1pdGl2ZXMgdGFibGUgd2hlbiBhIHN5bWJvbFxuICAgICBpc24ndCBpbiB0aGUgZW52LCBzbyB0aGVzZSB3b3JrIGF1dG9tYXRpY2FsbHkuXG4gICAgIE9ubHkgcHJvdmlkZS1wdXNoIS9wcm92aWRlLXBvcCEgbmVlZCBleHBsaWNpdCBlbnYgYmluZGluZ3MgYXMgYWxpYXNlcy4gKilcbiAgYmluZCBcInByb3ZpZGUtcHVzaCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuOyB2XSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcHVzaCBuIHYgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wdXNoIVwiKSk7XG4gIGJpbmQgXCJwcm92aWRlLXBvcCFcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtuXSAtPiBTeF9ydW50aW1lLnByb3ZpZGVfcG9wIG4gfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwicHJvdmlkZS1wb3AhXCIpKTtcblxuICAoKiBSdW50aW1lIGhlbHBlcnMgZm9yIGJ5dGVjb2RlZCBkZWZjb21wL2RlZmlzbGFuZC9kZWZtYWNybyBmb3Jtcy5cbiAgICAgVGhlIGNvbXBpbGVyIGVtaXRzIEdMT0JBTF9HRVQgXCJldmFsLWRlZmNvbXBcIiArIENBTEwg4oCUIHRoZXNlIG11c3RcbiAgICAgZXhpc3QgYXMgY2FsbGFibGUgdmFsdWVzIGZvciBieXRlY29kZWQgLnN4IGZpbGVzIHRoYXQgY29udGFpblxuICAgICBjb21wb25lbnQgZGVmaW5pdGlvbnMgKGUuZy4gY3NzeC5zeCkuICopXG4gIGJpbmQgXCJldmFsLWRlZmNvbXBcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0xpc3QgKF8gOjogcmVzdCldIC0+IFN4X3JlZi5zZl9kZWZjb21wIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJldmFsLWRlZmlzbGFuZFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZmlzbGFuZCAoTGlzdCByZXN0KSAoRW52IGdsb2JhbF9lbnYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwiZXZhbC1kZWZtYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbTGlzdCAoXyA6OiByZXN0KV0gLT4gU3hfcmVmLnNmX2RlZm1hY3JvIChMaXN0IHJlc3QpIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEZyYWdtZW50IC8gcmF3IEhUTUwgLS0tICopXG4gIGJpbmQgXCI8PlwiIChmdW4gYXJncyAtPlxuICAgIFJhd0hUTUwgKFN0cmluZy5jb25jYXQgXCJcIiAoTGlzdC5tYXAgKGZ1biBhIC0+XG4gICAgICBtYXRjaCBhIHdpdGggU3RyaW5nIHMgfCBSYXdIVE1MIHMgLT4gcyB8IE5pbCAtPiBcIlwiXG4gICAgICB8IExpc3QgXyAtPiBTeF9yZW5kZXIuc3hfcmVuZGVyX3RvX2h0bWwgZ2xvYmFsX2VudiBhIGdsb2JhbF9lbnZcbiAgICAgIHwgXyAtPiB2YWx1ZV90b19zdHJpbmcgYSkgYXJncykpKTtcbiAgYmluZCBcInJhdyFcIiAoZnVuIGFyZ3MgLT5cbiAgICBSYXdIVE1MIChTdHJpbmcuY29uY2F0IFwiXCIgKExpc3QubWFwIChmdW4gYSAtPlxuICAgICAgbWF0Y2ggYSB3aXRoIFN0cmluZyBzIHwgUmF3SFRNTCBzIC0+IHMgfCBfIC0+IHZhbHVlX3RvX3N0cmluZyBhKSBhcmdzKSkpO1xuXG4gIGJpbmQgXCJkZWZpbmUtcGFnZS1oZWxwZXJcIiAoZnVuIF8gLT4gTmlsKTtcblxuICAoKiAtLS0gUmVuZGVyIC0tLSAqKVxuICBTeF9yZW5kZXIuc2V0dXBfcmVuZGVyX2VudiBnbG9iYWxfZW52O1xuICBiaW5kIFwic2V0LXJlbmRlci1hY3RpdmUhXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZW5kZXItYWN0aXZlP1wiIChmdW4gXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaXMtaHRtbC10YWc/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IEJvb2wgKFN4X3JlbmRlci5pc19odG1sX3RhZyBzKSB8IF8gLT4gQm9vbCBmYWxzZSk7XG5cbiAgKCogLS0tIFJlbmRlciBjb25zdGFudHMgbmVlZGVkIGJ5IHdlYiBhZGFwdGVycyAtLS0gKilcbiAgbGV0IGh0bWxfdGFncyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmh0bWxfdGFncykgaW5cbiAgbGV0IHZvaWRfZWxlbWVudHMgPSBMaXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gU3RyaW5nIHMpIFN4X3JlbmRlci52b2lkX2VsZW1lbnRzKSBpblxuICBsZXQgYm9vbGVhbl9hdHRycyA9IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgU3hfcmVuZGVyLmJvb2xlYW5fYXR0cnMpIGluXG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIkhUTUxfVEFHU1wiIGh0bWxfdGFncyk7XG4gIGlnbm9yZSAoZW52X2JpbmQgZ2xvYmFsX2VudiBcIlZPSURfRUxFTUVOVFNcIiB2b2lkX2VsZW1lbnRzKTtcbiAgaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiQk9PTEVBTl9BVFRSU1wiIGJvb2xlYW5fYXR0cnMpO1xuXG4gICgqIC0tLSBIVE1MIHRhZyBzcGVjaWFsIGZvcm1zIChkaXYsIHNwYW4sIGgxLCAuLi4pIC0tLSAqKVxuICAoKiBSZWdpc3RlcmVkIGFzIGN1c3RvbSBzcGVjaWFsIGZvcm1zIHNvIGtleXdvcmRzIGFyZSBwcmVzZXJ2ZWQuXG4gICAgIEhhbmRsZXIgcmVjZWl2ZXMgKHJhdy1hcmdzIGVudiksIGV2YWx1YXRlcyBub24ta2V5d29yZCBhcmdzXG4gICAgIHdoaWxlIGtlZXBpbmcga2V5d29yZCBuYW1lcyBpbnRhY3QuICopXG4gIGxldCBldmFsX3RhZ19hcmdzIHJhd19hcmdzIGVudiA9XG4gICAgbGV0IGFyZ3MgPSBTeF9ydW50aW1lLnN4X3RvX2xpc3QgcmF3X2FyZ3MgaW5cbiAgICBsZXQgcmVjIHByb2Nlc3MgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiBbXVxuICAgICAgfCAoS2V5d29yZCBfIGFzIGt3KSA6OiB2YWx1ZSA6OiByZXN0IC0+XG4gICAgICAgICgqIGtleXdvcmQgKyBpdHMgdmFsdWU6IGtlZXAga2V5d29yZCwgZXZhbHVhdGUgdmFsdWUgKilcbiAgICAgICAga3cgOjogU3hfcmVmLmV2YWxfZXhwciB2YWx1ZSBlbnYgOjogcHJvY2VzcyByZXN0XG4gICAgICB8IChLZXl3b3JkIF8gYXMga3cpIDo6IFtdIC0+XG4gICAgICAgICgqIHRyYWlsaW5nIGtleXdvcmQgd2l0aCBubyB2YWx1ZSDigJQgYm9vbGVhbiBhdHRyICopXG4gICAgICAgIFtrd11cbiAgICAgIHwgZXhwciA6OiByZXN0IC0+XG4gICAgICAgICgqIG5vbi1rZXl3b3JkOiBldmFsdWF0ZSAqKVxuICAgICAgICBTeF9yZWYuZXZhbF9leHByIGV4cHIgZW52IDo6IHByb2Nlc3MgcmVzdFxuICAgIGluXG4gICAgcHJvY2VzcyBhcmdzXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIHRhZyAtPlxuICAgIGlnbm9yZSAoU3hfcmVmLnJlZ2lzdGVyX3NwZWNpYWxfZm9ybSAoU3RyaW5nIHRhZylcbiAgICAgIChOYXRpdmVGbiAoXCJzZjpcIiBeIHRhZywgZnVuIGhhbmRsZXJfYXJncyAtPlxuICAgICAgICBtYXRjaCBoYW5kbGVyX2FyZ3Mgd2l0aFxuICAgICAgICB8IFtyYXdfYXJnczsgZW52XSAtPiBMaXN0IChTeW1ib2wgdGFnIDo6IGV2YWxfdGFnX2FyZ3MgcmF3X2FyZ3MgZW52KVxuICAgICAgICB8IF8gLT4gTmlsKSkpXG4gICkgU3hfcmVuZGVyLmh0bWxfdGFncztcblxuICAoKiAtLS0gRXJyb3IgaGFuZGxpbmcgLS0tICopXG4gIGJpbmQgXCJjZWstdHJ5XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbdGh1bms7IGhhbmRsZXJdIC0+XG4gICAgICAodHJ5IFN4X3JlZi5jZWtfY2FsbCB0aHVuayBOaWxcbiAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+IFN4X3JlZi5jZWtfY2FsbCBoYW5kbGVyIChMaXN0IFtTdHJpbmcgbXNnXSkpXG4gICAgfCBbdGh1bmtdIC0+XG4gICAgICAodHJ5IGxldCByID0gU3hfcmVmLmNla19jYWxsIHRodW5rIE5pbCBpblxuICAgICAgICBMaXN0IFtTeW1ib2wgXCJva1wiOyByXVxuICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT4gTGlzdCBbU3ltYm9sIFwiZXJyb3JcIjsgU3RyaW5nIG1zZ10pXG4gICAgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIEV2YWx1YXRvciBicmlkZ2UgZnVuY3Rpb25zIG5lZWRlZCBieSBzcGVjIC5zeCBmaWxlcyAtLS0gKilcbiAgYmluZCBcImV2YWwtZXhwclwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJ0cmFtcG9saW5lXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gIVN4X3ByaW1pdGl2ZXMuX3N4X3RyYW1wb2xpbmVfZm4gdiB8IF8gLT4gTmlsKTtcbiAgYmluZCBcImV4cGFuZC1tYWNyb1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbbWFjOyByYXc7IEVudiBlXSAtPiBTeF9yZWYuZXhwYW5kX21hY3JvIG1hYyByYXcgKEVudiBlKSB8IFttYWM7IHJhd10gLT4gU3hfcmVmLmV4cGFuZF9tYWNybyBtYWMgcmF3IChFbnYgZ2xvYmFsX2VudikgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJjYWxsLWxhbWJkYVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGE7IF9dIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgKCogVXNlIGNla19jYWxsIGluc3RlYWQgb2Ygc3hfY2FsbCB0byBhdm9pZCBldmFsX2V4cHIgY29weWluZ1xuICAgICAgICAgRGljdCB2YWx1ZXMgKHNpZ25hbHMpLiBzeF9jYWxsIHJldHVybnMgYSBUaHVuayByZXNvbHZlZCB2aWFcbiAgICAgICAgIGV2YWxfZXhwciB3aGljaCBkZWVwLWNvcGllcyBkaWN0cywgYnJlYWtpbmcgc2lnbmFsIG11dGF0aW9uLiAqKVxuICAgICAgU3hfcmVmLmNla19jYWxsIGYgYVxuICAgIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcImNhbGwtbGFtYmRhOiBleHBlY3RlZCAoZm4gYXJncyBlbnY/KVwiKSk7XG4gIGJpbmQgXCJjZWstY2FsbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgW2Y7IGFdIHdoZW4gaXNfY2FsbGFibGUgZiAtPlxuICAgICAgbGV0IGFyZ19saXN0ID0gbWF0Y2ggYSB3aXRoIExpc3QgbCAtPiBsIHwgTmlsIC0+IFtdIHwgdiAtPiBbdl0gaW5cbiAgICAgIFN4X3JlZi50cmFtcG9saW5lIChTeF9ydW50aW1lLnN4X2NhbGwgZiBhcmdfbGlzdClcbiAgICB8IFtmOyBfXSAtPiByYWlzZSAoRXZhbF9lcnJvciAoXCJjZWstY2FsbDogbm90IGNhbGxhYmxlOiBcIiBeIHR5cGVfb2YgZikpXG4gICAgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiY2VrLWNhbGw6IGV4cGVjdGVkIChmbiBhcmdzKVwiKSk7XG4gIGJpbmQgXCJjZWstZXZhbFwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbZXhwcl0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIChFbnYgZ2xvYmFsX2VudikgfCBbZXhwcjsgZV0gLT4gU3hfcmVmLmV2YWxfZXhwciBleHByIGUgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJxcS1leHBhbmQtcnVudGltZVwiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbdGVtcGxhdGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBnbG9iYWxfZW52KSB8IFt0ZW1wbGF0ZTsgRW52IGVdIC0+IFN4X3JlZi5xcV9leHBhbmQgdGVtcGxhdGUgKEVudiBlKSB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gVHlwZSBwcmVkaWNhdGVzIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInRodW5rP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1RodW5rIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJ0aHVuay1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZXhwciB2IHwgXyAtPiBOaWwpO1xuICBiaW5kIFwidGh1bmstZW52XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbdl0gLT4gdGh1bmtfZW52IHYgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGE/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJtYWNybz9cIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtNYWNybyBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiaXNsYW5kP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0lzbGFuZCBfXSAtPiBCb29sIHRydWUgfCBfIC0+IEJvb2wgZmFsc2UpO1xuICBiaW5kIFwiY29tcG9uZW50P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0NvbXBvbmVudCBfXSB8IFtJc2xhbmQgX10gLT4gQm9vbCB0cnVlIHwgXyAtPiBCb29sIGZhbHNlKTtcbiAgYmluZCBcImNhbGxhYmxlP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW05hdGl2ZUZuIF9dIHwgW0xhbWJkYSBfXSB8IFtDb21wb25lbnQgX10gfCBbSXNsYW5kIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJzcHJlYWQ/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJjb250aW51YXRpb24/XCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbQ29udGludWF0aW9uIF9dIC0+IEJvb2wgdHJ1ZSB8IF8gLT4gQm9vbCBmYWxzZSk7XG4gIGJpbmQgXCJsYW1iZGEtcGFyYW1zXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbTGFtYmRhIGxdIC0+IExpc3QgKExpc3QubWFwIChmdW4gcyAtPiBTdHJpbmcgcykgbC5sX3BhcmFtcykgfCBfIC0+IExpc3QgW10pO1xuICBiaW5kIFwibGFtYmRhLWJvZHlcIiAoZnVuIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoIFtMYW1iZGEgbF0gLT4gbC5sX2JvZHkgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJsYW1iZGEtY2xvc3VyZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0xhbWJkYSBsXSAtPiBFbnYgbC5sX2Nsb3N1cmUgfCBfIC0+IERpY3QgKEhhc2h0YmwuY3JlYXRlIDApKTtcblxuICAoKiAtLS0gQ29yZSBvcGVyYXRpb25zIG5lZWRlZCBieSBhZGFwdGVycyAtLS0gKilcbiAgYmluZCBcInNwcmVhZC1hdHRyc1wiIChmdW4gYXJncyAtPlxuICAgIG1hdGNoIGFyZ3Mgd2l0aCBbU3ByZWFkIHBhaXJzXSAtPiBsZXQgZCA9IEhhc2h0YmwuY3JlYXRlIDQgaW4gTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwucmVwbGFjZSBkIGsgdikgcGFpcnM7IERpY3QgZCB8IF8gLT4gRGljdCAoSGFzaHRibC5jcmVhdGUgMCkpO1xuICBiaW5kIFwibWFrZS1zcHJlYWRcIiAoZnVuIGFyZ3MgLT5cbiAgICBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gU3ByZWFkIChIYXNodGJsLmZvbGQgKGZ1biBrIHYgYWNjIC0+IChrLCB2KSA6OiBhY2MpIGQgW10pIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwibWFrZS1yYXctaHRtbFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N0cmluZyBzXSAtPiBSYXdIVE1MIHMgfCBbdl0gLT4gUmF3SFRNTCAodmFsdWVfdG9fc3RyaW5nIHYpIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicmF3LWh0bWwtY29udGVudFwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1Jhd0hUTUwgc10gLT4gU3RyaW5nIHMgfCBbU3RyaW5nIHNdIC0+IFN0cmluZyBzIHwgXyAtPiBTdHJpbmcgXCJcIik7XG4gIGJpbmQgXCJlbXB0eS1kaWN0P1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW0RpY3QgZF0gLT4gQm9vbCAoSGFzaHRibC5sZW5ndGggZCA9IDApIHwgXyAtPiBCb29sIHRydWUpO1xuICBiaW5kIFwiaWRlbnRpY2FsP1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW2E7IGJdIC0+IEJvb2wgKGEgPT0gYikgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwiaWRlbnRpY2FsP1wiKSk7XG4gIGJpbmQgXCJmb3ItZWFjaC1pbmRleGVkXCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbZm5fdmFsOyBMaXN0IGl0ZW1zXSB8IFtmbl92YWw7IExpc3RSZWYgeyBjb250ZW50cyA9IGl0ZW1zIH1dIC0+XG4gICAgICBMaXN0Lml0ZXJpIChmdW4gaSBpdGVtIC0+XG4gICAgICAgIGlnbm9yZSAoU3hfcmVmLmV2YWxfZXhwciAoTGlzdCBbZm5fdmFsOyBOdW1iZXIgKGZsb2F0X29mX2ludCBpKTsgaXRlbV0pIChFbnYgZ2xvYmFsX2VudikpXG4gICAgICApIGl0ZW1zOyBOaWxcbiAgICB8IF8gLT4gTmlsKTtcblxuICAoKiAtLS0gU3RyaW5nL251bWJlciBoZWxwZXJzIHVzZWQgYnkgb3JjaGVzdHJhdGlvbi9icm93c2VyIC0tLSAqKVxuICBiaW5kIFwibWFrZS1zeC1leHByXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+IFN4RXhwciBzIHwgXyAtPiByYWlzZSAoRXZhbF9lcnJvciBcIm1ha2Utc3gtZXhwclwiKSk7XG4gIGJpbmQgXCJzeC1leHByLXNvdXJjZVwiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW1N4RXhwciBzXSAtPiBTdHJpbmcgcyB8IFtTdHJpbmcgc10gLT4gU3RyaW5nIHMgfCBfIC0+IHJhaXNlIChFdmFsX2Vycm9yIFwic3gtZXhwci1zb3VyY2VcIikpO1xuICBiaW5kIFwicGFyc2UtaW50XCIgKGZ1biBhcmdzIC0+XG4gICAgbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9pbnQgKGludF9vZl9zdHJpbmcgcykpIHdpdGggXyAtPiBOaWwpXG4gICAgfCBbU3RyaW5nIHM7IGRlZmF1bHRfdmFsXSAtPiAodHJ5IE51bWJlciAoZmxvYXRfb2ZfaW50IChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoIF8gLT4gZGVmYXVsdF92YWwpXG4gICAgfCBbTnVtYmVyIG5dIHwgW051bWJlciBuOyBfXSAtPiBOdW1iZXIgKEZsb2F0LnJvdW5kIG4pXG4gICAgfCBbXzsgZGVmYXVsdF92YWxdIC0+IGRlZmF1bHRfdmFsIHwgXyAtPiBOaWwpO1xuICBiaW5kIFwicGFyc2UtbnVtYmVyXCIgKGZ1biBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aCBbU3RyaW5nIHNdIC0+ICh0cnkgTnVtYmVyIChmbG9hdF9vZl9zdHJpbmcgcykgd2l0aCBfIC0+IE5pbCkgfCBfIC0+IE5pbCk7XG5cbiAgKCogLS0tIFNlcnZlci1vbmx5IHN0dWJzIChuby1vcHMgaW4gYnJvd3NlcikgLS0tICopXG4gIGJpbmQgXCJxdWVyeVwiIChmdW4gXyAtPiBOaWwpO1xuICBiaW5kIFwiYWN0aW9uXCIgKGZ1biBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LWFyZ1wiIChmdW4gYXJncyAtPiBtYXRjaCBhcmdzIHdpdGggW187IGRdIC0+IGQgfCBfIC0+IE5pbCk7XG4gIGJpbmQgXCJyZXF1ZXN0LW1ldGhvZFwiIChmdW4gXyAtPiBTdHJpbmcgXCJHRVRcIik7XG4gIGJpbmQgXCJjdHhcIiAoZnVuIF8gLT4gTmlsKTtcbiAgYmluZCBcImhlbHBlclwiIChmdW4gXyAtPiBOaWwpO1xuICAoKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIEpJVCBjb21waWxhdGlvbiBob29rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqIE9uIGZpcnN0IGNhbGwgdG8gYSBuYW1lZCBsYW1iZGEsIHRyeSB0byBjb21waWxlIGl0IHRvIGJ5dGVjb2RlIHZpYSAgKilcbigqIGNvbXBpbGVyLnN4IChsb2FkZWQgYXMgYW4gLnN4IHBsYXRmb3JtIGZpbGUpLiBDb21waWxlZCBjbG9zdXJlcyBydW4gKilcbigqIG9uIHRoZSBieXRlY29kZSBWTTsgZmFpbHVyZXMgZmFsbCBiYWNrIHRvIHRoZSBDRUsgaW50ZXJwcmV0ZXIuICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgX2ppdF9jb21waWxpbmcgPSByZWYgZmFsc2VcbmxldCBfaml0X2VuYWJsZWQgPSByZWYgZmFsc2VcblxubGV0ICgpID1cbiAgU3hfcmVmLmppdF9jYWxsX2hvb2sgOj0gU29tZSAoZnVuIGYgYXJncyAtPlxuICAgIG1hdGNoIGYgd2l0aFxuICAgIHwgTGFtYmRhIGwgd2hlbiAhX2ppdF9lbmFibGVkIC0+XG4gICAgICAobWF0Y2ggbC5sX2NvbXBpbGVkIHdpdGhcbiAgICAgICB8IFNvbWUgY2wgd2hlbiBub3QgKFN4X3ZtLmlzX2ppdF9mYWlsZWQgY2wpIC0+XG4gICAgICAgICAodHJ5IFNvbWUgKFN4X3ZtLmNhbGxfY2xvc3VyZSBjbCBhcmdzIF92bV9nbG9iYWxzKVxuICAgICAgICAgIHdpdGggRXZhbF9lcnJvciBtc2cgLT5cbiAgICAgICAgICAgIGxldCBmbl9uYW1lID0gbWF0Y2ggbC5sX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCI/XCIgaW5cbiAgICAgICAgICAgIFByaW50Zi5lcHJpbnRmIFwiW2ppdF0gRkFJTCAlczogJXMgKGJjPSVkIGNvbnN0cz0lZCB1cHY9JWQpXFxuJSFcIlxuICAgICAgICAgICAgICBmbl9uYW1lIG1zZ1xuICAgICAgICAgICAgICAoQXJyYXkubGVuZ3RoIGNsLnZtX2NvZGUudmNfYnl0ZWNvZGUpXG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fY29kZS52Y19jb25zdGFudHMpXG4gICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fdXB2YWx1ZXMpO1xuICAgICAgICAgICAgKCogTWFyayBhcyBmYWlsZWQgdG8gc3RvcCByZXRyeWluZyAqKVxuICAgICAgICAgICAgbC5sX2NvbXBpbGVkIDwtIFNvbWUgKFN4X3ZtLmppdF9mYWlsZWRfc2VudGluZWwpO1xuICAgICAgICAgICAgTm9uZSlcbiAgICAgICB8IFNvbWUgXyAtPiBOb25lXG4gICAgICAgfCBOb25lIC0+XG4gICAgICAgICBpZiAhX2ppdF9jb21waWxpbmcgdGhlbiBOb25lXG4gICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgIF9qaXRfY29tcGlsaW5nIDo9IHRydWU7XG4gICAgICAgICAgIGxldCBjb21waWxlZCA9IFN4X3ZtLmppdF9jb21waWxlX2xhbWJkYSBsIF92bV9nbG9iYWxzIGluXG4gICAgICAgICAgIF9qaXRfY29tcGlsaW5nIDo9IGZhbHNlO1xuICAgICAgICAgICAobWF0Y2ggY29tcGlsZWQgd2l0aFxuICAgICAgICAgICB8IFNvbWUgY2wgLT5cbiAgICAgICAgICAgICBsLmxfY29tcGlsZWQgPC0gU29tZSBjbDtcbiAgICAgICAgICAgICAodHJ5IFNvbWUgKFN4X3ZtLmNhbGxfY2xvc3VyZSBjbCBhcmdzIF92bV9nbG9iYWxzKVxuICAgICAgICAgICAgICB3aXRoIEV2YWxfZXJyb3IgbXNnIC0+XG4gICAgICAgICAgICAgICAgbGV0IGZuX25hbWUyID0gbWF0Y2ggbC5sX25hbWUgd2l0aCBTb21lIG4gLT4gbiB8IE5vbmUgLT4gXCI/XCIgaW5cbiAgICAgICAgICAgICAgICBQcmludGYuZXByaW50ZiBcIltqaXRdIEZBSUwgJXM6ICVzIChiYz0lZCBjb25zdHM9JWQgdXB2PSVkKVxcbiUhXCJcbiAgICAgICAgICAgICAgICAgIGZuX25hbWUyIG1zZ1xuICAgICAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2J5dGVjb2RlKVxuICAgICAgICAgICAgICAgICAgKEFycmF5Lmxlbmd0aCBjbC52bV9jb2RlLnZjX2NvbnN0YW50cylcbiAgICAgICAgICAgICAgICAgIChBcnJheS5sZW5ndGggY2wudm1fdXB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIGwubF9jb21waWxlZCA8LSBTb21lIChTeF92bS5qaXRfZmFpbGVkX3NlbnRpbmVsKTtcbiAgICAgICAgICAgICAgICBOb25lKVxuICAgICAgICAgICB8IE5vbmUgLT4gTm9uZSlcbiAgICAgICAgIGVuZClcbiAgICB8IF8gLT4gTm9uZSlcblxubGV0ICgpID0gaWdub3JlIChlbnZfYmluZCBnbG9iYWxfZW52IFwiZW5hYmxlLWppdCFcIiAoTmF0aXZlRm4gKFwiZW5hYmxlLWppdCFcIiwgZnVuIF8gLT4gX2ppdF9lbmFibGVkIDo9IHRydWU7IE5pbCkpKVxuXG4oKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKilcbigqIFJlZ2lzdGVyIGdsb2JhbCBTeEtlcm5lbCBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqKVxuXG5sZXQgKCkgPVxuICBsZXQgc3ggPSBKcy5VbnNhZmUub2JqIFt8fF0gaW5cbiAgbGV0IHdyYXAgZm4gPSBKcy5VbnNhZmUuZnVuX2NhbGxcbiAgICAoSnMuVW5zYWZlLnB1cmVfanNfZXhwciBcIihmdW5jdGlvbihmbikgeyByZXR1cm4gZnVuY3Rpb24oKSB7IGdsb2JhbFRoaXMuX19zeFIgPSB1bmRlZmluZWQ7IHZhciByID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgcmV0dXJuIGdsb2JhbFRoaXMuX19zeFIgIT09IHVuZGVmaW5lZCA/IGdsb2JhbFRoaXMuX19zeFIgOiByOyB9OyB9KVwiKVxuICAgIFt8IEpzLlVuc2FmZS5pbmplY3QgKEpzLndyYXBfY2FsbGJhY2sgZm4pIHxdIGluXG5cbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwicGFyc2VcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3BhcnNlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwic3RyaW5naWZ5XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9zdHJpbmdpZnkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJldmFsXCIpICh3cmFwIGFwaV9ldmFsKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZXZhbFZNXCIpICh3cmFwIGFwaV9ldmFsX3ZtKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZXZhbEV4cHJcIikgKHdyYXAgYXBpX2V2YWxfZXhwcik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInJlbmRlclRvSHRtbFwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcmVuZGVyX3RvX2h0bWwpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJsb2FkXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9sb2FkKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwibG9hZE1vZHVsZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfbG9hZF9tb2R1bGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJiZWdpbk1vZHVsZUxvYWRcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPiBhcGlfYmVnaW5fbW9kdWxlX2xvYWQgKCkpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZW5kTW9kdWxlTG9hZFwiKSAoSnMud3JhcF9jYWxsYmFjayAoZnVuICgpIC0+IGFwaV9lbmRfbW9kdWxlX2xvYWQgKCkpKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiY29tcGlsZU1vZHVsZVwiKSAod3JhcCBhcGlfY29tcGlsZV9tb2R1bGUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJ0eXBlT2ZcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX3R5cGVfb2YpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJpbnNwZWN0XCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9pbnNwZWN0KTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZW5naW5lXCIpIChKcy53cmFwX2NhbGxiYWNrIGFwaV9lbmdpbmUpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJyZWdpc3Rlck5hdGl2ZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfcmVnaXN0ZXJfbmF0aXZlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwibG9hZFNvdXJjZVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfbG9hZCk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImNhbGxGblwiKSAod3JhcCBhcGlfY2FsbF9mbik7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcImlzQ2FsbGFibGVcIikgKEpzLndyYXBfY2FsbGJhY2sgYXBpX2lzX2NhbGxhYmxlKTtcbiAgSnMuVW5zYWZlLnNldCBzeCAoSnMuc3RyaW5nIFwiZm5Bcml0eVwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfZm5fYXJpdHkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJkZWJ1Z0VudlwiKSAoSnMud3JhcF9jYWxsYmFjayBhcGlfZGVidWdfZW52KTtcblxuICAoKiBTY29wZSB0cmFjaW5nIEFQSSAqKVxuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlT25cIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIFN4X3Njb3BlLnNjb3BlX3RyYWNlX2VuYWJsZSAoKTsgSnMuVW5zYWZlLmluamVjdCBKcy5udWxsKSk7XG4gIEpzLlVuc2FmZS5zZXQgc3ggKEpzLnN0cmluZyBcInNjb3BlVHJhY2VPZmZcIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIFN4X3Njb3BlLnNjb3BlX3RyYWNlX2Rpc2FibGUgKCk7IEpzLlVuc2FmZS5pbmplY3QgSnMubnVsbCkpO1xuICBKcy5VbnNhZmUuc2V0IHN4IChKcy5zdHJpbmcgXCJzY29wZVRyYWNlRHJhaW5cIikgKEpzLndyYXBfY2FsbGJhY2sgKGZ1biAoKSAtPlxuICAgIGxldCBsb2cgPSBTeF9zY29wZS5zY29wZV90cmFjZV9kcmFpbiAoKSBpblxuICAgIEpzLlVuc2FmZS5pbmplY3QgKEpzLmFycmF5IChBcnJheS5vZl9saXN0IChMaXN0Lm1hcCAoZnVuIHMgLT4gSnMuVW5zYWZlLmluamVjdCAoSnMuc3RyaW5nIHMpKSBsb2cpKSkpKTtcblxuICBKcy5VbnNhZmUuc2V0IEpzLlVuc2FmZS5nbG9iYWwgKEpzLnN0cmluZyBcIlN4S2VybmVsXCIpIHN4XG4iXSwibmFtZXMiOlsicnVudGltZSIsImNhbWxfaW50X29mX3N0cmluZyIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfanNfd3JhcF9jYWxsYmFjayIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jYWxsMSIsImYiLCJhMCIsImNhbWxfY2FsbDIiLCJhMSIsImNhbWxfY2FsbDQiLCJhMiIsImEzIiwiY2FtbF9jYWxsNSIsImE0IiwiZ2xvYmFsX2RhdGEiLCJTeF90eXBlcyIsIlN0ZGxpYl9QcmludGYiLCJTdGRsaWIiLCJKc19vZl9vY2FtbF9KcyIsIlN0ZGxpYl9QcmludGV4YyIsIlN0ZGxpYl9IYXNodGJsIiwiU3RkbGliX0xpc3QiLCJTdGRsaWJfQXJyYXkiLCJTdGRsaWJfT3B0aW9uIiwiU3hfc2NvcGUiLCJTeF92bSIsIlN4X3JlZiIsIlN4X3J1bnRpbWUiLCJTeF9wcmltaXRpdmVzIiwiU3hfcmVuZGVyIiwiU3RkbGliX1N0cmluZyIsIlN4X3BhcnNlciIsImhhbmRsZV90YWJsZSIsIm5leHRfaGFuZGxlIiwiYWxsb2NfaGFuZGxlIiwidiIsImlkIiwiZ2V0X2hhbmRsZSIsIm1hdGNoIiwiYWxsb2NfaG9zdF9oYW5kbGUiLCJnbG9iYWxfZW52IiwiY2FsbF9zeF9mbiIsImZuIiwiYXJncyIsInJlc3VsdCIsInRhZ19mbiIsImNzdF9jYWxsYmFjayIsImNzdF9jYWxsYmFja19zX2hhbmRsZV9kIiwiY3N0X2hhbmRsZSIsImNzdF9ob3N0X2hhbmRsZSIsImNzdF9kaWN0IiwiY3N0X2tleXdvcmQiLCJjc3RfbGlzdCIsImNzdF9zeW1ib2wiLCJ2YWx1ZV90b19qcyIsImIiLCJuIiwicyIsImsiLCJpdGVtcyIsImQiLCJvYmoiLCJoYW5kbGUiLCJpbm5lciIsImFyZ3NfanMiLCJhcmciLCJleG4iLCJtc2ciLCJmbl9pbmZvIiwiYXJyIiwibmV4dF9ob3N0X2hhbmRsZSIsImpzX3RvX3ZhbHVlIiwidHkiLCJoIiwianNfYXJncyIsInR5cGVfZmllbGQiLCJ0MCIsInQxIiwiaSIsInRhZyIsIml0ZW1zX2pzIiwidDMiLCJ0NCIsImtleXMiLCJsZW4iLCJyZXR1cm5fdmlhX3NpZGVfY2hhbm5lbCIsInZtX2dsb2JhbHMiLCJzeW5jX2Vudl90b192bSIsInBhcmFtIiwiZW52IiwibmFtZSIsImR1bW15IiwiY3N0X1BhcnNlX2Vycm9yIiwiYXBpX3BhcnNlIiwic3JjX2pzIiwic3JjIiwidmFsdWVzIiwiY3N0X0Vycm9yIiwiYXBpX2V2YWwiLCJleHBycyIsImFjYyIsImV4cHIiLCJjc3RfRXJyb3JfY29tcGlsZV9tb2R1bGVfbm90X2wiLCJjc3RfY29tcGlsZV9tb2R1bGUiLCJhcGlfZXZhbF92bSIsImNvbXBpbGVfZm4iLCJjb2RlX3ZhbCIsImNvZGUiLCJhcGlfZXZhbF9leHByIiwiZXhwcl9qcyIsImVudl9qcyIsImFwaV9sb2FkIiwiY291bnQiLCJzeW5jX3ZtX3RvX2VudiIsImV4aXN0aW5nIiwiYXBpX2xvYWRfbW9kdWxlIiwibW9kdWxlX2pzIiwiYXBpX2RlYnVnX2VudiIsIm5hbWVfanMiLCJmb3VuZF9lbnYiLCJmb3VuZF92bSIsInRvdGFsX2VudiIsInRvdGFsX3ZtIiwiZW52X3MiLCJ2bV9zIiwiYXBpX2NvbXBpbGVfbW9kdWxlIiwic3hfcmVuZGVyX21vZGUiLCJhcGlfcmVuZGVyX3RvX2h0bWwiLCJwcmV2IiwiaHRtbCIsImFwaV9zdHJpbmdpZnkiLCJ2X2pzIiwiYXBpX3R5cGVfb2YiLCJhcGlfaW5zcGVjdCIsImFwaV9lbmdpbmUiLCJhcGlfcmVnaXN0ZXJfbmF0aXZlIiwiY2FsbGJhY2tfanMiLCJuYXRpdmVfZm4iLCJhcGlfY2FsbF9mbiIsImZuX2pzIiwiY3N0X3N4X2NhbGxGbiIsImFwaV9pc19jYWxsYWJsZSIsImFwaV9mbl9hcml0eSIsImwiLCJiaW5kIiwiY3N0X2Nla19ldmFsIiwiZSIsImVudl92YWwiLCJjc3RfY2VrX2NhbGwiLCJjc3RfY2VrX2NhbGxfZXhwZWN0ZWRfZm5fYXJncyIsImNzdF9jZWtfY2FsbF9ub3RfY2FsbGFibGUiLCJhIiwiYXJnX2xpc3QiLCJkZWVwX2VxdWFsIiwia2EiLCJrYiIsImNvbmQiLCJjc3RfZXJyb3IiLCJjc3Rfb2siLCJ0aHVuayIsImNvZGVfZm9ybSIsImNzdF9jb2RlIiwiY29udmVydF9jb2RlIiwiZm9ybSIsInJlc3QiLCJjc3RfYXJpdHkiLCJjc3RfYnl0ZWNvZGUiLCJjc3RfY29uc3RhbnRzIiwiY3N0X3VwdmFsdWVfY291bnQiLCJjb25zdHMiLCJudW1zIiwiY29udmVydF9jb25zdCIsIm1vZHVsZV92YWwiLCJyIiwidGFyZ2V0IiwieCIsInV3IiwiY3N0X2Vudl9oYXMiLCJjc3RfZW52X2dldCIsImNzdF9lbnZfYmluZCIsImNzdF9lbnZfc2V0IiwiY3N0X2Vudl9leHRlbmQiLCJjc3RfZW52X21lcmdlIiwiY3N0X21ha2Vfc3ltYm9sIiwiY3N0X21ha2Vfa2V5d29yZCIsImNzdF9rZXl3b3JkX25hbWUiLCJjc3Rfc3ltYm9sX25hbWUiLCJjc3QiLCJjIiwiY3N0X2NvbXBvbmVudF9oYXNfY2hpbGRyZW4iLCJoYXNfY2hpbGRyZW5faW1wbCIsImNzdF9tYWtlX2Nla19zdGF0ZSIsImNzdF9jZWtfc3RlcCIsImNzdF9jZWtfcGhhc2UiLCJjc3RfY2VrX3ZhbHVlIiwiY3N0X2Nla190ZXJtaW5hbCIsImNzdF9jZWtfa29udCIsImNzdF9mcmFtZV90eXBlIiwiY3N0X3N0cmljdCIsImNzdF9wcmltX3BhcmFtX3R5cGVzIiwidCIsImNzdF9hcHBseSIsImFsbF9hcmdzIiwicHJlZml4IiwibGFzdCIsImNzdF9wcm92aWRlX3B1c2giLCJjc3RfcHJvdmlkZV9wb3AiLCJodG1sX3RhZ3MiLCJ2b2lkX2VsZW1lbnRzIiwiYm9vbGVhbl9hdHRycyIsImV2YWxfdGFnX2FyZ3MiLCJyYXdfYXJncyIsInByb2Nlc3MiLCJrdyIsInZhbHVlIiwiaGFuZGxlcl9hcmdzIiwiaGFuZGxlciIsInJhdyIsIm1hYyIsInRlbXBsYXRlIiwicGFpcnMiLCJjc3RfaWRlbnRpY2FsIiwiZm5fdmFsIiwiaXRlbSIsImNzdF9tYWtlX3N4X2V4cHIiLCJjc3Rfc3hfZXhwcl9zb3VyY2UiLCJkZWZhdWx0X3ZhbCIsImNzdF9iYyIsImNzdF9jb25zdHMiLCJjc3RfdXB2IiwiY3N0X2ppdF9GQUlMIiwiY3N0X2ppdF9GQUlMX3Nfc19iY19kX2NvbnN0c19kIiwiaml0X2NvbXBpbGluZyIsImppdF9lbmFibGVkIiwiY2wiLCJmbl9uYW1lIiwiY29tcGlsZWQiLCJmbl9uYW1lMiIsImNzdF9lbmFibGVfaml0Iiwid3JhcCIsInN4IiwiaW5fYmF0Y2giLCJsb2ciXSwibWFwcGluZ3MiOiJJQUFBQSxVQUFBO0FBQUEsSUFBQUMscUJBQUE7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLElBQUFDLHdCQUFBO0FBQUEsSUFBQUMsMEJBQUE7QUFBQSxJQUFBQyw4QkFBQTtBQUFBLElBQUFDLDBCQUFBO0FBQUEsSUFBQUMsc0JBQUE7QUFBQSxZQUFBQyxXQUFBQyxHQUFBQztBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUYsR0FBQUMsSUFBQUU7QUFBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFDLFdBQUFKLEdBQUFDLElBQUFFLElBQUFFLElBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUFBQyxXQUFBUCxHQUFBQyxJQUFBRSxJQUFBRSxJQUFBQyxJQUFBRTtBQUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUFBQyxjQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGdCQUFBO0FBQUEsSUFBQUMsU0FBQTtBQUFBLElBQUFDLGlCQUFBO0FBQUEsSUFBQUMsa0JBQUE7QUFBQSxJQUFBQyxpQkFBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxlQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsUUFBQTtBQUFBLElBQUFDLFNBQUE7QUFBQSxJQUFBQyxhQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZ0JBQUE7QUFBQSxJQUFBQyxZQUFBO0FBQUEsSUFBQUMsZUNvQjZDO0FBQUEsSUFBQUMsY0RwQjdDO0FBQUEsWUFBQUMsYUFBQUM7QUFBQUEsUUFBQUMsS0N1QkU7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQWtDO0FBQUEsR0FDaEM7QUFBQTtBQUFBO0FBQUEsTUFOMkQ7QUFBQTtBQUFBO0FBQUEsWUFBQUMsV0FBQUQ7QUFBQUEsUUFBQUUsUUFTdkQ7QUFBQSxJQUFpQyxjQUFBSCxJQUFBLFVBQzNCO0FBQUEsWUFDZ0I7QUFBQSxJQUEyQztBQUFBLEdBQUM7QUFBQTtBQUFBLElBQUFJO0FBQUFBLE1EL0IxRTtBQUFBLGdCQUFBLFFBQUE7QUFBQSxRQUFBLG9DQUFBLEtBQUEsYUFBQSxTQUFBLENBQUE7QUFBQSxrQ0FBQSxZQUFBLENBQUEsRUFBQTtBQUFBLE9BQUE7QUFBQSxPQUFBO0FBQUEsR0NzRFM7QUFBQSxPQUFBQyxhQUVRO0FBQUEsWUFBQUMsV0FBQUMsSUFBQUM7QUFBQUEsUUFBQUMsU0FJRjtBQUFBLElBQ2IsOENBQXVDO0FBQUE7QUFBQSxZQUFBQztBQUFBQSxJRDdEekM7QUFBQSxJQUFBO0FBQUEsSUFBQSxTQUFBO0FBQUEsR0FBQTtBQUFBO0FBQUEsSUFBQUMsZUFBQTtBQUFBLElBQUFDLDBCQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBLElBQUFDLGtCQUFBO0FBQUEsSUFBQUMsV0FBQTtBQUFBLElBQUFDLGNBQUE7QUFBQSxJQUFBQyxXQUFBO0FBQUEsSUFBQUMsYUFBQTtBQUFBO0FBQUEsTUNxRXlGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQUMsWUFBQW5CO0FBQUFBLElBR3ZGLDBCQUNTO0FBQUEsSUFEVDtBQUFBO0FBQUEsV0FBQW9CLE1BQUEsTUFFd0M7QUFBQTtBQUFBLFdBQUFDLElBRnhDLE1BR2M7QUFBQTtBQUFBLFdBQUFDLE1BSGQ7QUFBQSxPQVM4Qiw4REFBa0I7QUFBQTtBQUFBLFdBQUFDLElBVGhEO0FBQUEsT0FhOEIsNkRBQWtCO0FBQUE7QUFBQSxXQUFBQyxRQWJoRDtBQUFBO0FBQUEsV0FBQUMsSUFBQSxNQUFBdEIsUUFxQlM7QUFBQSxPQUFrQztBQUFBLFlBQUFBLFVBQUE7QUFBQTtBQUFBLGFBQUFrQixNQUFBLFlBQUFwQixLQUNuQjtBQUFBLFNBaER4QixnQ0FzRmdEO0FBQUE7QUFBQTtBQUFBLFdBQUF5QixNQXBDakM7QUFBQSxPQUNWO0FBQUEsT0FDQTtBQUFBO0FBQUEsa0JBQUFILEdBQUF2QjtBQUFBQSxVQUNvQix5Q0FBYyxjQUFlO0FBQUE7QUFBQTtBQUFBLE9BQUc7QUFBQTtBQUFBLFdBQUF3QixRQTNCekQ7QUFBQTtBQUFBO0FBQUEsV0FBQUYsSUFBQSx1Q0E0RGdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQUFLLFNBN0JqQztBQUFBLFFBQUFDO0FBQUFBLFVBQ0Q7QUFBQSxxQkFBQUM7QUFBQUEsYUFDVjtBQUFBO0FBQUEsZUFBQUMsTUFDWTtBQUFBLGVBQUF0QixPQUNWO0FBQUEsZUFBQUMsU0FDYTtBQUFBLG1CQUNiO0FBQUE7QUFBQTtBQUFBLG1CQUFBc0I7QUFBQUEsa0JBQUFBLE1EN0dSO0FBQUE7QUFBQTtBQUFBLGdCQUFBQyxNQUFBO0FBQUEsb0JDZ0hnRTtBQUFBLGdCQUFBQztBQUFBQSxrQkFBMUM7QUFBQSxvQkFHc0M7QUFBQSxvQkFBdEIsd0JBQVc7QUFBQSxlQUZsQztBQUFBLGVBR1A7QUFBQTtBQUFBO0FBQUEsbUJBRXdEO0FBQUEsZUFBQUE7QUFBQUEsaUJBQTFDO0FBQUEsbUJBR2dEO0FBQUE7QUFBQTtBQUFBLGlCQUFoQztBQUFBLG1CQUFXO0FBQUEsY0FGbEM7QUFBQSxjQUdQO0FBQUE7QUFBQSxZQUF3QjtBQUFBLE9BSUUsT0FIOUI7QUFBQTtBQUFBO0FBQUEsZ0JBR21CLHdCQUFXLDRCQU1nQjtBQUFBO0FBQUEsV0FBQU4sV0FIakM7QUFBQSxPQUUyQixlQUFYLHdCQUFXO0FBQUEscUNBQ007QUFBQTtBQUFBO0FBQUEsU0E3QzNCO0FBQUEsS0FBQU8sTUFBVDtBQUFBLElBR21CLHdEQUFtQjtBQUFBLEdBMENGO0FBQUEsT0FBQUMsbUJBaEhhO0FBQUEsWUFBQUMsWUFBQVY7QUFBQUEsSUFtSC9CO0FBQUEsU0FBQVcsS0FFbkI7QUFBQSxLQUNULHFCQUVzRDtBQUFBLEtBRnREO0FBQUEsVUFBQUMsTUFLVTtBQUFBLE1BQ2dDO0FBQUE7QUFBQTtBQUFBLHlCQUFBOUI7QUFBQUE7QUFBQUEsa0JBQUEsSUFLZDtBQUFBLGtCQUFBK0IsVUFBUjtBQUFBLGlCQUNxQixPQUEyQjtBQUFBLDBCQUFsRDtBQUFBO0FBQUEsNEJBQXVCLHdDRHRKN0Msc0JDc0p3RTtBQUFBO0FBQUEsZ0JBTGhFLG1CQThDTTtBQUFBO0FBQUEsS0FyRFYsb0JBQ2M7QUFBQSxLQURkO0FBQUEsdUNBR3FCLDZCQWtEWDtBQUFBLFNBQUFELElBdkNBO0FBQUEsS0FDZ0MsMkJBQ3RDLHdCQXFDTTtBQUFBLFNBQUFFLGFBbkNXO0FBQUEsS0FDMEI7QUFBQSxVQUFBQyxLQUFNLHVCQUFBQyxLQUNoQztBQUFBLE1BQUQ7QUFBQSxXQUFBckIsSUFDd0U7QUFBQSxPQUMvRTtBQUFBO0FBQUE7QUFBQTtBQUFBLDBCQUFBc0I7QUFBQUE7QUFBQUEsbUJBQUEsSUFDVTtBQUFBO0FBQUEsa0JBQUQsT0FBMkUsWUFBM0UsK0JBQTJFO0FBQUEsb0JBQUU7QUFBQTtBQUFBLFVBQUExQyxLQXhIckc7QUFBQSxNQUNBO0FBQUEsTUFDTztBQUFBLFVBQUF3QixJQTBIVztBQUFBLE1BQ1I7QUFBQSxNQUE0RDtBQUFBO0FBQUEsU0FBQW1CLE1BSXBEO0FBQUEsS0FDVjtBQUFBLDhCQUV1Qiw2Q0FBb0Q7QUFBQSxNQUYzRTtBQUFBLDJDQUNxQixrQ0FtQmpCO0FBQUEsVUFBQUMsV0FoQmEsV0FBQXhCLE1BQzJFO0FBQUEsTUFDckY7QUFBQTtBQUFBO0FBQUE7QUFBQSx5QkFBQXNCO0FBQUFBO0FBQUFBLGtCQUFBLElBQ1U7QUFBQTtBQUFBLGlCQUFELE9BQWlGLFlBQWpGLCtCQUFpRjtBQUFBLG1CQUFFO0FBQUE7QUFBQTtBQUFBLE1BQUFsQixNQUV6RjtBQUFBLE1BQUFxQixLQUNSO0FBQUEsTUFBQUMsS0FBVztBQUFBLE1BQUFDLE9BQUE7QUFBQSxNQUFBQyxNQUNEO0FBQUEsVUFDVjtBQUFBO0FBQUEsVUFBQU4sSUFBQTtBQUFBO0FBQUE7QUFBQSxZQUN3QjtBQUFBO0FBQUEsUUFBQXBCLElBQWQsd0JBQWE7QUFBQSxPQUNOO0FBQUEsZ0JBQ08sZ0JBQStCO0FBQUEsUUFBbkQ7QUFBQTtBQUFBLGVBRGE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBR2pCO0FBQUE7QUFBQSxJQXJEOEQ7QUFBQSxHQXdENUQ7QUFBQSxZQUFBMkIsd0JBQUFsRDtBQUFBQSxJQU9aO0FBQUEsSUFBb0Q7QUFBQSxHQUFHO0FBQUEsT0FBQW1ELGFBU1g7QUFBQSxZQUFBQyxlQUFBQztBQUFBQSxJQU01QztBQUFBO0FBQUEsc0JBQUFwRCxJQUFBRDtBQUFBQSxrQkFBQSxJQUM4QjtBQUFBLGNBQWEsc0RBQUU7QUFBQTtBQUFBLDJCQUN4QjtBQUFBO0FBQUEsR0FSeUM7QUFBQTtBQUFBLGNBQUFzRCxLQUFBQyxNQUFBdkQ7QUFBQUEsVUFBQSxJQWU1RDtBQUFBLGlCQUNFLHNEQUFrQztBQUFBO0FBQUEsR0FoQndCO0FBQUE7QUFBQSxjQUFBdUQsTUFBQXZEO0FBQUFBLFVBQUEsSUF1QnhCO0FBQUEsTUFBc0IseURBQUU7QUFBQTtBQUFBLE9BQUF3RCxRQXZCQSxHQUFBQyxrQkQvTWhFO0FBQUEsWUFBQUMsVUFBQUM7QUFBQUEsUUFBQUMsTUM2T1k7QUFBQSxJQUNWO0FBQUE7QUFBQSxNQUFBQyxTQUNlO0FBQUEsVUFDeUI7QUFBQSxVQUFyQixtQkFBVTtBQUFBO0FBQUE7QUFBQSxVQUFBOUI7QUFBQUEsU0FBQUEsTURoUC9CO0FBQUE7QUFBQSxTQUFBQyxNQUFBO0FBQUEsS0NrUGdDLE9BQVg7QUFBQSxjQUFXLDRDQUF3QjtBQUFBO0FBQUE7QUFBQSxPQUFBOEIsWURsUHhEO0FBQUEsWUFBQUMsU0FBQUo7QUFBQUEsUUFBQUMsTUNxUFk7QUFBQSxJQUNWO0FBQUE7QUFBQSxNQUFBSSxRQUNjO0FBQUEsTUFBQVYsTUFDWjtBQUFBLE1BQUE3QztBQUFBQSxRQUNhO0FBQUE7QUFBQSxtQkFBQXdELEtBQUFDLE1BQWlDLHdDQUF5QjtBQUFBO0FBQUE7QUFBQSxLQUN2RTtBQUFBLGFBQ0Esd0JBQXdCO0FBQUE7QUFBQTtBQUFBLFVBQUFuQztBQUFBQSxTQUFBQSxNRDNQNUI7QUFBQTtBQUFBLFVBQUFDLE1BQUE7QUFBQSxNQzZQa0QsT0FBWCx3QkFBVyxzQ0FDeUI7QUFBQTtBQUFBLEtEOVAzRTtBQUFBLFNBQUFBLFFBQUE7QUFBQSxLQzhQbUQsT0FBWDtBQUFBLGNBQVcsOENBQXdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFBQW1DLGlDRDlQM0U7QUFBQSxJQUFBQyxxQkFBQTtBQUFBLFlBQUFDLFlBQUFWO0FBQUFBLFFBQUFDLE1Db1FZO0FBQUEsSUFDVjtBQUFBO0FBQUEsTUFBQUksUUFDYztBQUFBLE1BQUE3RCxRQUNXO0FBQUEsS0FBNkM7QUFBQSxVQUFBSCxJQUFBLFVBQUFzRSxhQUN0RDtBQUFBO0FBQUE7QUFBQSxPQUFBQSxhQUNGO0FBQUE7QUFBQSxVQUNxQjtBQUFBLE1BQUFDLFdBQWxCO0FBQUEsTUFBQUMsT0FDSjtBQUFBLE1BQUEvRCxTQUNFO0FBQUEsS0FFYjtBQUFBO0FBQUEsZ0JBQUE4QyxNQUFBdkQ7QUFBQUEsWUFBQUMsS0FDVztBQUFBLFFBQ0Y7QUFBQSxTQUNMLDBEQUdVO0FBQUEsWUFBQUUsUUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFBbUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUNFLDBEQUNyQztBQUFBO0FBQUEsUUFBSDtBQUFBLE9BQUc7QUFBQTtBQUFBLGFBRWQsd0JBQXdCO0FBQUE7QUFBQTtBQUFBLFVBQUE0QjtBQUFBQSxTQUFBQSxNRHRSNUI7QUFBQTtBQUFBLFVBQUFDLE1BQUE7QUFBQSxNQ3dSa0QsT0FBWCx3QkFBVyxzQ0FFOEI7QUFBQTtBQUFBLEtEMVJoRjtBQUFBLFVBQUFBLFFBQUE7QUFBQSxNQ3lSbUQsT0FBWDtBQUFBLGVBQVcsOENBQzZCO0FBQUE7QUFBQSxLRDFSaEYsc0JDMFJnRjtBQUFBLEtEMVJoRjtBQUFBO0FBQUEsR0MwUmdGO0FBQUEsWUFBQXlDLGNBQUFDLFNBQUFDO0FBQUFBLFFBQUFULE9BR25FO0FBQUEsSUFDWDtBQUFBLFNBQUF6RCxTQUNlO0FBQUEsS0FDYjtBQUFBLGFBQ0Esd0JBQXdCO0FBQUE7QUFBQTtBQUFBLFVBQUFzQjtBQUFBQSxTQUFBQSxNRGpTNUI7QUFBQTtBQUFBLFNBQUFDLE1BQUE7QUFBQSxLQ21TZ0MsT0FBWCx3QkFBVyxzQ0FBa0I7QUFBQTtBQUFBO0FBQUEsWUFBQTRDLFNBQUFqQjtBQUFBQSxRQUFBQyxNQUd0QztBQUFBLElBQ1Y7QUFBQTtBQUFBLE1BQUFJLFFBQ2M7QUFBQSxNQUFBVixNQUNaO0FBQUEsTUFBQXVCLFFBQ0E7QUFBQSxLQUNBO0FBQUE7QUFBQSxnQkFBQVg7QUFBQUEsUUFBOEI7QUFBQSxRQUE2QjtBQUFBO0FBQUEsT0FBVTtBQUFBO0FBQUEsS0FDckU7QUFBQSxhQUFpQjtBQUFBO0FBQUE7QUFBQSxVQUFBbkM7QUFBQUEsU0FBQUEsTUQ1U3JCO0FBQUE7QUFBQSxVQUFBQyxNQUFBO0FBQUEsTUMrU2tELE9BQVgsd0JBQVcsc0NBQ3lCO0FBQUE7QUFBQSxLRGhUM0U7QUFBQSxTQUFBQSxRQUFBO0FBQUEsS0NnVG1ELE9BQVg7QUFBQSxjQUFXLDhDQUF3QjtBQUFBO0FBQUE7QUFBQSxZQUFBOEMsZUFBQXpCO0FBQUFBLElBb0J6RTtBQUFBO0FBQUEsc0JBQUFFLE1BQUF2RDtBQUFBQSxrQkFBQUMsS0FDVztBQUFBLGNBQ0Y7QUFBQSxlQUNMLDBEQVFDO0FBQUEsa0JBQUE4RSxXQUxjO0FBQUE7QUFBQTtBQUFBLGVBQ2Y7QUFBQTtBQUFBO0FBQUEsaUJBQzhCLDBEQUc3QjtBQUFBO0FBQUE7QUFBQSxlQUpEO0FBQUEsZ0JBRW9CLDBEQUVuQjtBQUFBO0FBQUEsY0FETTtBQUFBLGFBQ047QUFBQSx3QkFDUTtBQUFBO0FBQUEsWUFBQUMsZ0JBQUFDO0FBQUFBLElBR2I7QUFBQTtBQUFBLE1BQUFWLFdBQ2lCO0FBQUEsTUFBQUMsT0FDSjtBQUFBLEtBQ0c7QUFBQSxLQUNkO0FBQUEsYUFDaUI7QUFBQTtBQUFBO0FBQUEsVUFBQXpDO0FBQUFBLFNBQUFBLE1EeFZyQjtBQUFBO0FBQUEsVUFBQUMsTUFBQTtBQUFBLE1DMFZrRCxPQUFYLHdCQUFXLHNDQUMwQjtBQUFBO0FBQUEsYUFBeEI7QUFBQSxLQUFiLE9BQVgsd0JBQVcsb0NBQXFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQTVJWjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBQWtELGNBQUFDO0FBQUFBO0FBQUFBLEtBQUE1QixPQStJbkQ7QUFBQSxLQUFBdEQsS0FDRjtBQUFBLEtBQUFtRixZQUNPO0FBQUEsS0FBQUMsV0FDRDtBQUFBLEtBQUFDLFlBQ0M7QUFBQSxLQUFBQyxXQUNEO0FBQUEsSUFDZjtBQUFBO0FBQUEsTUFBQXZGLElBQUE7QUFBQSxVQUFvRDtBQUFBLE1BQUF3RixRQUFUO0FBQUE7QUFBQSxTQUFBQSxRQUEzQztBQUFBLElBQ0E7QUFBQTtBQUFBLE1BQUF4RixNQUFBO0FBQUEsVUFBaUQ7QUFBQSxNQUFBeUYsT0FBUjtBQUFBO0FBQUEsU0FBQUEsT0FBekM7QUFBQSxJQUM0QixPQUFYO0FBQUEsYUFBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEseUJBQXNFO0FBQUE7QUFBQSxZQUFBQyxtQkFBQS9CO0FBQUFBLFFBQUFDLE1BR3hGO0FBQUEsSUFDVjtBQUFBO0FBQUEsTUFBQUksUUFDYztBQUFBLE1BQUFNLGFBQ0s7QUFBQSxNQUFBRTtBQUFBQSxRQUNOO0FBQUE7QUFBQSxVQUNYLHdCQUF3QjtBQUFBO0FBQUE7QUFBQSxVQUFBekM7QUFBQUEsU0FBQUEsTUQ5VzVCO0FBQUE7QUFBQSxVQUFBQyxNQUFBO0FBQUEsTUNnWGtELE9BQVgsd0JBQVcsc0NBRThCO0FBQUE7QUFBQSxLRGxYaEY7QUFBQSxVQUFBQSxRQUFBO0FBQUEsTUNpWG1ELE9BQVg7QUFBQSxlQUFXLDhDQUM2QjtBQUFBO0FBQUEsS0RsWGhGLHNCQ2tYZ0Y7QUFBQSxLRGxYaEY7QUFBQTtBQUFBLEdDa1hnRjtBQUFBLE9BQUEyRCxpQkExVHBEO0FBQUEsWUFBQUMsbUJBQUFsQjtBQUFBQSxRQUFBUixPQTZUZixzQkFBQTJCLE9BQ1g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLFNBQUFDLE9BQ2E7QUFBQSxLQUNYO0FBQUEsYUFDaUI7QUFBQTtBQUFBO0FBQUEsVUFBQS9EO0FBQUFBLFNBQUFBLE1EM1hyQjtBQUFBO0FBQUEsU0FBQUMsTUFBQTtBQUFBLEtDNlhJO0FBQUEsS0FDNEIsT0FBWCx3QkFBVyxzQ0FBbUI7QUFBQTtBQUFBO0FBQUEsWUFBQStELGNBQUFDO0FBQUFBLFFBQUEsSUFHWjtBQUFBLElBQVQsT0FBWCx3QkFBVywyQkFBNkI7QUFBQTtBQUFBLFlBQUFDLFlBQUFEO0FBQUFBLFFBQUEsSUFHcEI7QUFBQSxJQUFULE9BQVgsd0JBQVcsMkJBQTZCO0FBQUE7QUFBQSxZQUFBRSxZQUFBRjtBQUFBQSxRQUFBLElBR3BCO0FBQUEsSUFBVCxPQUFYLHdCQUFXLDJCQUE2QjtBQUFBO0FBQUEsWUFBQUcsV0FBQTlDLE9BR2I7QUFBQSxZQUFBK0Msb0JBQUFqQixTQUFBa0I7QUFBQUEsUUFBQTlDLE9BR2pDO0FBQUEsYUFBQStDLFVBQUE5RjtBQUFBQTtBQUFBQSxNQUFBLElBRWE7QUFBQSxNQUFBK0IsVUFBUjtBQUFBLEtBQ2tELE9BQXNCLFlBQTFFLFlBQW9ELDZCQUFzQjtBQUFBO0FBQUEsUUFBQXZDLElBRXhGO0FBQUEsSUFDTztBQUFBLElBQ1A7QUFBQSxJQUFrQztBQUFBLEdBQ1Y7QUFBQSxZQUFBdUcsWUFBQUMsT0FBQTNFO0FBQUFBLElBR3hCO0FBQUE7QUFBQSxNQUFBdEIsS0FDVztBQUFBO0FBQUEsUUFDZ0I7QUFBQSw2QkFBdUI7QUFBQSxNQUFBQyxPQUFyQztBQUFBLFVBQ1gsd0JBQXdCLFlBQWE7QUFBQTtBQUFBO0FBQUEsVUFBQXVCO0FBQUFBLFNBQUFBLE1EM1p6Qyw0QkFBQTBFLGdCQUFBO0FBQUE7QUFBQTtBQUFBLE9BQUF6RSxNQUFBO0FBQUEsV0NnYWtDLHdCQUFXO0FBQUEsTUFGbEM7QUFBQSxNQUdQO0FBQUE7QUFBQTtBQUFBLFVBSTREO0FBQUEsVUFBOUIsd0JBQVc7QUFBQSxLQUZsQztBQUFBLEtBR1A7QUFBQTtBQUFBLEdBQXdCO0FBQUEsWUFBQTBFLGdCQUFBRjtBQUFBQSxJQUdPO0FBQUEsU0FBQWxFLElBR3ZCO0FBQUEsS0FDMEIsMkJBQXNDO0FBQUEsYUFDNUI7QUFBQSxLQUFiLHFDQUFxRjtBQUFBO0FBQUEsSUFKcEY7QUFBQSxHQUlvRjtBQUFBLFlBQUFxRSxhQUFBSDtBQUFBQSxRQUFBbEUsSUFHOUc7QUFBQSxJQUMwQiwyQkFBTTtBQUFBLFFBQUF0QyxJQUU5QjtBQUFBLElBQ1I7QUFBQSxTQUFBNEcsSUFBQTtBQUFBLEtBQ2lFLHNDQUNkO0FBQUE7QUFBQSxJQUE1QztBQUFBLEdBQTRDO0FBQUEsWUFBQUMsS0FBQXRELE1BQUFoRDtBQUFBQSxJQU8zQjtBQUFBLEdBQWdEO0FBQUEsR0FHMUU7QUFBQSxPQUFBdUcsZURqY0Y7QUFBQSxHQ29jRTtBQUFBO0FBQUEsY0FBQXRHO0FBQUFBLE1BQ0U7QUFBQSxXQUFBMEQsT0FBQTtBQUFBO0FBQUEsWUFBQTVDLElBQUEsU0FBQXlGLElBQ3dCO0FBQUEsUUFBeUIsUUFBb0U7QUFBQSxZQUFBekUsSUFBcEU7QUFBQSxRQUF3QixrREFHbEI7QUFBQTtBQUFBLFdBQUFuQyxRQUp2RDtBQUFBLG1CQUVZLHFEQUUyQztBQUFBLE9BSnZEO0FBQUEsWUFBQTZHLFVBQUE7QUFBQSxRQUdxQiw0Q0FDa0M7QUFBQTtBQUFBO0FBQUEsTUFBaEQ7QUFBQTtBQUFBLEtBQWdEO0FBQUEsR0FFekQ7QUFBQTtBQUFBLGNBQUF4RztBQUFBQSxNQUNFO0FBQUEsV0FBQUwsUUFBQSxTQUFBK0QsT0FBQTtBQUFBLG1CQUVZLHFEQUNnRDtBQUFBLE9BSDVEO0FBQUEsWUFBQTZDLElBQUE7QUFBQSxRQUNlLHNDQUU2QztBQUFBO0FBQUE7QUFBQSxNQUFyRDtBQUFBO0FBQUEsS0FBcUQ7QUFBQTtBQUFBLElBQUFFLGVEL2NoRTtBQUFBLElBQUFDLGdDQUFBO0FBQUEsSUFBQUMsNEJBQUE7QUFBQSxHQ2lkRTtBQUFBO0FBQUEsY0FBQTNHO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUEsWUFBQTRHLElBQUEsTUFBQWxKLElBQUE7QUFBQSxRQUNjO0FBQUE7QUFBQSxjQUc4QztBQUFBLGNBQTlCO0FBQUEsU0FBd0M7QUFBQTtBQUFBLFFBRnBFO0FBQUEsYUFBQW1KLFdBQWlEO0FBQUE7QUFBQSxhQUFBVCxJQUFqRCxNQUFBUyxXQUFzQztBQUFBO0FBQUEsYUFBQUEsV0FBcUI7QUFBQSxnQkFDekM7QUFBQSxRQUErQiw4QkFFSztBQUFBO0FBQUE7QUFBQSxNQUFqRDtBQUFBO0FBQUEsS0FBaUQ7QUFBQSxHQUUxRDtBQUFBO0FBQUEsY0FBQTdHO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUEsWUFBQW9ELE1BQUE7QUFBQSxRQUN1Qix5Q0FBeUI7QUFBQTtBQUFBO0FBQUEsTUFDekM7QUFBQTtBQUFBLEtBQThDO0FBQUEsR0FJdkQ7QUFBQTtBQUFBLGNBQUFwRDtBQUFBQTtBQUFBQSxNQUFBO0FBQUEsV0FBQVIsSUFDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUFBNEQsTUFBQSxNQUFBSSxRQUVjO0FBQUEsV0FDWiw0QkFBQStDLElBQUEsVUFBeUI7QUFBQSxXQUFTO0FBQUE7QUFBQSxPQUhwQyxjQUlTO0FBQUE7QUFBQSxNQUNGO0FBQUE7QUFBQSxLQUEyQztBQUFBLEdBRXBEO0FBQUE7QUFBQSxjQUFBdkc7QUFBQUEsTUFDRTtBQUFBLFdBQUFSLElBQUE7QUFBQSxPQUNnQixzQ0FBVztBQUFBO0FBQUEsTUFDcEI7QUFBQTtBQUFBLEtBQWlEO0FBQUEsWUFBQXNILFdBQUFGLEdBQUFoRztBQUFBQTtBQUFBQSxJQUFBO0FBQUEsS0FJeEQsMEJBQ2M7QUFBQTtBQUFBO0FBQUEsS0FEZDtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBQUFBLE1BQUEsTUFBQWdHLE1BQUE7QUFBQSxRQUN1QztBQUFBO0FBQUEsUUFEdkM7QUFBQTtBQUFBLFlBQUFoRyxNQUFBLE1BQUFnRyxNQUFBO0FBQUEsUUFFd0I7QUFBQTtBQUFBLFFBRnhCO0FBQUE7QUFBQSxZQUFBaEcsTUFBQSxNQUFBZ0csTUFBQTtBQUFBLFFBRTJEO0FBQUE7QUFBQSxRQUYzRDtBQUFBO0FBQUEsWUFBQWhHLE1BQUEsTUFBQWdHLE1BQUE7QUFBQSxRQUc2QjtBQUFBO0FBQUEsUUFIN0I7QUFBQTtBQUFBLFlBQUFoRyxNQUFBLE1BQUFnRyxNQUFBO0FBQUEsUUFHNkQ7QUFBQTtBQUFBLFlBQUFBLE1BSDdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFBaEcsTUFBQTtBQUFBLFNBQUFnRyxNQUFBO0FBQUEsU0FBQUc7QUFBQUEsV0FPVztBQUFBLDRCQUFBaEcsR0FBQThCLE9BQUFZLEtBQTZCLG1CQUFRO0FBQUEsU0FBQXVEO0FBQUFBLFdBQ3JDO0FBQUEsNEJBQUFqRyxHQUFBOEIsT0FBQVksS0FBNkIsbUJBQVE7QUFBQSxhQUM3QjtBQUFBLGFBQWpCO0FBQUEsUUFBYztBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFBMUM7QUFBQUEsd0JBQUEsSUFDUztBQUFBLG9CQUFlO0FBQUEsNEJBQ047QUFBQSxvQkFBbkIsT0FBa0IsV0FBbEIsd0NBQXFDO0FBQUE7QUFBQTtBQUFBLG1CQUN4QztBQUFBO0FBQUEsWUFBQTZGLE1BWlo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBQWhHLE1BQUE7QUFBQTtBQUFBLGFBQUFBLE1BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUtrQjtBQUFBLFdBQWhCO0FBQUEsTUFBYSwrREFPSDtBQUFBO0FBQUE7QUFBQSxJQUFMO0FBQUEsR0FBSztBQUFBLEdBRWQ7QUFBQTtBQUFBLGNBQUFaO0FBQUFBLE1BQTJCO0FBQUE7QUFBQTtBQUFBLFlBQUFZLElBQUEsTUFBQWdHLElBQUE7QUFBQSxRQUErQiw0QkFBZ0I7QUFBQTtBQUFBO0FBQUEsTUFBUTtBQUFBLEtBQW1DO0FBQUEsV0FBQztBQUFBLEdBQ3RIO0FBQUE7QUFBQSxjQUFBNUc7QUFBQUEsTUFDRTtBQUFBLFdBQUFMLFFBQUEsU0FBQXNILE9BQUE7QUFBQTtBQUFBLFFBQ21CO0FBQUEsU0FBc0I7QUFBQTtBQUFBLFFBQXVDO0FBQUE7QUFBQSxPQURoRjtBQUFBLFlBQUF6RixNQUFBO0FBQUEsUUFFd0IsMENBQWdGO0FBQUE7QUFBQSxhQUF2QjtBQUFBLGFBQWpCO0FBQUEsUUFBcUM7QUFBQTtBQUFBO0FBQUEsTUFDOUY7QUFBQTtBQUFBLEtBQXFDO0FBQUEsT0FBQTBGLFlEbGdCaEQsU0FBQUMsU0FBQSxVQ2tnQmlEO0FBQUEsR0FFL0M7QUFBQTtBQUFBLGNBQUFuSDtBQUFBQSxNQUNFO0FBQUEsV0FBQW9ILFFBQUE7QUFBQSxPQUVFO0FBQUEsUUFBWTtBQUFBLFlBQUFuRyxNQUNGO0FBQUEsUUFBb0I7QUFBQTtBQUFBO0FBQUEsYUFBQU07QUFBQUEsWUFBQUEsTUR4Z0JwQztBQUFBO0FBQUEsWUFBQUMsTUFBQSxRQUFBUCxJQzBnQmdCO0FBQUEsUUFBb0I7QUFBQSxRQUFxQztBQUFBLFFBQXNDO0FBQUE7QUFBQTtBQUFBLE1BQ3BHO0FBQUE7QUFBQSxLQUFvQztBQUFBLEdBSzdDO0FBQUE7QUFBQSxjQUFBakI7QUFBQUE7QUFBQUEsTUFBQTtBQUFBLGVBQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUFBcUgsWUFBQTtBQUFBO0FBQUEseUNBQUFBLFlBQUE7QUFBQTtBQUFBLFlBQUFDLFdEamhCSjtBQUFBLFlBQUFDO0FBQUFBLGNDbWhCTSxTQUFBQztBQUFBQSxlQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFBQyxPQUFBO0FBQUEsbUJBQUF4RyxJQUVVO0FBQUEsbUJBQUE0QixRQVdSO0FBQUE7QUFBQSxtQkFWbUIsWUFVTjtBQUFBLDJCQVZNO0FBQUE7QUFBQSxrQ0FBQTZFLFlEdmhCN0I7QUFBQSxvQkN1aEI2QjtBQUFBLHlCQUFBQyxlRHZoQjdCO0FBQUEscUJDdWhCNkI7QUFBQSwwQkFBQUMsZ0JEdmhCN0I7QUFBQSxzQkN1aEI2QjtBQUFBLDJCQUFBQyxvQkR2aEI3QjtBQUFBLHVCQ3VoQjZCO0FBQUE7QUFBQTtBQUFBLDZCQUFBbEksUUFBQTtBQUFBO0FBQUEsOEJBQUE4SCxTQUFBLE1BQUE1RyxJQUFBO0FBQUEsMEJBRWdDO0FBQUEsMEJBQTRDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0JBRjVFO0FBQUE7QUFBQSw0QkFBQWxCLFVBQUE7QUFBQTtBQUFBO0FBQUEsMEJBQUE4SCxTQUFBO0FBQUEsMEJBQUFLLFNBQUE7QUFBQSw4QkFNcUI7QUFBQSx5QkFBcEM7QUFBQSx5QkFBb0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw4QkFOckQ7QUFBQTtBQUFBLDJCQUFBbkksVUFBQTtBQUFBO0FBQUEsNEJBQUE4SCxTQUFBLE1BQUFNLE9BQUE7QUFBQSx3QkFJZjtBQUFBLHdCQUF3QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDZCQUp6QjtBQUFBO0FBQUEsMEJBQUFwSSxVQUFBO0FBQUE7QUFBQSwyQkFBQThILFNBQUEsTUFBQTVHLE1BQUE7QUFBQSx1QkFDd0I7QUFBQSx1QkFBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQUE0RyxTQUQ1RDtBQUFBLG1CQU9GO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUtnRDtBQUFBO0FBQUEsa0JBQTFDO0FBQUE7QUFBQSxlQUF1RDtBQUFBLGNBQUM7QUFBQSxZQUFBTztBQUFBQSxjQWhCbkYsU0FBQVI7QUFBQUEsZUFpQm9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBQTdILFFBQUE7QUFBQSx5Q0FDcUIseUJBRS9CO0FBQUEsa0JBSFU7QUFBQSx1QkFBQXFCLFFBQUE7QUFBQSxtQkFFc0IsNERBQThCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQUMvRDtBQUFBLGNBQUM7QUFBQSxZQUFBaUgsYUFFTztBQUFBLFlBQUFqRSxPQUNOO0FBQUEsV0FDRztBQUFBLFdBQ2Q7QUFBQSxXQUNxQixxREFBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFDN0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQXVFO0FBQUEsR0FHaEY7QUFBQTtBQUFBLGNBQUFoRTtBQUFBQSxNQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQUFSLElBQUEsTUFBQXdCLFFBQUE7QUFBQSxZQUUwQixtREFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUZ2QztBQUFBO0FBQUEsZ0JBQUF4QixNQUFBLE1BQUEwSSxJQUFBO0FBQUEsWUFDeUI7QUFBQSxZQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUU1QjtBQUFBO0FBQUEsS0FBcUQ7QUFBQSxHQUc5RDtBQUFBO0FBQUEsY0FBQWxJO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBQW1JLFNBQUEsTUFBQW5ILFFBQUE7QUFBQSxZQUlPO0FBQUE7QUFBQSxxQ0FBQW9ILEdBQXVCLDRCQUFXLFVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFKakQ7QUFBQTtBQUFBLGdCQUFBRCxXQUFBLE1BQUFELElBQUE7QUFBQSxZQUVPO0FBQUE7QUFBQSw4QkFBQUUsR0FBc0IsOEJBQVc7QUFBQSxZQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUd2QztBQUFBO0FBQUEsS0FBNEM7QUFBQSxPQUFBQyxLQUFDO0FBQUEsR0FLdEQsMEJBQUF4RixPQUE4QixzQ0FBYTtBQUFBLEdBQzNDLDRCQUFBQSxPQUE0Qix3QkFBYztBQUFBLE9BQUF5RixjRHBrQjVDO0FBQUEsR0Nxa0JFO0FBQUE7QUFBQSxjQUFBdEk7QUFBQUEsTUFBNkI7QUFBQTtBQUFBO0FBQUEsc0JBQUF1RyxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBeEYsSUFBQSxVQUFnRTtBQUFBLGFBQVQseUNBQWtCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQVE7QUFBQSxLQUE2QjtBQUFBLE9BQUF3SCxjRHJrQjdJO0FBQUEsR0Nza0JFO0FBQUE7QUFBQSxjQUFBdkk7QUFBQUEsTUFBNEI7QUFBQTtBQUFBO0FBQUEsc0JBQUF1RyxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBeEYsSUFBQSxVQUEwRDtBQUFBLGFBQU0sb0NBQXNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQTVCO0FBQUEsS0FBNEI7QUFBQSxPQUFBeUgsZUR0a0JwSTtBQUFBLEdDdWtCRTtBQUFBO0FBQUEsY0FBQXhJO0FBQUFBLE1BQThCO0FBQUE7QUFBQTtBQUFBLHNCQUFBdUcsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBL0csSUFBQSxNQUFBdUIsSUFBQSxVQUFpRTtBQUFBLGFBQU0sdUNBQTBDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQTlCO0FBQUEsS0FBOEI7QUFBQSxPQUFBMEgsY0R2a0JqSjtBQUFBLEdDd2tCRTtBQUFBO0FBQUEsY0FBQXpJO0FBQUFBLE1BQTZCO0FBQUE7QUFBQTtBQUFBLHNCQUFBdUcsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGlCQUFBL0csSUFBQSxNQUFBdUIsSUFBQSxVQUFnRTtBQUFBLGFBQU0sdUNBQXlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQTdCO0FBQUEsS0FBNkI7QUFBQSxPQUFBMkgsaUJEeGtCOUk7QUFBQSxHQ3lrQkU7QUFBQTtBQUFBLGNBQUExSTtBQUFBQSxNQUErQjtBQUFBLFdBQUF1RyxJQUFBLGFBQXVDO0FBQUEsT0FBWix1Q0FBbUI7QUFBQTtBQUFBLE1BQVE7QUFBQSxLQUErQjtBQUFBLE9BQUFvQyxnQkR6a0J0SDtBQUFBLEdDMGtCRTtBQUFBO0FBQUEsY0FBQTNJO0FBQUFBLE1BQThCO0FBQUE7QUFBQTtBQUFBLFlBQUFZLElBQUEsTUFBQWdHLElBQUE7QUFBQSxRQUEwQix1Q0FBOEQ7QUFBQTtBQUFBO0FBQUEsTUFBOUI7QUFBQSxLQUE4QjtBQUFBLE9BQUFnQyxrQkQxa0J4SDtBQUFBLEdDNmtCRTtBQUFBO0FBQUEsY0FBQTVJO0FBQUFBO0FBQUFBLE1BQUE7QUFBQSxXQUFBUixJQUFnQztBQUFBO0FBQUE7QUFBQSxZQUFBc0IsSUFBQTtBQUFBLFFBQThCO0FBQUE7QUFBQSxPQUE5QixjQUF1RCxzQ0FBbUI7QUFBQTtBQUFBLE1BQVE7QUFBQSxLQUFnQztBQUFBLE9BQUErSCxtQkQ3a0JwSjtBQUFBLEdDOGtCRTtBQUFBO0FBQUEsY0FBQTdJO0FBQUFBLE1BQWlDO0FBQUE7QUFBQSxnRUFBQWMsSUFBQSxNQUE4QjtBQUFBO0FBQUEsTUFBaUI7QUFBQSxLQUFpQztBQUFBLE9BQUFnSSxtQkQ5a0JuSDtBQUFBLEdDK2tCRTtBQUFBO0FBQUEsY0FBQTlJO0FBQUFBLE1BQWlDO0FBQUE7QUFBQSxnRUFBQWUsSUFBQSxNQUErQjtBQUFBO0FBQUEsTUFBZ0I7QUFBQSxLQUFpQztBQUFBLE9BQUFnSSxrQkQva0JuSDtBQUFBLEdDZ2xCRTtBQUFBO0FBQUEsY0FBQS9JO0FBQUFBLE1BQWdDO0FBQUE7QUFBQSxnRUFBQWMsSUFBQSxNQUE4QjtBQUFBO0FBQUEsTUFBZ0I7QUFBQSxLQUFnQztBQUFBLE9BQUFrSSxRRGhsQmhILFFDZ2xCaUg7QUFBQSxHQUcvRztBQUFBO0FBQUEsY0FBQWhKO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDZCQUFBaUosSUFBQSxNQUFpQztBQUFBO0FBQUEsV0FBakMsa0JBQUE5RyxNQUFBLE1BQWlFO0FBQUE7QUFBQTtBQUFBLE1BQXVCO0FBQUEsS0FBUztBQUFBLEdBQ25HO0FBQUE7QUFBQSxjQUFBbkM7QUFBQUEsTUFDRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkJBQUFpSixJQUFBLE1BQWlDO0FBQUE7QUFBQSxXQUFqQyxrQkFBQTlHLElBQUEsTUFBaUU7QUFBQTtBQUFBO0FBQUEsTUFBNEIsOENBQWtCO0FBQUE7QUFBQSxHQUNqSDtBQUFBO0FBQUEsY0FBQW5DO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQUFpSixJQUFBO0FBQUEsWUFDd0I7QUFBQTtBQUFBLHFDQUFBbkksR0FBb0IsY0FBUSxTQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FEakU7QUFBQSxnQkFBQXFCLElBQUE7QUFBQSxZQUVxQjtBQUFBO0FBQUEscUNBQUFyQixHQUFvQixjQUFRLFNBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BQ3ZEO0FBQUEsS0FBRztBQUFBLEdBQ1o7QUFBQTtBQUFBLGNBQUFkO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDZCQUFBaUosSUFBQSxNQUFpQztBQUFBO0FBQUEsV0FBakMsa0JBQUE5RyxJQUFBLE1BQTBEO0FBQUE7QUFBQTtBQUFBLE1BQWdCO0FBQUEsS0FBRztBQUFBO0FBQUEsSUFBQStHLDZCRDdsQmpGO0FBQUEsUUM2bEJrRjtBQUFBLElBQUFDO0FBQUFBLE1BQUE7QUFBQTtBQUFBLGdCQUFBbko7QUFBQUEsUUFFOUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtCQUFBaUosSUFBQSxNQUFpQztBQUFBO0FBQUEsYUFBakMsa0JBQUE5RyxJQUFBLE1BQXVFO0FBQUE7QUFBQTtBQUFBLFFBQTZCO0FBQUEsT0FBVTtBQUFBLEdBQ3pHO0FBQUE7QUFBQSxHQUNBO0FBQUE7QUFBQSxXQUNQO0FBQUE7QUFBQTtBQUFBLGNBQUFuQztBQUFBQSxNQUNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBQWlKLElBQUEsTUFBaUM7QUFBQTtBQUFBLFdBQWpDLGNBQXFFO0FBQUE7QUFBQTtBQUFBLE1BQXVCO0FBQUEsS0FBYTtBQUFBLEdBQzNHLHVDQUFBcEcsT0FBdUMsU0FBRztBQUFBLEdBQzFDLDRDQUFBQSxPQUE0QyxTQUFHO0FBQUEsT0FBQXVHLHFCRHJtQmpEO0FBQUEsR0N3bUJFO0FBQUE7QUFBQSxjQUFBcEo7QUFBQUEsTUFBbUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUFlLElBQUEsTUFBQXdGLElBQUEsTUFBQTBDLElBQUE7QUFBQSxTQUE2QixvQ0FBc0U7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFuQztBQUFBO0FBQUEsS0FBbUM7QUFBQSxPQUFBSSxlRHhtQnhJO0FBQUEsR0N5bUJFO0FBQUE7QUFBQSxjQUFBcko7QUFBQUEsTUFBNkIsMEJBQUFjLElBQUEsU0FBdUIsK0JBQXNEO0FBQUEsTUFBN0I7QUFBQSxLQUE2QjtBQUFBLE9BQUF3SSxnQkR6bUI1RztBQUFBLEdDMG1CRTtBQUFBO0FBQUEsY0FBQXRKO0FBQUFBLE1BQThCLDBCQUFBYyxJQUFBLFNBQXVCLCtCQUF3RDtBQUFBLE1BQTlCO0FBQUEsS0FBOEI7QUFBQSxPQUFBeUksZ0JEMW1CL0c7QUFBQSxHQzJtQkU7QUFBQTtBQUFBLGNBQUF2SjtBQUFBQSxNQUE4QiwwQkFBQWMsSUFBQSxTQUF1QiwrQkFBd0Q7QUFBQSxNQUE5QjtBQUFBLEtBQThCO0FBQUEsT0FBQTBJLG1CRDNtQi9HO0FBQUEsR0M0bUJFO0FBQUE7QUFBQSxjQUFBeEo7QUFBQUEsTUFBa0MsMEJBQUFjLElBQUEsU0FBdUIsOEJBQWlFO0FBQUEsTUFBbEM7QUFBQSxLQUFrQztBQUFBLE9BQUEySSxlRDVtQjVIO0FBQUEsR0M2bUJFO0FBQUE7QUFBQSxjQUFBeko7QUFBQUEsTUFBNkIsMEJBQUFjLElBQUEsU0FBdUIsK0JBQXNEO0FBQUEsTUFBN0I7QUFBQSxLQUE2QjtBQUFBLE9BQUE0SSxpQkQ3bUI1RztBQUFBLEdDOG1CRTtBQUFBO0FBQUEsY0FBQTFKO0FBQUFBLE1BQStCLDBCQUFBdEMsSUFBQSxTQUF1QiwrQkFBMEQ7QUFBQSxNQUEvQjtBQUFBLEtBQStCO0FBQUEsT0FBQWlNLGFEOW1CbEg7QUFBQSxHQ2luQlM7QUFBQSxPQUFBQyx1QkRqbkJUO0FBQUEsR0NrbkJTO0FBQUEsR0FDUDtBQUFBO0FBQUEsY0FBQTVKO0FBQUFBLE1BQWdDO0FBQUEsV0FBQVIsSUFBQTtBQUFBLE9BQXVCO0FBQUEsT0FBZ0M7QUFBQSxPQUFtQztBQUFBO0FBQUEsTUFBVztBQUFBLEtBQUc7QUFBQSxHQUN4STtBQUFBO0FBQUEsY0FBQVE7QUFBQUEsTUFBMEM7QUFBQSxXQUFBUixJQUFBO0FBQUEsT0FBdUI7QUFBQSxPQUEwQztBQUFBLE9BQTZDO0FBQUE7QUFBQSxNQUFXO0FBQUEsS0FBRztBQUFBLEdBQ3RLO0FBQUE7QUFBQSxjQUFBUTtBQUFBQSxNQUF3QztBQUFBO0FBQUE7QUFBQSxZQUFBNkosSUFBQSxNQUFBckssSUFBQTtBQUFBLFFBQTBCLGtDQUEwQztBQUFBO0FBQUE7QUFBQSxNQUFIO0FBQUEsS0FBRztBQUFBLE9BQUFzSyxZRHJuQjlHO0FBQUEsR0N3bkJFO0FBQUE7QUFBQSxjQUFBOUo7QUFBQUEsTUFDRTtBQUFBLE9BSU87QUFBQTtBQUFBLE9BQUF5SCxPQUpQO0FBQUEsT0FBQS9KLElBQUE7QUFBQSxPQUFBaUMsUUFFdUI7QUFBQSxNQUFhO0FBQUEsV0FBQUEsVUFBQTtBQUFBO0FBQUEsWUFBQW9LLFdBQUE7QUFBQTtBQUFBO0FBQUEsU0FBQUMsU0FBQTtBQUFBLFNBQUFDLE9BQUE7QUFBQSxhQUE2QjtBQUFBLFNBQUFGLFdBQUE7QUFBQTtBQUFBO0FBQUEsV0FBQUEsV0FBN0I7QUFBQSxNQUNsQyw0Q0FDK0I7QUFBQTtBQUFBLE9BQUFHLG1CRDduQnJDO0FBQUEsR0Nzb0JFO0FBQUE7QUFBQSxjQUFBbEs7QUFBQUEsTUFBa0M7QUFBQTtBQUFBO0FBQUEsWUFBQVIsSUFBQSxNQUFBcUIsSUFBQTtBQUFBLFFBQTBCLHVDQUFxRTtBQUFBO0FBQUE7QUFBQSxNQUFsQztBQUFBLEtBQWtDO0FBQUEsT0FBQXNKLGtCRHRvQm5JO0FBQUEsR0N1b0JFO0FBQUE7QUFBQSxjQUFBbks7QUFBQUEsTUFBaUM7QUFBQSxXQUFBYSxJQUFBO0FBQUEsT0FBdUIsb0NBQWlFO0FBQUE7QUFBQSxNQUFqQztBQUFBLEtBQWlDO0FBQUEsR0FNekg7QUFBQTtBQUFBLGNBQUFiO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUF5SCxPQUFBO0FBQUEsU0FBc0MseURBQXlEO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBSDtBQUFBLEtBQUc7QUFBQSxHQUNqRztBQUFBO0FBQUEsY0FBQXpIO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUF5SCxPQUFBO0FBQUEsU0FBc0MseURBQTJEO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBSDtBQUFBLEtBQUc7QUFBQSxHQUNuRztBQUFBO0FBQUEsY0FBQXpIO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUF5SCxPQUFBO0FBQUEsU0FBc0MseURBQTBEO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFBSDtBQUFBLEtBQUc7QUFBQSxHQUdsRztBQUFBO0FBQUEsY0FBQXpIO0FBQUFBO0FBQUFBLE9BQUE7QUFBQSxTQUM0QjtBQUFBO0FBQUEsb0JBQUE0RztBQUFBQSxZQUN4QiwwQkFBZ0Q7QUFBQSxZQUFoRDtBQUFBO0FBQUEsZUFDWSwwREFDWTtBQUFBO0FBQUE7QUFBQSxtQkFBQTlGLElBRnhCLE1BQXFDO0FBQUEsdUJBRTlCLGlDQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSGxCLGtEQUcwQjtBQUFBO0FBQUEsR0FDcEM7QUFBQTtBQUFBLGNBQUFkO0FBQUFBO0FBQUFBLE9BQUE7QUFBQSxTQUM0QjtBQUFBO0FBQUEsb0JBQUE0RztBQUFBQSxZQUN4QjtBQUFBLDhDQUFBOUYsSUFBQSxNQUFxQztBQUFBLFlBQVMsaUNBQWlCO0FBQUE7QUFBQTtBQUFBLE1BRHpELGtEQUNpRTtBQUFBO0FBQUEsR0FFM0Usb0NBQUErQixPQUFvQyxTQUFHO0FBQUEsR0FHdkM7QUFBQSxHQUNBLG9DQUFBQSxPQUFvQyxTQUFHO0FBQUEsV0FBQztBQUFBLEdBQ3hDLGdDQUFBQSxPQUFnQyxTQUFTO0FBQUEsV0FBQztBQUFBLEdBQzFDO0FBQUE7QUFBQSxjQUFBN0M7QUFBQUEsTUFBaUM7QUFBQTtBQUFBO0FBQUEsWUFBQWMsSUFBQTtBQUFBLFFBQW1DLHNDQUF5QjtBQUFBO0FBQUE7QUFBQSxNQUFRO0FBQUEsS0FBVTtBQUFBO0FBQUEsSUFBQXNKO0FBQUFBLE1BRzFGO0FBQUEsMkNBQUF0SixHQUFvQixjQUFRO0FBQUEsSUFBQXVKO0FBQUFBLE1BQ3hCO0FBQUEsMkNBQUF2SixHQUFvQixjQUFRO0FBQUEsSUFBQXdKO0FBQUFBLE1BQzVCO0FBQUEsMkNBQUF4SixHQUFvQixjQUFRO0FBQUEsR0FDOUM7QUFBQSxHQUNBO0FBQUEsR0FDQTtBQUFBLFlBQUF5SixjQUFBQyxVQUFBMUg7QUFBQUEsUUFBQTlDLE9BT007QUFBQSxhQUFBeUssUUFBQTVIO0FBQUFBLEtBQ08sWUFDUjtBQUFBLFNBQUE2SCxLQURRO0FBQUE7QUFBQSxVQUFBL0ssUUFBQTtBQUFBLGtCQU9kO0FBQUEsVUFBQThILFNBUGMsVUFBQWtELFFBQUEsY0FJc0I7QUFBQSxNQUE5QiwwREFBMEI7QUFBQTtBQUFBLFNBQUFsRCxPQUpsQixjQVVlO0FBQUEsS0FBN0IsOENBQXlCO0FBQUEsSUFBZ0I7QUFBQSxJQUU3QyxvQkFBWTtBQUFBO0FBQUEsR0FFZDtBQUFBO0FBQUEsY0FBQXJGO0FBQUFBO0FBQUFBLE9BQUE7QUFBQSxTQUVlO0FBQUE7QUFBQSxtQkFBQXdJO0FBQUFBLFdBQ1Q7QUFBQTtBQUFBO0FBQUEsaUJBQUE5SCxNQUFBLE1BQUEwSCxXQUFBO0FBQUEsYUFDeUMsdURBQTBCO0FBQUE7QUFBQTtBQUFBLFdBQzVEO0FBQUEsVUFBRztBQUFBLE1BSlA7QUFBQSxNQUlVO0FBQUE7QUFBQTtBQUFBLFdBQ0U7QUFBQSxHQUdyQjtBQUFBO0FBQUEsY0FBQXhLO0FBQUFBLE1BQ0U7QUFBQSxXQUFBTCxRQUFBLFNBQUF5SCxRQUFBO0FBQUE7QUFBQTtBQUFBLGFBQUFjLElBS2U7QUFBQTtBQUFBO0FBQUEsY0FBQTNHO0FBQUFBLGFBQUFBLFFEanRCbkI7QUFBQTtBQUFBO0FBQUEsYUFBQUMsUUFBQTtBQUFBLFNDbXRCOEI7QUFBQTtBQUFBLE9BUDFCO0FBQUEsWUFBQXFKLFVBQUE7QUFBQSxRQUVFLFlBQUs7QUFBQSxjQUFBdEo7QUFBQUEsYUFBQUEsTUQ5c0JYO0FBQUE7QUFBQSxhQUFBQyxNQUFBO0FBQUEsU0Mrc0I4Qiw2REFLaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFIO0FBQUEsS0FBRztBQUFBLEdBR1o7QUFBQTtBQUFBLGNBQUF4QjtBQUFBQSxNQUNFO0FBQUEsV0FBQUwsUUFBQSxTQUFBK0QsT0FBQTtBQUFBLG1CQUFpRSxxREFBaUQ7QUFBQSxPQUFsSDtBQUFBLFlBQUE2QyxJQUFBO0FBQUEsUUFBNkIsc0NBQXFGO0FBQUE7QUFBQTtBQUFBLE1BQUg7QUFBQSxLQUFHO0FBQUEsR0FDcEg7QUFBQTtBQUFBLGNBQUF2RztBQUFBQSxNQUErQjtBQUFBLFdBQUFSLElBQUE7QUFBQSxPQUF1Qix5Q0FBNkM7QUFBQTtBQUFBLE1BQUg7QUFBQSxLQUFHO0FBQUEsR0FDbkc7QUFBQTtBQUFBLGNBQUFRO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUEsWUFBQUwsUUFBQSxNQUFBbUwsTUFBQSxNQUFBQyxNQUFBO0FBQUEsb0JBQXlGLHdEQUF1RDtBQUFBLGdCQUFoSjtBQUFBO0FBQUEsYUFBQXhFLElBQUE7QUFBQSxTQUFxQywrQ0FBMkc7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFIO0FBQUEsS0FBRztBQUFBLEdBQ2xKO0FBQUE7QUFBQSxjQUFBdkc7QUFBQUE7QUFBQUEsTUFBQTtBQUFBLGVBQ0U7QUFBQTtBQUFBLHNCQUFBNEcsSUFBQSxNQUFBbEosSUFBQTtBQUFBO0FBQUEsUUFDMEIsK0JBSXhCLG1DQUM4RDtBQUFBO0FBQUE7QUFBQSxNQUF6RDtBQUFBO0FBQUEsS0FBeUQ7QUFBQSxHQUNsRTtBQUFBO0FBQUEsY0FBQXNDO0FBQUFBLE1BQ0U7QUFBQTtBQUFBO0FBQUEsWUFBQTRHLElBQUEsTUFBQWxKLElBQUE7QUFBQSxRQUNjO0FBQUE7QUFBQSxjQUc4QztBQUFBLGNBQTlCO0FBQUEsU0FBd0M7QUFBQTtBQUFBLFFBRnBFO0FBQUEsYUFBQW1KLFdBQWlEO0FBQUE7QUFBQSxhQUFBVCxJQUFqRCxNQUFBUyxXQUFzQztBQUFBO0FBQUEsYUFBQUEsV0FBcUI7QUFBQSxnQkFDekM7QUFBQSxRQUErQiw4QkFFSztBQUFBO0FBQUE7QUFBQSxNQUFqRDtBQUFBO0FBQUEsS0FBaUQ7QUFBQSxHQUMxRDtBQUFBO0FBQUEsY0FBQTdHO0FBQUFBLE1BQ0U7QUFBQSxXQUFBTCxRQUFBLFNBQUErRCxPQUFBO0FBQUEsbUJBQTBCLHFEQUF3RjtBQUFBLE9BQWxIO0FBQUEsWUFBQTZDLElBQUE7QUFBQSxRQUFnRixzQ0FBa0M7QUFBQTtBQUFBO0FBQUEsTUFBSDtBQUFBLEtBQUc7QUFBQSxHQUNwSDtBQUFBO0FBQUEsY0FBQXZHO0FBQUFBLE1BQ0U7QUFBQSxXQUFBTCxRQUFBLFNBQUFxTCxXQUFBO0FBQUEsbUJBQThCLHdEQUE4RztBQUFBLGVBQTVJO0FBQUE7QUFBQSxZQUFBekUsSUFBQTtBQUFBLFFBQWdHLCtDQUE0QztBQUFBO0FBQUE7QUFBQSxNQUFIO0FBQUEsS0FBRztBQUFBLFdBQUM7QUFBQSxHQUcvSTtBQUFBO0FBQUEsY0FBQXZHO0FBQUFBLE1BQTJCO0FBQUE7QUFBQSw2REFBNkI7QUFBQTtBQUFBLE1BQWlCO0FBQUEsS0FBVTtBQUFBLEdBQ25GO0FBQUE7QUFBQSxjQUFBQTtBQUFBQSxNQUErQjtBQUFBLFdBQUFSLElBQUE7QUFBQSxPQUF1QixpQ0FBdUI7QUFBQTtBQUFBLE1BQUg7QUFBQSxLQUFHO0FBQUEsR0FDN0U7QUFBQTtBQUFBLGNBQUFRO0FBQUFBLE1BQThCO0FBQUEsV0FBQVIsSUFBQTtBQUFBLE9BQXVCLGlDQUFzQjtBQUFBO0FBQUEsTUFBSDtBQUFBLEtBQUc7QUFBQSxXQUFDO0FBQUEsR0FDNUU7QUFBQTtBQUFBLGNBQUFRO0FBQUFBLE1BQTRCO0FBQUE7QUFBQSw0REFBOEI7QUFBQTtBQUFBLE1BQWlCO0FBQUEsS0FBVTtBQUFBLFdBQUM7QUFBQSxHQUN0RjtBQUFBO0FBQUEsY0FBQUE7QUFBQUEsTUFBMkI7QUFBQTtBQUFBLDZEQUE2QjtBQUFBO0FBQUEsTUFBaUI7QUFBQSxLQUFVO0FBQUEsV0FBQztBQUFBLEdBQ3BGO0FBQUE7QUFBQSxjQUFBQTtBQUFBQSxNQUE0QjtBQUFBO0FBQUEsNERBQThCO0FBQUE7QUFBQSxNQUFpQjtBQUFBLEtBQVU7QUFBQSxXQUFDO0FBQUEsR0FDdEY7QUFBQTtBQUFBLGNBQUFBO0FBQUFBLE1BQStCO0FBQUE7QUFBQSxvRUFBOEM7QUFBQTtBQUFBLE1BQWlCO0FBQUEsS0FBVTtBQUFBLFdBQUM7QUFBQSxHQUN6RztBQUFBO0FBQUEsY0FBQUE7QUFBQUEsTUFBOEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHlCQUEwRTtBQUFBO0FBQUE7QUFBQSxNQUFpQjtBQUFBLEtBQVU7QUFBQSxXQUFDO0FBQUEsR0FDcEk7QUFBQTtBQUFBLGNBQUFBO0FBQUFBLE1BQTRCO0FBQUE7QUFBQSw2REFBOEI7QUFBQTtBQUFBLE1BQWlCO0FBQUEsS0FBVTtBQUFBLFdBQUM7QUFBQSxHQUN0RjtBQUFBO0FBQUEsY0FBQUE7QUFBQUEsTUFBa0M7QUFBQTtBQUFBLDZEQUFvQztBQUFBO0FBQUEsTUFBaUI7QUFBQSxLQUFVO0FBQUEsV0FBQztBQUFBLEdBQ2xHO0FBQUE7QUFBQSxjQUFBQTtBQUFBQSxNQUFrQztBQUFBO0FBQUE7QUFBQSxZQUFBb0csSUFBQTtBQUFBLFFBQW1DO0FBQUEsb0RBQUF0RixHQUFvQixjQUFRLFNBQWE7QUFBQTtBQUFBO0FBQUEsTUFBUTtBQUFBLEtBQU87QUFBQSxHQUM3SDtBQUFBO0FBQUEsY0FBQWQ7QUFBQUEsTUFBZ0M7QUFBQTtBQUFBLGdFQUFBb0csSUFBQSxNQUE4QjtBQUFBO0FBQUEsTUFBZ0I7QUFBQSxLQUFHO0FBQUEsR0FDakY7QUFBQTtBQUFBLGNBQUFwRztBQUFBQSxNQUFtQztBQUFBO0FBQUEsZ0VBQUFvRyxJQUFBLE1BQThCO0FBQUE7QUFBQSxNQUE0Qiw4Q0FBa0I7QUFBQTtBQUFBLEdBRy9HO0FBQUE7QUFBQSxjQUFBcEc7QUFBQUEsTUFDRTtBQUFBO0FBQUE7QUFBQSxZQUFBaUwsUUFBQSxNQUFBaEssSUFBMEM7QUFBQSxRQUFvQjtBQUFBO0FBQUEsbUJBQUE0QjtBQUFBQSxlQUFBckQsSUFBVSxVQUFBdUIsSUFBQTtBQUFBLFdBQWUsNkNBQXNCO0FBQUE7QUFBQTtBQUFBLFFBQU07QUFBQTtBQUFBO0FBQUEsTUFBcUIsOENBQWtCO0FBQUE7QUFBQSxHQUM1SjtBQUFBO0FBQUEsY0FBQWY7QUFBQUEsTUFDRTtBQUFBO0FBQUE7QUFBQSxZQUFBaUIsSUFBQTtBQUFBLFFBQW1DO0FBQUE7QUFBQTtBQUFBLDJCQUFBRixHQUFBdkIsR0FBQWlFLEtBQThCLDJCQUFhO0FBQUE7QUFBQSxxQkFBTztBQUFBO0FBQUE7QUFBQSxNQUFRO0FBQUEsS0FBRztBQUFBLEdBQ2xHO0FBQUE7QUFBQSxjQUFBekQ7QUFBQUE7QUFBQUEsTUFBQTtBQUFBLFdBQUFSLElBQWtDO0FBQUE7QUFBQTtBQUFBLFlBQUFzQixJQUFBO0FBQUEsUUFBOEI7QUFBQTtBQUFBLE9BQTlCLGNBQXlELHVDQUFtQjtBQUFBO0FBQUEsTUFBUTtBQUFBLEtBQUc7QUFBQSxXQUFDO0FBQUEsR0FDMUg7QUFBQTtBQUFBLGNBQUFkO0FBQUFBLE1BQXFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBQWMsSUFBQSxNQUF3RDtBQUFBO0FBQUEsV0FBeEQsa0JBQUFBLE1BQUEsTUFBK0I7QUFBQTtBQUFBO0FBQUEsTUFBeUM7QUFBQSxLQUFTO0FBQUEsV0FBQztBQUFBLEdBQ3ZIO0FBQUE7QUFBQSxjQUFBZDtBQUFBQSxNQUFnQztBQUFBO0FBQUE7QUFBQSxZQUFBaUIsSUFBQTtBQUFBLFFBQWtDLDBEQUFnQjtBQUFBO0FBQUE7QUFBQSxNQUFhO0FBQUEsS0FBUztBQUFBLE9BQUFpSyxnQkR0d0IxRztBQUFBLEdDdXdCRTtBQUFBO0FBQUEsY0FBQWxMO0FBQUFBLE1BQStCO0FBQUE7QUFBQTtBQUFBLFlBQUFZLElBQUEsTUFBQWdHLElBQUE7QUFBQSxRQUEwQjtBQUFBO0FBQUE7QUFBQSxNQUFxQjtBQUFBLEtBQStCO0FBQUEsR0FDN0c7QUFBQTtBQUFBLGNBQUE1RztBQUFBQTtBQUFBQSxNQUFBO0FBQUEsZUFDRTtBQUFBO0FBQUEsc0JBQUFtTCxTQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsa0NBQUFuSyxRQUFBO0FBQUE7QUFBQSxtREFBQUEsUUFBQTtBQUFBO0FBQUE7QUFBQSxTQUVFO0FBQUE7QUFBQSxvQkFBQW1CLEdBQUFpSjtBQUFBQSxZQUNTO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFBa0Y7QUFBQTtBQUFBO0FBQUEsU0FDcEY7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUNGO0FBQUEsS0FBRztBQUFBLE9BQUFDLG1CRDl3QmQ7QUFBQSxHQ2l4QkU7QUFBQTtBQUFBLGNBQUFyTDtBQUFBQSxNQUFpQztBQUFBO0FBQUEsZ0VBQUFjLElBQUEsTUFBOEI7QUFBQTtBQUFBLE1BQWdCO0FBQUEsS0FBaUM7QUFBQSxPQUFBd0sscUJEanhCbEg7QUFBQSxHQ2t4QkU7QUFBQTtBQUFBLGNBQUF0TDtBQUFBQSxNQUFtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkJBQUFjLElBQUEsTUFBdUQ7QUFBQTtBQUFBLFdBQXZELGtCQUFBQSxNQUFBLE1BQThCO0FBQUE7QUFBQTtBQUFBLE1BQXlDO0FBQUE7QUFBQSxLQUFtQztBQUFBLEdBQzdJO0FBQUE7QUFBQSxjQUFBZDtBQUFBQTtBQUFBQSxNQUFBO0FBQUEsZUFDRTtBQUFBO0FBQUE7QUFBQTtBQUFBLDRCQUFBYSxJQUFBO0FBQUE7QUFBQSxXQUd1Qyx1Q0FBZTtBQUFBO0FBQUEsZUFBQWxCLFFBSHRELFNBQUFtQixJQUFBO0FBQUE7QUFBQSx3QkFDMEM7QUFBQSxrQkFBQVMsS0FBNkI7QUFBQSxXQUR2RTtBQUFBLGVBQUFnSyxnQkFBQTtBQUFBLFdBRTZCLFlBQTBCO0FBQUEsaUJBQUFoSyxLQUE2QjtBQUFBO0FBQUEsZUFGcEY7QUFBQSwyQkFBQWdLLGNBQUEsTUFJc0I7QUFBQTtBQUFBLE1BQW1CO0FBQUEsS0FBRztBQUFBLEdBQzlDO0FBQUE7QUFBQSxjQUFBdkw7QUFBQUEsTUFBaUM7QUFBQTtBQUFBO0FBQUEsWUFBQWMsSUFBQTtBQUFBLFFBQThCLFlBQVk7QUFBQSxjQUFBUyxLQUE4QjtBQUFBO0FBQUE7QUFBQSxNQUFZO0FBQUEsS0FBRztBQUFBLEdBR3hILHVCQUFBc0IsT0FBdUIsU0FBRztBQUFBLEdBQzFCLHdCQUFBQSxPQUF3QixTQUFHO0FBQUEsR0FDM0I7QUFBQTtBQUFBLGNBQUE3QztBQUFBQSxNQUFnQyw4Q0FBQWlCLElBQUEsTUFBMEI7QUFBQSxNQUFTO0FBQUEsS0FBRztBQUFBLFdBQUM7QUFBQSxHQUN2RSxnQ0FBQTRCLE9BQWdDLFNBQVk7QUFBQSxHQUM1QyxxQkFBQUEsT0FBcUIsU0FBRztBQUFBLEdBQ3hCLHdCQUFBQSxPQUF3QixTQUFHO0FBQUE7QUFBQSxJQUFBMkksU0RqeUI3QjtBQUFBLElBQUFDLGFBQUE7QUFBQSxJQUFBQyxVQUFBO0FBQUEsSUFBQTFDLFFBQUE7QUFBQSxJQUFBQSxNQUFBO0FBQUEsSUFBQTJDLGVBQUE7QUFBQSxJQUFBQztBQUFBQSxNQUFBO0FBQUEsSUFBQUMsZ0JDaXlCOEI7QUFBQSxJQUFBQyxjQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQXBPLEdBQUFzQztBQUFBQSxNQWdCMUI7QUFBQSxXQUFBb0csSUFBQTtBQUFBLE9BQ2dCO0FBQUEsWUFBQXpHLFFBQ2QsTUFBQXFKLE1EbnpCTjtBQUFBLFFDbXpCTTtBQUFBLGFBQUErQyxLQUFBO0FBQUEsU0FDb0IsNEJBWVA7QUFBQSxTQVorQjtBQUFBLGtCQUMvQjtBQUFBO0FBQUE7QUFBQSxlQUFBeEs7QUFBQUEsY0FBQUEsTURyekJuQjtBQUFBO0FBQUE7QUFBQSxjQUFBQyxNQUFBLFFBQUE3QixVQ3V6Qlk7QUFBQSwwQkFBQWtCLElBQUEsWUFBQW1MLFVBQTRDLFlBQUFBLFVBQTVDO0FBQUE7QUFBQSxlQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJK0I7QUFBQSxVQUcvQjtBQUFBO0FBQUE7QUFBQSxRQUdILHFCQUF3QjtBQUFBLFFBQ25CO0FBQUEsWUFBQUMsV0FFWTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLGVBYVU7QUFBQSxZQUFBRixPQWJWO0FBQUEsUUFFRTtBQUFBLFFBQ0E7QUFBQSxpQkFBVTtBQUFBO0FBQUE7QUFBQSxjQUFBeEs7QUFBQUEsYUFBQUEsUUQxMEJ2QjtBQUFBO0FBQUE7QUFBQSxhQUFBQyxRQUFBLFVBQUE3QixVQzQwQmdCO0FBQUE7QUFBQSxjQUFBa0IsTUFBQSxZQUFBcUwsV0FBNkM7QUFBQTtBQUFBLGNBQUFBLFdBQTdDO0FBQUE7QUFBQSxjQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FJK0I7QUFBQSxTQUUvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BR0w7QUFBQSxLQUFJO0FBQUEsT0FBQUMsaUJEdDFCZjtBQUFBLEdDdzFCZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FBQXRKLE9BQXNFLG9CQUFzQixTQUFHO0FBQUEsWUFBQXVKLEtBQUFyTTtBQUFBQSxJQVV2RixPQUZSO0FBQUEsYURoMkJoQjtBQUFBLGNBQUE7QUFBQSxzQkFBQTtBQUFBLGNBQUEsNERBQUEsQ0FBQSxDQUFBO0FBQUEsWUFBQTtBQUFBLFlDZzJCZ0IsQ0FFUSwwQkFBd0I7QUFBQTtBQUFBLE9BQUFzTSxLQUhyQztBQUFBLEdBSzRCO0FBQUEsR0FDSTtBQUFBLEdBQ0w7QUFBQSxHQUNFO0FBQUEsR0FDRTtBQUFBLEdBQ0k7QUFBQSxHQUNSO0FBQUEsR0FDTTtBQUFBLE9BQUFDLFdBNXBCb0I7QUFBQSxHQTZwQmY7QUFBQTtBQUFBLGVBQUF6SjtBQUFBQSxPQXhqQi9DO0FBQUEsT0FDQTtBQUFBO0FBQUEsa0JBQUFwRCxJQUFBRDtBQUFBQSxjQUFBLElBQXNEO0FBQUEsVUFBYSxzREFBRTtBQUFBO0FBQUE7QUFBQSxPQUFxQjtBQUFBLE9BRTFGO0FBQUEsTUFxakJvRztBQUFBLEdBQ3ZEO0FBQUE7QUFBQSxlQUFBcUQ7QUFBQUEsT0FuakI3QztBQUFBLFFBRUU7QUFBQTtBQUFBLG1CQUFBOUIsR0FBQXZCO0FBQUFBLGVBQUEsSUFDc0M7QUFBQSxXQUFVLHlEQUFFO0FBQUE7QUFBQTtBQUFBLFFBQ3JDO0FBQUE7QUFBQSxPQUdmO0FBQUEsTUE0aUJnRztBQUFBLEdBQ25EO0FBQUEsR0FDUDtBQUFBLEdBQ0M7QUFBQSxHQUNEO0FBQUEsR0FDUTtBQUFBLEdBQ0o7QUFBQSxHQUNKO0FBQUEsR0FDSTtBQUFBLEdBQ0g7QUFBQSxHQUNDO0FBQUEsR0FHSTtBQUFBO0FBQUEsZUFBQXFELE9BQzFDLDJCQUE4Qix5QkFBMEI7QUFBQSxHQUNiO0FBQUE7QUFBQSxlQUFBQSxPQUMzQywyQkFBK0IseUJBQTBCO0FBQUEsR0FDWjtBQUFBO0FBQUEsZUFBQUE7QUFBQUE7QUFBQUEsUUFBQTBKLE1BQ25DO0FBQUEsWUFDZ0M7QUFBQSxPQUFmLE9BQVYsbUJBQVUsK0JBQXlFO0FBQUE7QUFBQSxHQUV0RztBQUFBLEdBQXdEO0FBQUE7QUFBQSxFRGw0QjFEIiwiaWdub3JlTGlzdCI6WzBdfX0seyJvZmZzZXQiOnsibGluZSI6NDI0OTksImNvbHVtbiI6MH0sIm1hcCI6eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkX2V4aXQuY21vLmpzIiwic291cmNlcyI6WyIvYnVpbHRpbi9ibGFja2JveC5tbCIsIi9yb290Ly5vcGFtLzUuMi4wL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJzb3VyY2VzQ29udGVudCI6WyIoKiBnZW5lcmF0ZWQgY29kZSAqKSIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJjYW1sX2NhbGwxIiwiZiIsImEwIiwiU3RkbGliIl0sIm1hcHBpbmdzIjoiT0FBQUEsVUFBQTtBQUFBLFlBQUFDLFdBQUFDLEdBQUFDO0FBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFBQyxTQUFBO0FBQUEsR0NpQlE7QUFBQSxHQUFZO0FBQUE7QUFBQSxFRGpCcEIiLCJpZ25vcmVMaXN0IjpbMF19fV19 diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm new file mode 100644 index 00000000..90fba18c Binary files /dev/null and b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm differ diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm.map b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm.map new file mode 100644 index 00000000..80f5f4f8 --- /dev/null +++ b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-3b0282d1.wasm.map @@ -0,0 +1 @@ +{"version":3,"sections":[{"offset":{"line":0,"column":93045},"map":{"version":3,"sources":["/workspace_root/lib/sx_types.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Core types for the SX language.\n\n The [value] sum type represents every possible SX runtime value.\n OCaml's algebraic types make the CEK machine's frame dispatch a\n pattern match — exactly what the spec describes. *)\n\n(** {1 Symbol interning} *)\n\n(** Map symbol names to small integers for O(1) env lookups.\n The intern table is populated once per unique symbol name;\n all subsequent env operations use the integer key. *)\n\nlet sym_to_id : (string, int) Hashtbl.t = Hashtbl.create 512\nlet id_to_sym : (int, string) Hashtbl.t = Hashtbl.create 512\nlet sym_next = ref 0\n\nlet intern s =\n match Hashtbl.find_opt sym_to_id s with\n | Some id -> id\n | None ->\n let id = !sym_next in\n incr sym_next;\n Hashtbl.replace sym_to_id s id;\n Hashtbl.replace id_to_sym id s;\n id\n\nlet unintern id =\n match Hashtbl.find_opt id_to_sym id with\n | Some s -> s\n | None -> \"\"\n\n\n(** {1 Environment} *)\n\n(** Lexical scope chain. Each frame holds a mutable binding table\n keyed by interned symbol IDs for fast lookup. *)\ntype env = {\n bindings : (int, value) Hashtbl.t;\n parent : env option;\n}\n\n(** {1 Values} *)\n\nand value =\n | Nil\n | Bool of bool\n | Number of float\n | String of string\n | Symbol of string\n | Keyword of string\n | List of value list\n | Dict of dict\n | Lambda of lambda\n | Component of component\n | Island of island\n | Macro of macro\n | Thunk of value * env\n | Continuation of (value -> value) * dict option\n | NativeFn of string * (value list -> value)\n | Signal of signal\n | RawHTML of string\n | Spread of (string * value) list\n | SxExpr of string (** Opaque SX wire-format string — aser output. *)\n | Env of env (** First-class environment — used by CEK machine state dicts. *)\n | ListRef of value list ref (** Mutable list — JS-style array for append! *)\n | CekState of cek_state (** Optimized CEK machine state — avoids Dict allocation. *)\n | CekFrame of cek_frame (** Optimized CEK continuation frame. *)\n | VmClosure of vm_closure (** VM-compiled closure — callable within the VM without allocating a new VM. *)\n\n(** CEK machine state — record instead of Dict for performance.\n 5 fields × 55K steps/sec = 275K Hashtbl allocations/sec eliminated. *)\nand cek_state = {\n cs_control : value;\n cs_env : value;\n cs_kont : value;\n cs_phase : string;\n cs_value : value;\n}\n\n(** CEK continuation frame — tagged record covering all 29 frame types.\n Fields are named generically; not all are used by every frame type.\n Eliminates ~100K Hashtbl allocations per page render. *)\nand cek_frame = {\n cf_type : string; (* frame type tag: \"if\", \"let\", \"call\", etc. *)\n cf_env : value; (* environment — every frame has this *)\n cf_name : value; (* let/define/set/scope: binding name *)\n cf_body : value; (* when/let: body expr *)\n cf_remaining : value; (* begin/cond/map/etc: remaining exprs *)\n cf_f : value; (* call/map/filter/etc: function *)\n cf_args : value; (* call: raw args; arg: evaled args *)\n cf_results : value; (* map/filter/dict: accumulated results *)\n cf_extra : value; (* extra field: scheme, indexed, value, phase, etc. *)\n cf_extra2 : value; (* second extra: emitted, etc. *)\n}\n\n(** Mutable string-keyed table (SX dicts support [dict-set!]). *)\nand dict = (string, value) Hashtbl.t\n\nand lambda = {\n l_params : string list;\n l_body : value;\n l_closure : env;\n mutable l_name : string option;\n mutable l_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand component = {\n c_name : string;\n c_params : string list;\n c_has_children : bool;\n c_body : value;\n c_closure : env;\n c_affinity : string; (** \"auto\" | \"client\" | \"server\" *)\n mutable c_file : string option; (** Source file path *)\n mutable c_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand island = {\n i_name : string;\n i_params : string list;\n i_has_children : bool;\n i_body : value;\n i_closure : env;\n mutable i_file : string option; (** Source file path *)\n}\n\nand macro = {\n m_params : string list;\n m_rest_param : string option;\n m_body : value;\n m_closure : env;\n m_name : string option;\n}\n\nand signal = {\n mutable s_value : value;\n mutable s_subscribers : (unit -> unit) list;\n mutable s_deps : signal list;\n}\n\n(** {1 Bytecode VM types}\n\n Defined here (not in sx_vm.ml) because [vm_code.constants] references\n [value] and [lambda.l_compiled] references [vm_closure] — mutual\n recursion requires all types in one [and] chain. *)\n\n(** Compiled function body — bytecode + constant pool. *)\nand vm_code = {\n vc_arity : int;\n vc_locals : int;\n vc_bytecode : int array;\n vc_constants : value array;\n}\n\n(** Upvalue cell — shared mutable reference to a captured variable. *)\nand vm_upvalue_cell = {\n mutable uv_value : value;\n}\n\n(** Closure — compiled code + captured upvalues + live env reference. *)\nand vm_closure = {\n vm_code : vm_code;\n vm_upvalues : vm_upvalue_cell array;\n vm_name : string option;\n vm_env_ref : (string, value) Hashtbl.t;\n vm_closure_env : env option; (** Original closure env for inner functions *)\n}\n\n\n(** {1 Forward ref for calling VM closures from outside the VM} *)\n\nlet _vm_call_closure_ref : (vm_closure -> value list -> value) ref =\n ref (fun _ _ -> raise (Failure \"VM call_closure not initialized\"))\n\n\n(** {1 Errors} *)\n\nexception Eval_error of string\nexception Parse_error of string\n\n\n(** {1 Environment operations} *)\n\nlet make_env () =\n { bindings = Hashtbl.create 16; parent = None }\n\nlet env_extend parent =\n { bindings = Hashtbl.create 16; parent = Some parent }\n\n(* Optional hook: called after every env_bind with (env, name, value).\n Used by browser kernel to sync VM globals table. *)\nlet _env_bind_hook : (env -> string -> value -> unit) option ref = ref None\n\n(* Optional hook: called after VM GLOBAL_SET writes to vm.globals.\n Used by browser kernel to sync mutations back to global_env. *)\nlet _vm_global_set_hook : (string -> value -> unit) option ref = ref None\n\nlet env_bind env name v =\n Hashtbl.replace env.bindings (intern name) v;\n (match !_env_bind_hook with Some f -> f env name v | None -> ());\n Nil\n\n(* Internal: scope-chain lookup with pre-interned ID *)\nlet rec env_has_id env id =\n Hashtbl.mem env.bindings id ||\n match env.parent with Some p -> env_has_id p id | None -> false\n\nlet env_has env name = env_has_id env (intern name)\n\nlet rec env_get_id env id name =\n match Hashtbl.find_opt env.bindings id with\n | Some v -> v\n | None ->\n match env.parent with\n | Some p -> env_get_id p id name\n | None ->\n raise (Eval_error (\"Undefined symbol: \" ^ name))\n\nlet env_get env name = env_get_id env (intern name) name\n\nlet rec env_set_id env id v =\n if Hashtbl.mem env.bindings id then begin\n Hashtbl.replace env.bindings id v;\n (match !_env_bind_hook with Some f -> f env (unintern id) v | None -> ());\n Nil\n end else\n match env.parent with\n | Some p -> env_set_id p id v\n | None -> Hashtbl.replace env.bindings id v; Nil\n\nlet env_set env name v = env_set_id env (intern name) v\n\nlet env_merge base overlay =\n if base == overlay then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let rec is_descendant e depth =\n if depth > 100 then false\n else if e == base then true\n else match e.parent with Some p -> is_descendant p (depth + 1) | None -> false\n in\n if is_descendant overlay 0 then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let e = { bindings = Hashtbl.create 16; parent = Some base } in\n Hashtbl.iter (fun id v ->\n if not (env_has_id base id) then Hashtbl.replace e.bindings id v\n ) overlay.bindings;\n e\n end\n end\n\n\n(** {1 Value extraction helpers} *)\n\nlet value_to_string = function\n | String s -> s | Symbol s -> s | Keyword k -> k\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Bool true -> \"true\" | Bool false -> \"false\"\n | Nil -> \"\" | _ -> \"\"\n\nlet value_to_string_list = function\n | List items | ListRef { contents = items } -> List.map value_to_string items\n | _ -> []\n\nlet value_to_bool = function\n | Bool b -> b | Nil -> false | _ -> true\n\nlet value_to_string_opt = function\n | String s -> Some s | Symbol s -> Some s | Nil -> None | _ -> None\n\n\n(** {1 Constructors — accept [value] args from transpiled code} *)\n\nlet unwrap_env_val = function\n | Env e -> e\n | _ -> raise (Eval_error \"make_lambda: expected env for closure\")\n\nlet make_lambda params body closure =\n let ps = match params with\n | List items -> List.map value_to_string items\n | _ -> value_to_string_list params\n in\n Lambda { l_params = ps; l_body = body; l_closure = unwrap_env_val closure; l_name = None; l_compiled = None }\n\nlet make_component name params has_children body closure affinity =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n let aff = match affinity with String s -> s | _ -> \"auto\" in\n Component {\n c_name = n; c_params = ps; c_has_children = hc;\n c_body = body; c_closure = unwrap_env_val closure; c_affinity = aff;\n c_file = None; c_compiled = None;\n }\n\nlet make_island name params has_children body closure =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n Island {\n i_name = n; i_params = ps; i_has_children = hc;\n i_body = body; i_closure = unwrap_env_val closure;\n i_file = None;\n }\n\nlet make_macro params rest_param body closure name =\n let ps = value_to_string_list params in\n let rp = value_to_string_opt rest_param in\n let n = value_to_string_opt name in\n Macro {\n m_params = ps; m_rest_param = rp;\n m_body = body; m_closure = unwrap_env_val closure; m_name = n;\n }\n\nlet make_thunk expr env = Thunk (expr, unwrap_env_val env)\n\nlet make_symbol name = Symbol (value_to_string name)\nlet make_keyword name = Keyword (value_to_string name)\n\n\n(** {1 Type inspection} *)\n\nlet type_of = function\n | Nil -> \"nil\"\n | Bool _ -> \"boolean\"\n | Number _ -> \"number\"\n | String _ -> \"string\"\n | Symbol _ -> \"symbol\"\n | Keyword _ -> \"keyword\"\n | List _ | ListRef _ -> \"list\"\n | Dict _ -> \"dict\"\n | Lambda _ -> \"lambda\"\n | Component _ -> \"component\"\n | Island _ -> \"island\"\n | Macro _ -> \"macro\"\n | Thunk _ -> \"thunk\"\n | Continuation (_, _) -> \"continuation\"\n | NativeFn _ -> \"function\"\n | Signal _ -> \"signal\"\n | RawHTML _ -> \"raw-html\"\n | Spread _ -> \"spread\"\n | SxExpr _ -> \"sx-expr\"\n | Env _ -> \"env\"\n | CekState _ -> \"dict\" (* CEK state behaves as a dict for type checks *)\n | CekFrame _ -> \"dict\"\n | VmClosure _ -> \"function\"\n\nlet is_nil = function Nil -> true | _ -> false\nlet is_lambda = function Lambda _ -> true | _ -> false\nlet is_component = function Component _ -> true | _ -> false\nlet is_island = function Island _ -> true | _ -> false\nlet is_macro = function Macro _ -> true | _ -> false\nlet is_thunk = function Thunk _ -> true | _ -> false\nlet is_signal = function\n | Signal _ -> true\n | Dict d -> Hashtbl.mem d \"__signal\"\n | _ -> false\n\nlet is_callable = function\n | Lambda _ | NativeFn _ | Continuation (_, _) | VmClosure _ -> true\n | _ -> false\n\n\n(** {1 Truthiness} *)\n\n(** SX truthiness: everything is truthy except [Nil] and [Bool false]. *)\nlet sx_truthy = function\n | Nil | Bool false -> false\n | _ -> true\n\n\n(** {1 Accessors} *)\n\nlet symbol_name = function\n | Symbol s -> String s\n | v -> raise (Eval_error (\"Expected symbol, got \" ^ type_of v))\n\nlet keyword_name = function\n | Keyword k -> String k\n | v -> raise (Eval_error (\"Expected keyword, got \" ^ type_of v))\n\nlet lambda_params = function\n | Lambda l -> List (List.map (fun s -> String s) l.l_params)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_body = function\n | Lambda l -> l.l_body\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_closure = function\n | Lambda l -> Env l.l_closure\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_name = function\n | Lambda l -> (match l.l_name with Some n -> String n | None -> Nil)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet set_lambda_name l n = match l with\n | Lambda l -> l.l_name <- Some n; Nil\n | _ -> raise (Eval_error \"set-lambda-name!: not a lambda\")\n\nlet component_name = function\n | Component c -> String c.c_name\n | Island i -> String i.i_name\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_file = function\n | Component c -> (match c.c_file with Some f -> String f | None -> Nil)\n | Island i -> (match i.i_file with Some f -> String f | None -> Nil)\n | _ -> Nil\n\nlet component_set_file v f =\n (match v, f with\n | Component c, String s -> c.c_file <- Some s\n | Island i, String s -> i.i_file <- Some s\n | _ -> ()); Nil\n\nlet component_set_file_b = component_set_file\n\nlet component_params = function\n | Component c -> List (List.map (fun s -> String s) c.c_params)\n | Island i -> List (List.map (fun s -> String s) i.i_params)\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_body = function\n | Component c -> c.c_body\n | Island i -> i.i_body\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_closure = function\n | Component c -> Env c.c_closure\n | Island i -> Env i.i_closure\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_has_children = function\n | Component c -> Bool c.c_has_children\n | Island i -> Bool i.i_has_children\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_affinity = function\n | Component c -> String c.c_affinity\n | Island _ -> String \"client\"\n | _ -> String \"auto\"\n\nlet macro_params = function\n | Macro m -> List (List.map (fun s -> String s) m.m_params)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_rest_param = function\n | Macro m -> (match m.m_rest_param with Some s -> String s | None -> Nil)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_body = function\n | Macro m -> m.m_body\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_closure = function\n | Macro m -> Env m.m_closure\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet thunk_expr = function\n | Thunk (e, _) -> e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\nlet thunk_env = function\n | Thunk (_, e) -> Env e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\n\n(** {1 Dict operations} *)\n\nlet make_dict () : dict = Hashtbl.create 8\n\nlet dict_get (d : dict) key =\n match Hashtbl.find_opt d key with Some v -> v | None -> Nil\n\nlet dict_has (d : dict) key = Hashtbl.mem d key\n\nlet dict_set (d : dict) key v = Hashtbl.replace d key v\n\nlet dict_delete (d : dict) key = Hashtbl.remove d key\n\nlet dict_keys (d : dict) =\n Hashtbl.fold (fun k _ acc -> String k :: acc) d []\n\nlet dict_vals (d : dict) =\n Hashtbl.fold (fun _ v acc -> v :: acc) d []\n\n\n(** {1 Value display} *)\n\nlet rec inspect = function\n | Nil -> \"nil\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then Printf.sprintf \"%d\" (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s ->\n let buf = Buffer.create (String.length s + 2) in\n Buffer.add_char buf '\"';\n String.iter (function\n | '\"' -> Buffer.add_string buf \"\\\\\\\"\"\n | '\\\\' -> Buffer.add_string buf \"\\\\\\\\\"\n | '\\n' -> Buffer.add_string buf \"\\\\n\"\n | '\\r' -> Buffer.add_string buf \"\\\\r\"\n | '\\t' -> Buffer.add_string buf \"\\\\t\"\n | c -> Buffer.add_char buf c) s;\n Buffer.add_char buf '\"';\n Buffer.contents buf\n | Symbol s -> s\n | Keyword k -> \":\" ^ k\n | List items | ListRef { contents = items } ->\n \"(\" ^ String.concat \" \" (List.map inspect items) ^ \")\"\n | Dict d ->\n let pairs = Hashtbl.fold (fun k v acc ->\n (Printf.sprintf \":%s %s\" k (inspect v)) :: acc) d [] in\n \"{\" ^ String.concat \" \" pairs ^ \"}\"\n | Lambda l ->\n let tag = match l.l_name with Some n -> n | None -> \"lambda\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" l.l_params)\n | Component c ->\n Printf.sprintf \"\" c.c_name (String.concat \", \" c.c_params)\n | Island i ->\n Printf.sprintf \"\" i.i_name (String.concat \", \" i.i_params)\n | Macro m ->\n let tag = match m.m_name with Some n -> n | None -> \"macro\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" m.m_params)\n | Thunk _ -> \"\"\n | Continuation (_, _) -> \"\"\n | NativeFn (name, _) -> Printf.sprintf \"\" name\n | Signal _ -> \"\"\n | RawHTML s -> s\n | Spread _ -> \"\"\n | SxExpr s -> s\n | Env _ -> \"\"\n | CekState _ -> \"\"\n | CekFrame f -> Printf.sprintf \"\" f.cf_type\n | VmClosure cl -> Printf.sprintf \"\" (match cl.vm_name with Some n -> n | None -> \"anon\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":101640},"map":{"version":3,"sources":["/workspace_root/lib/sx_parser.ml","/builtin/blackbox.ml"],"sourcesContent":["(** S-expression parser.\n\n Recursive descent over a string, producing [Sx_types.value list].\n Supports: lists, dicts, symbols, keywords, strings (with escapes),\n numbers, booleans, nil, comments, quote/quasiquote/unquote sugar. *)\n\nopen Sx_types\n\ntype state = {\n src : string;\n len : int;\n mutable pos : int;\n}\n\nlet make_state src = { src; len = String.length src; pos = 0 }\n\nlet peek s = if s.pos < s.len then Some s.src.[s.pos] else None\nlet advance s = s.pos <- s.pos + 1\nlet at_end s = s.pos >= s.len\n\nlet skip_whitespace_and_comments s =\n let rec go () =\n if at_end s then ()\n else match s.src.[s.pos] with\n | ' ' | '\\t' | '\\n' | '\\r' -> advance s; go ()\n | ';' ->\n while s.pos < s.len && s.src.[s.pos] <> '\\n' do advance s done;\n if s.pos < s.len then advance s;\n go ()\n | _ -> ()\n in go ()\n\n(* Character classification — matches spec/parser.sx ident-start/ident-char.\n ident-start: a-z A-Z _ ~ * + - > < = / ! ? &\n ident-char: ident-start plus 0-9 . : / # , *)\nlet is_ident_start = function\n | 'a'..'z' | 'A'..'Z' | '_' | '~' | '*' | '+' | '-'\n | '>' | '<' | '=' | '/' | '!' | '?' | '&' -> true\n | _ -> false\n\nlet is_ident_char = function\n | c when is_ident_start c -> true\n | '0'..'9' | '.' | ':' | '#' | ',' -> true\n | _ -> false\n\n(* Symbol reading uses ident_char; first char must be ident_start or digit/colon *)\nlet is_symbol_char = is_ident_char\n\nlet read_string s =\n (* s.pos is on the opening quote *)\n advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '\"' then Buffer.contents buf\n else if c = '\\\\' then begin\n if at_end s then raise (Parse_error \"Unterminated string escape\");\n let esc = s.src.[s.pos] in\n advance s;\n (match esc with\n | 'n' -> Buffer.add_char buf '\\n'\n | 't' -> Buffer.add_char buf '\\t'\n | 'r' -> Buffer.add_char buf '\\r'\n | '\"' -> Buffer.add_char buf '\"'\n | '\\\\' -> Buffer.add_char buf '\\\\'\n | 'u' ->\n (* \\uXXXX — read 4 hex digits, encode as UTF-8 *)\n if s.pos + 4 > s.len then raise (Parse_error \"Incomplete \\\\u escape\");\n let hex = String.sub s.src s.pos 4 in\n s.pos <- s.pos + 4;\n let code = int_of_string (\"0x\" ^ hex) in\n let ubuf = Buffer.create 4 in\n Buffer.add_utf_8_uchar ubuf (Uchar.of_int code);\n Buffer.add_string buf (Buffer.contents ubuf)\n | '`' -> Buffer.add_char buf '`'\n | _ -> Buffer.add_char buf '\\\\'; Buffer.add_char buf esc);\n go ()\n end else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n\nlet read_symbol s =\n let start = s.pos in\n while s.pos < s.len && is_symbol_char s.src.[s.pos] do advance s done;\n String.sub s.src start (s.pos - start)\n\nlet try_number str =\n match float_of_string_opt str with\n | Some n -> Some (Number n)\n | None -> None\n\nlet rec read_value s : value =\n skip_whitespace_and_comments s;\n if at_end s then begin\n let line = ref 1 in\n String.iter (fun c -> if c = '\\n' then incr line) s.src;\n raise (Parse_error (Printf.sprintf \"Unexpected end of input at line %d (pos %d)\" !line s.pos))\n end;\n match s.src.[s.pos] with\n | '(' -> read_list s ')'\n | '[' -> read_list s ']'\n | '{' -> read_dict s\n | '\"' -> String (read_string s)\n | '\\'' -> advance s; List [Symbol \"quote\"; read_value s]\n | '`' -> advance s; List [Symbol \"quasiquote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = ';' ->\n (* Datum comment: #; discards next expression *)\n advance s; advance s;\n ignore (read_value s);\n read_value s\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '\\'' ->\n (* Quote shorthand: #'expr -> (quote expr) *)\n advance s; advance s;\n List [Symbol \"quote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '|' ->\n (* Raw string: #|...| — ends at next | *)\n advance s; advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated raw string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '|' then\n String (Buffer.contents buf)\n else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n | ',' ->\n (* Unquote / splice-unquote — matches spec: , always triggers unquote *)\n advance s;\n if s.pos < s.len && s.src.[s.pos] = '@' then begin\n advance s;\n List [Symbol \"splice-unquote\"; read_value s]\n end else\n List [Symbol \"unquote\"; read_value s]\n | _ ->\n begin\n (* Symbol, keyword, number, or boolean *)\n let token = read_symbol s in\n if token = \"\" then begin\n let line = ref 1 and col = ref 1 in\n for i = 0 to s.pos - 1 do\n if s.src.[i] = '\\n' then (incr line; col := 1) else incr col\n done;\n raise (Parse_error (Printf.sprintf \"Unexpected char: %c at line %d col %d (pos %d)\"\n s.src.[s.pos] !line !col s.pos))\n end;\n match token with\n | \"true\" -> Bool true\n | \"false\" -> Bool false\n | \"nil\" -> Nil\n | _ when token.[0] = ':' ->\n Keyword (String.sub token 1 (String.length token - 1))\n | _ ->\n match try_number token with\n | Some n -> n\n | None -> Symbol token\n end\n\nand read_list s close_char =\n advance s; (* skip opening paren/bracket *)\n let items = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated list\");\n if s.src.[s.pos] = close_char then begin\n advance s;\n List (List.rev !items)\n end else begin\n items := read_value s :: !items;\n go ()\n end\n in go ()\n\nand read_dict s =\n advance s; (* skip { *)\n let d = make_dict () in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated dict\");\n if s.src.[s.pos] = '}' then begin\n advance s;\n Dict d\n end else begin\n let key = read_value s in\n let key_str = match key with\n | Keyword k -> k\n | String k -> k\n | Symbol k -> k\n | _ -> raise (Parse_error \"Dict key must be keyword, string, or symbol\")\n in\n let v = read_value s in\n dict_set d key_str v;\n go ()\n end\n in go ()\n\n\n(** Parse a string into a list of SX values. *)\nlet parse_all src =\n let s = make_state src in\n let results = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then List.rev !results\n else begin\n results := read_value s :: !results;\n go ()\n end\n in go ()\n\n(** Parse a file into a list of SX values. *)\nlet parse_file path =\n let ic = open_in path in\n let n = in_channel_length ic in\n let src = really_input_string ic n in\n close_in ic;\n parse_all src\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":106404},"map":{"version":3,"sources":["/workspace_root/lib/sx_primitives.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Built-in primitive functions (~80 pure functions).\n\n Registered in a global table; the evaluator checks this table\n when a symbol isn't found in the lexical environment. *)\n\nopen Sx_types\n\nlet primitives : (string, value list -> value) Hashtbl.t = Hashtbl.create 128\n\n(** Forward refs for calling SX functions from primitives (breaks cycle). *)\nlet _sx_call_fn : (value -> value list -> value) ref =\n ref (fun _ _ -> raise (Eval_error \"sx_call not initialized\"))\nlet _sx_trampoline_fn : (value -> value) ref =\n ref (fun v -> v)\nlet _is_client : bool ref = ref false\n\nlet register name fn = Hashtbl.replace primitives name fn\n\nlet is_primitive name = Hashtbl.mem primitives name\n\nlet get_primitive name =\n match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(* --- Helpers --- *)\n\n(* Trampoline hook — set by sx_ref after initialization to break circular dep *)\nlet trampoline_hook : (value -> value) ref = ref (fun v -> v)\n\nlet rec as_number = function\n | Number n -> n\n | Bool true -> 1.0\n | Bool false -> 0.0\n | Nil -> 0.0\n | String s -> (match float_of_string_opt s with Some n -> n | None -> Float.nan)\n | Thunk _ as t ->\n (* Trampoline thunks — they shouldn't leak but sometimes do *)\n as_number (!trampoline_hook t)\n | v -> raise (Eval_error (\"Expected number, got \" ^ type_of v ^ \": \" ^ (match v with Dict d -> (match Hashtbl.find_opt d \"__signal\" with Some _ -> \"signal{value=\" ^ (match Hashtbl.find_opt d \"value\" with Some v' -> value_to_string v' | None -> \"?\") ^ \"}\" | None -> \"dict\") | _ -> \"\")))\n\nlet as_string = function\n | String s -> s\n | v -> raise (Eval_error (\"Expected string, got \" ^ type_of v))\n\nlet rec as_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | Thunk _ as t -> as_list (!_sx_trampoline_fn t)\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\nlet as_bool = function\n | Bool b -> b\n | v -> sx_truthy v\n\nlet rec to_string = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | Thunk _ as t -> to_string (!trampoline_hook t)\n | SxExpr s -> s\n | RawHTML s -> s\n | v -> inspect v\n\nlet () =\n (* === Arithmetic === *)\n register \"+\" (fun args ->\n Number (List.fold_left (fun acc a -> acc +. as_number a) 0.0 args));\n register \"-\" (fun args ->\n match args with\n | [] -> Number 0.0\n | [a] -> Number (-. (as_number a))\n | a :: rest -> Number (List.fold_left (fun acc x -> acc -. as_number x) (as_number a) rest));\n register \"*\" (fun args ->\n Number (List.fold_left (fun acc a -> acc *. as_number a) 1.0 args));\n register \"/\" (fun args ->\n match args with\n | [a; b] -> Number (as_number a /. as_number b)\n | _ -> raise (Eval_error \"/: expected 2 args\"));\n register \"mod\" (fun args ->\n match args with\n | [a; b] -> Number (Float.rem (as_number a) (as_number b))\n | _ -> raise (Eval_error \"mod: expected 2 args\"));\n register \"inc\" (fun args ->\n match args with [a] -> Number (as_number a +. 1.0) | _ -> raise (Eval_error \"inc: 1 arg\"));\n register \"dec\" (fun args ->\n match args with [a] -> Number (as_number a -. 1.0) | _ -> raise (Eval_error \"dec: 1 arg\"));\n register \"abs\" (fun args ->\n match args with [a] -> Number (Float.abs (as_number a)) | _ -> raise (Eval_error \"abs: 1 arg\"));\n register \"floor\" (fun args ->\n match args with [a] -> Number (floor (as_number a))\n | _ -> raise (Eval_error \"floor: 1 arg\"));\n register \"ceil\" (fun args ->\n match args with [a] -> Number (ceil (as_number a))\n | _ -> raise (Eval_error \"ceil: 1 arg\"));\n register \"round\" (fun args ->\n match args with\n | [a] -> Number (Float.round (as_number a))\n | [a; b] ->\n let n = as_number a and places = int_of_float (as_number b) in\n let factor = 10.0 ** float_of_int places in\n Number (Float.round (n *. factor) /. factor)\n | _ -> raise (Eval_error \"round: 1-2 args\"));\n register \"min\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"min: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.min acc (as_number a)) Float.infinity args));\n register \"max\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"max: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.max acc (as_number a)) Float.neg_infinity args));\n register \"sqrt\" (fun args ->\n match args with [a] -> Number (Float.sqrt (as_number a)) | _ -> raise (Eval_error \"sqrt: 1 arg\"));\n register \"pow\" (fun args ->\n match args with [a; b] -> Number (as_number a ** as_number b)\n | _ -> raise (Eval_error \"pow: 2 args\"));\n register \"clamp\" (fun args ->\n match args with\n | [x; lo; hi] ->\n let x = as_number x and lo = as_number lo and hi = as_number hi in\n Number (Float.max lo (Float.min hi x))\n | _ -> raise (Eval_error \"clamp: 3 args\"));\n register \"parse-int\" (fun args ->\n let parse_leading_int s =\n let len = String.length s in\n let start = ref 0 in\n let neg = len > 0 && s.[0] = '-' in\n if neg then start := 1\n else if len > 0 && s.[0] = '+' then start := 1;\n let j = ref !start in\n while !j < len && s.[!j] >= '0' && s.[!j] <= '9' do incr j done;\n if !j > !start then\n let n = int_of_string (String.sub s !start (!j - !start)) in\n Some (if neg then -n else n)\n else None\n in\n match args with\n | [String s] -> (match parse_leading_int s with Some n -> Number (float_of_int n) | None -> Nil)\n | [String s; default_val] ->\n (match parse_leading_int s with Some n -> Number (float_of_int n) | None -> default_val)\n | [Number n] | [Number n; _] -> Number (float_of_int (int_of_float n))\n | [_; default_val] -> default_val\n | _ -> Nil);\n register \"parse-float\" (fun args ->\n match args with\n | [String s] -> (match float_of_string_opt s with Some n -> Number n | None -> Nil)\n | [Number n] -> Number n\n | _ -> Nil);\n\n (* === Comparison === *)\n (* Safe equality: physical equality for potentially-circular types\n (Dict, Lambda, Component, Island, Signal, NativeFn),\n structural equality for acyclic types (Number, String, Bool, etc.).\n Lists are compared element-wise recursively with the same safety. *)\n let rec safe_eq a b =\n if a == b then true (* physical equality fast path *)\n else match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | (List la | ListRef { contents = la }),\n (List lb | ListRef { contents = lb }) ->\n List.length la = List.length lb &&\n List.for_all2 safe_eq la lb\n (* Dict: check __host_handle for DOM node identity *)\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n (* Lambda/Component/Island/Signal/NativeFn: physical only *)\n | _ -> false\n in\n register \"=\" (fun args ->\n match args with\n | [a; b] -> Bool (safe_eq a b)\n | _ -> raise (Eval_error \"=: 2 args\"));\n register \"!=\" (fun args ->\n match args with\n | [a; b] -> Bool (not (safe_eq a b))\n | _ -> raise (Eval_error \"!=: 2 args\"));\n register \"<\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a < b)\n | [a; b] -> Bool (as_number a < as_number b)\n | _ -> raise (Eval_error \"<: 2 args\"));\n register \">\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a > b)\n | [a; b] -> Bool (as_number a > as_number b)\n | _ -> raise (Eval_error \">: 2 args\"));\n register \"<=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a <= b)\n | [a; b] -> Bool (as_number a <= as_number b)\n | _ -> raise (Eval_error \"<=: 2 args\"));\n register \">=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a >= b)\n | [a; b] -> Bool (as_number a >= as_number b)\n | _ -> raise (Eval_error \">=: 2 args\"));\n\n (* === Logic === *)\n register \"not\" (fun args ->\n match args with [a] -> Bool (not (sx_truthy a)) | _ -> raise (Eval_error \"not: 1 arg\"));\n\n (* === Predicates === *)\n register \"nil?\" (fun args ->\n match args with [a] -> Bool (is_nil a) | _ -> raise (Eval_error \"nil?: 1 arg\"));\n register \"number?\" (fun args ->\n match args with [Number _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"number?: 1 arg\"));\n register \"string?\" (fun args ->\n match args with [String _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"string?: 1 arg\"));\n register \"boolean?\" (fun args ->\n match args with [Bool _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"boolean?: 1 arg\"));\n register \"list?\" (fun args ->\n match args with [List _] | [ListRef _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"list?: 1 arg\"));\n register \"dict?\" (fun args ->\n match args with [Dict _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"dict?: 1 arg\"));\n register \"symbol?\" (fun args ->\n match args with [Symbol _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"symbol?: 1 arg\"));\n register \"keyword?\" (fun args ->\n match args with [Keyword _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"keyword?: 1 arg\"));\n register \"empty?\" (fun args ->\n match args with\n | [List []] | [ListRef { contents = [] }] -> Bool true\n | [List _] | [ListRef _] -> Bool false\n | [String \"\"] -> Bool true | [String _] -> Bool false\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | [Nil] -> Bool true\n | [_] -> Bool false\n | _ -> raise (Eval_error \"empty?: 1 arg\"));\n register \"odd?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 <> 0) | _ -> raise (Eval_error \"odd?: 1 arg\"));\n register \"even?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 = 0) | _ -> raise (Eval_error \"even?: 1 arg\"));\n register \"zero?\" (fun args ->\n match args with [a] -> Bool (as_number a = 0.0) | _ -> raise (Eval_error \"zero?: 1 arg\"));\n\n (* === Strings === *)\n register \"str\" (fun args -> String (String.concat \"\" (List.map to_string args)));\n register \"upper\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upper: 1 arg\"));\n register \"upcase\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upcase: 1 arg\"));\n register \"lower\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"lower: 1 arg\"));\n register \"downcase\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"downcase: 1 arg\"));\n register \"trim\" (fun args ->\n match args with [a] -> String (String.trim (as_string a)) | _ -> raise (Eval_error \"trim: 1 arg\"));\n register \"string-length\" (fun args ->\n match args with [a] -> Number (float_of_int (String.length (as_string a)))\n | _ -> raise (Eval_error \"string-length: 1 arg\"));\n register \"string-contains?\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let rec find i =\n if i + String.length needle > String.length haystack then false\n else if String.sub haystack i (String.length needle) = needle then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"string-contains?: 2 string args\"));\n register \"starts-with?\" (fun args ->\n match args with\n | [String s; String prefix] ->\n Bool (String.length s >= String.length prefix &&\n String.sub s 0 (String.length prefix) = prefix)\n | _ -> raise (Eval_error \"starts-with?: 2 string args\"));\n register \"ends-with?\" (fun args ->\n match args with\n | [String s; String suffix] ->\n let sl = String.length s and xl = String.length suffix in\n Bool (sl >= xl && String.sub s (sl - xl) xl = suffix)\n | _ -> raise (Eval_error \"ends-with?: 2 string args\"));\n register \"index-of\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let nl = String.length needle and hl = String.length haystack in\n let rec find i =\n if i + nl > hl then Number (-1.0)\n else if String.sub haystack i nl = needle then Number (float_of_int i)\n else find (i + 1)\n in find 0\n | [List items; target] | [ListRef { contents = items }; target] ->\n let eq a b = match a, b with\n | String x, String y -> x = y | Number x, Number y -> x = y\n | Symbol x, Symbol y -> x = y | Keyword x, Keyword y -> x = y\n | Bool x, Bool y -> x = y | Nil, Nil -> true | _ -> a == b in\n let rec find i = function\n | [] -> Nil\n | h :: _ when eq h target -> Number (float_of_int i)\n | _ :: tl -> find (i + 1) tl\n in find 0 items\n | _ -> raise (Eval_error \"index-of: 2 string args or list+target\"));\n register \"substring\" (fun args ->\n match args with\n | [String s; Number start; Number end_] ->\n let i = int_of_float start and j = int_of_float end_ in\n let len = String.length s in\n let i = max 0 (min i len) and j = max 0 (min j len) in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"substring: 3 args\"));\n register \"substr\" (fun args ->\n match args with\n | [String s; Number start; Number len] ->\n let i = int_of_float start and n = int_of_float len in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n let n = max 0 (min n (sl - i)) in\n String (String.sub s i n)\n | [String s; Number start] ->\n let i = int_of_float start in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n String (String.sub s i (sl - i))\n | _ -> raise (Eval_error \"substr: 2-3 args\"));\n register \"split\" (fun args ->\n match args with\n | [String s; String sep] ->\n List (List.map (fun p -> String p) (String.split_on_char sep.[0] s))\n | _ -> raise (Eval_error \"split: 2 args\"));\n register \"join\" (fun args ->\n match args with\n | [String sep; (List items | ListRef { contents = items })] ->\n String (String.concat sep (List.map to_string items))\n | _ -> raise (Eval_error \"join: 2 args\"));\n register \"replace\" (fun args ->\n let to_str = function\n | String s -> s | SxExpr s -> s | RawHTML s -> s\n | Keyword k -> k | Symbol s -> s\n | Nil -> \"\" | Bool true -> \"true\" | Bool false -> \"false\"\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Thunk _ as t -> (match !_sx_trampoline_fn t with String s -> s | v -> to_string v)\n | v -> to_string v\n in\n match args with\n | [s; old_s; new_s] ->\n let s = to_str s and old_s = to_str old_s and new_s = to_str new_s in\n let ol = String.length old_s in\n if ol = 0 then String s\n else begin\n let buf = Buffer.create (String.length s) in\n let rec go i =\n if i >= String.length s then ()\n else if i + ol <= String.length s && String.sub s i ol = old_s then begin\n Buffer.add_string buf new_s;\n go (i + ol)\n end else begin\n Buffer.add_char buf s.[i];\n go (i + 1)\n end\n in go 0;\n String (Buffer.contents buf)\n end\n | _ -> raise (Eval_error \"replace: 3 string args\"));\n register \"char-from-code\" (fun args ->\n match args with\n | [Number n] ->\n let buf = Buffer.create 4 in\n Buffer.add_utf_8_uchar buf (Uchar.of_int (int_of_float n));\n String (Buffer.contents buf)\n | _ -> raise (Eval_error \"char-from-code: 1 arg\"));\n\n (* === Collections === *)\n register \"list\" (fun args -> ListRef (ref args));\n register \"len\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> Number (float_of_int (List.length l))\n | [String s] -> Number (float_of_int (String.length s))\n | [Dict d] -> Number (float_of_int (Hashtbl.length d))\n | [Nil] | [Bool false] -> Number 0.0\n | [Bool true] -> Number 1.0\n | [Number _] -> Number 1.0\n | [RawHTML s] -> Number (float_of_int (String.length s))\n | [SxExpr s] -> Number (float_of_int (String.length s))\n | [Spread pairs] -> Number (float_of_int (List.length pairs))\n | [Component _] | [Island _] | [Lambda _] | [NativeFn _]\n | [Macro _] | [Thunk _] | [Keyword _] | [Symbol _] -> Number 0.0\n | _ -> raise (Eval_error (Printf.sprintf \"len: %d args\"\n (List.length args))));\n register \"length\" (Hashtbl.find primitives \"len\");\n register \"first\" (fun args ->\n match args with\n | [List (x :: _)] | [ListRef { contents = x :: _ }] -> x\n | [List []] | [ListRef { contents = [] }] -> Nil | [Nil] -> Nil\n | [x] -> raise (Eval_error (\"first: expected list, got \" ^ inspect x))\n | _ -> raise (Eval_error \"first: 1 list arg\"));\n register \"rest\" (fun args ->\n match args with\n | [List (_ :: xs)] | [ListRef { contents = _ :: xs }] -> List xs\n | [List []] | [ListRef { contents = [] }] -> List [] | [Nil] -> List []\n | _ -> raise (Eval_error \"rest: 1 list arg\"));\n register \"last\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with x :: _ -> x | [] -> Nil)\n | _ -> raise (Eval_error \"last: 1 list arg\"));\n register \"init\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with _ :: rest -> List (List.rev rest) | [] -> List [])\n | _ -> raise (Eval_error \"init: 1 list arg\"));\n register \"nth\" (fun args ->\n match args with\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [String s; Number n] ->\n let i = int_of_float n in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> raise (Eval_error \"nth: list/string and number\"));\n register \"cons\" (fun args ->\n match args with\n | [x; List l] | [x; ListRef { contents = l }] -> List (x :: l)\n | [x; Nil] -> List [x]\n | _ -> raise (Eval_error \"cons: value and list\"));\n register \"append\" (fun args ->\n match args with\n | [List la | ListRef { contents = la }; List lb | ListRef { contents = lb }] ->\n List (la @ lb)\n | [List la | ListRef { contents = la }; Nil] -> List la\n | [Nil; List lb | ListRef { contents = lb }] -> List lb\n | [List la | ListRef { contents = la }; v] -> List (la @ [v])\n | [v; List lb | ListRef { contents = lb }] -> List ([v] @ lb)\n | _ ->\n let all = List.concat_map as_list args in\n List all);\n register \"reverse\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.rev l)\n | _ -> raise (Eval_error \"reverse: 1 list\"));\n register \"flatten\" (fun args ->\n let rec flat = function\n | List items | ListRef { contents = items } -> List.concat_map flat items\n | x -> [x]\n in\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.concat_map flat l)\n | _ -> raise (Eval_error \"flatten: 1 list\"));\n register \"concat\" (fun args -> List (List.concat_map as_list args));\n register \"contains?\" (fun args ->\n match args with\n | [List l; item] | [ListRef { contents = l }; item] ->\n (* Physical equality first (handles signals/dicts/closures safely),\n structural fallback only for acyclic types (string/number/bool/nil/symbol/keyword) *)\n let safe_eq a b =\n a == b ||\n (match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n | _ -> false)\n in\n Bool (List.exists (fun x -> safe_eq x item) l)\n | [String s; String sub] ->\n let rec find i =\n if i + String.length sub > String.length s then false\n else if String.sub s i (String.length sub) = sub then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"contains?: 2 args\"));\n register \"range\" (fun args ->\n match args with\n | [Number stop] ->\n let n = int_of_float stop in\n List (List.init (max 0 n) (fun i -> Number (float_of_int i)))\n | [Number start; Number stop] ->\n let s = int_of_float start and e = int_of_float stop in\n let len = max 0 (e - s) in\n List (List.init len (fun i -> Number (float_of_int (s + i))))\n | [Number start; Number stop; Number step] ->\n let s = start and e = stop and st = step in\n if st = 0.0 then List []\n else\n let items = ref [] in\n let i = ref s in\n if st > 0.0 then\n (while !i < e do items := Number !i :: !items; i := !i +. st done)\n else\n (while !i > e do items := Number !i :: !items; i := !i +. st done);\n List (List.rev !items)\n | _ -> raise (Eval_error \"range: 1-3 args\"));\n register \"slice\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number start] ->\n let i = max 0 (int_of_float start) in\n let rec drop n = function _ :: xs when n > 0 -> drop (n-1) xs | l -> l in\n List (drop i l)\n | [(List l | ListRef { contents = l }); Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let len = List.length l in\n let j = min j len in\n let rec take_range idx = function\n | [] -> []\n | x :: xs ->\n if idx >= j then []\n else if idx >= i then x :: take_range (idx+1) xs\n else take_range (idx+1) xs\n in List (take_range 0 l)\n | [String s; Number start] ->\n let i = max 0 (int_of_float start) in\n String (String.sub s i (max 0 (String.length s - i)))\n | [String s; Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let sl = String.length s in\n let j = min j sl in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"slice: 2-3 args\"));\n register \"sort\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.sort compare l)\n | _ -> raise (Eval_error \"sort: 1 list\"));\n register \"zip\" (fun args ->\n match args with\n | [a; b] ->\n let la = as_list a and lb = as_list b in\n let rec go l1 l2 acc = match l1, l2 with\n | x :: xs, y :: ys -> go xs ys (List [x; y] :: acc)\n | _ -> List.rev acc\n in List (go la lb [])\n | _ -> raise (Eval_error \"zip: 2 lists\"));\n register \"zip-pairs\" (fun args ->\n match args with\n | [v] ->\n let l = as_list v in\n let rec go = function\n | a :: b :: rest -> List [a; b] :: go rest\n | _ -> []\n in List (go l)\n | _ -> raise (Eval_error \"zip-pairs: 1 list\"));\n register \"take\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in List (take_n (int_of_float n) l)\n | _ -> raise (Eval_error \"take: list and number\"));\n register \"drop\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in List (drop_n (int_of_float n) l)\n | _ -> raise (Eval_error \"drop: list and number\"));\n register \"chunk-every\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let size = int_of_float n in\n let rec go = function\n | [] -> []\n | l ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in\n List (take_n size l) :: go (drop_n size l)\n in List (go l)\n | _ -> raise (Eval_error \"chunk-every: list and number\"));\n register \"unique\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l })] ->\n let seen = Hashtbl.create 16 in\n let result = List.filter (fun x ->\n let key = inspect x in\n if Hashtbl.mem seen key then false\n else (Hashtbl.replace seen key true; true)\n ) l in\n List result\n | _ -> raise (Eval_error \"unique: 1 list\"));\n\n (* === Dict === *)\n register \"dict\" (fun args ->\n let d = make_dict () in\n let rec go = function\n | [] -> Dict d\n | Keyword k :: v :: rest -> dict_set d k v; go rest\n | String k :: v :: rest -> dict_set d k v; go rest\n | _ -> raise (Eval_error \"dict: pairs of key value\")\n in go args);\n register \"get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [Nil; _] -> Nil (* nil.anything → nil *)\n | [_; _] -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n | _ -> Nil);\n register \"has-key?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | [Dict d; Keyword k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"has-key?: dict and key\"));\n register \"assoc\" (fun args ->\n match args with\n | Dict d :: rest ->\n let d2 = Hashtbl.copy d in\n let rec go = function\n | [] -> Dict d2\n | String k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | Keyword k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | _ -> raise (Eval_error \"assoc: pairs\")\n in go rest\n | _ -> raise (Eval_error \"assoc: dict + pairs\"));\n register \"dissoc\" (fun args ->\n match args with\n | Dict d :: keys ->\n let d2 = Hashtbl.copy d in\n List.iter (fun k -> Hashtbl.remove d2 (to_string k)) keys;\n Dict d2\n | _ -> raise (Eval_error \"dissoc: dict + keys\"));\n register \"merge\" (fun args ->\n let d = make_dict () in\n List.iter (function\n | Dict src -> Hashtbl.iter (fun k v -> Hashtbl.replace d k v) src\n | _ -> raise (Eval_error \"merge: all args must be dicts\")\n ) args;\n Dict d);\n register \"keys\" (fun args ->\n match args with [Dict d] -> List (dict_keys d) | _ -> raise (Eval_error \"keys: 1 dict\"));\n register \"vals\" (fun args ->\n match args with [Dict d] -> List (dict_vals d) | _ -> raise (Eval_error \"vals: 1 dict\"));\n register \"mutable-list\" (fun _args -> ListRef (ref []));\n register \"set-nth!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n let l = !r in\n r := List.mapi (fun j x -> if j = i then v else x) l;\n Nil\n | [List _; _; _] ->\n raise (Eval_error \"set-nth!: list is immutable, use ListRef\")\n | _ -> raise (Eval_error \"set-nth!: expected (list idx val)\"));\n register \"dict-set!\" (fun args ->\n match args with\n | [Dict d; String k; v] -> dict_set d k v; v\n | [Dict d; Keyword k; v] -> dict_set d k v; v\n | _ -> raise (Eval_error \"dict-set!: dict key val\"));\n register \"dict-get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | _ -> raise (Eval_error \"dict-get: dict and key\"));\n register \"dict-has?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"dict-has?: dict and key\"));\n register \"dict-delete!\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_delete d k; Nil\n | _ -> raise (Eval_error \"dict-delete!: dict and key\"));\n\n (* === Misc === *)\n register \"type-of\" (fun args ->\n match args with [a] -> String (type_of a) | _ -> raise (Eval_error \"type-of: 1 arg\"));\n register \"inspect\" (fun args ->\n match args with [a] -> String (inspect a) | _ -> raise (Eval_error \"inspect: 1 arg\"));\n register \"serialize\" (fun args ->\n match args with\n | [SxExpr s] -> String s\n | [RawHTML s] -> String s\n | [a] -> String (inspect a) (* used for dedup keys in compiler *)\n | _ -> raise (Eval_error \"serialize: 1 arg\"));\n register \"make-symbol\" (fun args ->\n match args with\n | [String s] -> Symbol s\n | _ -> raise (Eval_error \"make-symbol: expected string\"));\n register \"error\" (fun args ->\n match args with [String msg] -> raise (Eval_error msg)\n | [a] -> raise (Eval_error (to_string a))\n | _ -> raise (Eval_error \"error: 1 arg\"));\n register \"try-catch\" (fun args ->\n match args with\n | [try_fn; catch_fn] ->\n (try !_sx_trampoline_fn (!_sx_call_fn try_fn [])\n with Eval_error msg ->\n !_sx_trampoline_fn (!_sx_call_fn catch_fn [String msg]))\n | _ -> raise (Eval_error \"try-catch: expected (try-fn catch-fn)\"));\n (* client? — false by default (server); sx_browser.ml sets _is_client := true *)\n register \"client?\" (fun _args -> Bool !_is_client);\n (* Named stores — global mutable registry, bypasses env scoping issues *)\n let store_registry : (string, value) Hashtbl.t = Hashtbl.create 16 in\n register \"def-store\" (fun args ->\n match args with\n | [String name; init_fn] ->\n if not (Hashtbl.mem store_registry name) then begin\n let store = !_sx_trampoline_fn (!_sx_call_fn init_fn []) in\n Hashtbl.replace store_registry name store\n end;\n (match Hashtbl.find_opt store_registry name with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"def-store: expected (name init-fn)\"));\n register \"use-store\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt store_registry name with\n | Some v -> v\n | None -> raise (Eval_error (\"Store not found: \" ^ name)))\n | _ -> raise (Eval_error \"use-store: expected (name)\"));\n register \"clear-stores\" (fun _args -> Hashtbl.clear store_registry; Nil);\n (* SSR stubs — resource returns loading state on server.\n NOTE: effect and register-in-scope must NOT be registered as primitives\n here — the bytecode compiler uses primitive? to decide CALL_PRIM vs\n GLOBAL_GET+CALL. If effect is a primitive, bytecoded modules emit\n CALL_PRIM which returns Nil instead of calling the real effect function\n from core-signals.sx. The server overrides effect in sx_server.ml via\n env_bind AFTER compilation. *)\n (* register \"effect\" — REMOVED: see note above *)\n (* register \"register-in-scope\" — REMOVED: see note above *)\n (* resource — SSR stub: return signal with {loading: true}, client hydrates real fetch *)\n register \"resource\" (fun _args ->\n let state = Hashtbl.create 8 in\n Hashtbl.replace state \"loading\" (Bool true);\n Hashtbl.replace state \"data\" Nil;\n Hashtbl.replace state \"error\" Nil;\n let sig_d = Hashtbl.create 8 in\n Hashtbl.replace sig_d \"__signal\" (Bool true);\n Hashtbl.replace sig_d \"value\" (Dict state);\n Hashtbl.replace sig_d \"subscribers\" (List []);\n Hashtbl.replace sig_d \"deps\" (List []);\n Dict sig_d);\n register \"apply\" (fun args ->\n let call f a =\n match f with\n | NativeFn (_, fn) -> fn a\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f a)\n in\n match args with\n | [f; (List a | ListRef { contents = a })] -> call f a\n | [f; Nil] -> call f []\n | _ -> raise (Eval_error \"apply: function and list\"));\n register \"identical?\" (fun args ->\n match args with [a; b] -> Bool (a == b) | _ -> raise (Eval_error \"identical?: 2 args\"));\n register \"make-spread\" (fun args ->\n match args with\n | [Dict d] ->\n let pairs = Hashtbl.fold (fun k v acc -> (k, v) :: acc) d [] in\n Spread pairs\n | _ -> raise (Eval_error \"make-spread: 1 dict\"));\n register \"spread?\" (fun args ->\n match args with [Spread _] -> Bool true | [_] -> Bool false\n | _ -> raise (Eval_error \"spread?: 1 arg\"));\n register \"spread-attrs\" (fun args ->\n match args with\n | [Spread pairs] ->\n let d = make_dict () in\n List.iter (fun (k, v) -> dict_set d k v) pairs;\n Dict d\n | _ -> raise (Eval_error \"spread-attrs: 1 spread\"));\n\n (* Higher-order forms as callable primitives — used by the VM.\n The CEK machine handles these as special forms with dedicated frames;\n the VM needs them as plain callable values. *)\n (* Call any SX callable — handles NativeFn, Lambda (via trampoline), VM closures *)\n let call_any f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f args)\n in\n register \"map\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.map (fun x -> call_any f [x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map: expected (fn list)\"));\n register \"map-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.mapi (fun i x -> call_any f [Number (float_of_int i); x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map-indexed: expected (fn list)\"));\n register \"filter\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.filter (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"filter: expected (fn list)\"));\n register \"for-each\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iter (fun x -> ignore (call_any f [x])) items; Nil\n | [_; Nil] -> Nil (* nil collection = no-op *)\n | _ ->\n let types = String.concat \", \" (List.map (fun v -> type_of v) args) in\n raise (Eval_error (Printf.sprintf \"for-each: expected (fn list), got (%s) %d args\" types (List.length args))));\n register \"reduce\" (fun args ->\n match args with\n | [f; init; (List items | ListRef { contents = items })] ->\n List.fold_left (fun acc x -> call_any f [acc; x]) init items\n | _ -> raise (Eval_error \"reduce: expected (fn init list)\"));\n register \"some\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n let rec find = function\n | [] -> Bool false\n | x :: rest ->\n let result = call_any f [x] in\n if sx_truthy result then result else find rest\n in find items\n | [_; Nil] -> Bool false\n | _ -> raise (Eval_error \"some: expected (fn list)\"));\n register \"every?\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n Bool (List.for_all (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> Bool true\n | _ -> raise (Eval_error \"every?: expected (fn list)\"));\n\n (* ---- VM stack primitives (vm.sx platform interface) ---- *)\n register \"make-vm-stack\" (fun args ->\n match args with\n | [Number n] -> ListRef (ref (List.init (int_of_float n) (fun _ -> Nil)))\n | _ -> raise (Eval_error \"make-vm-stack: expected (size)\"));\n register \"vm-stack-get\" (fun args ->\n match args with\n | [ListRef r; Number n] -> List.nth !r (int_of_float n)\n | _ -> raise (Eval_error \"vm-stack-get: expected (stack idx)\"));\n register \"vm-stack-set!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n r := List.mapi (fun j x -> if j = i then v else x) !r; Nil\n | _ -> raise (Eval_error \"vm-stack-set!: expected (stack idx val)\"));\n register \"vm-stack-length\" (fun args ->\n match args with\n | [ListRef r] -> Number (float_of_int (List.length !r))\n | _ -> raise (Eval_error \"vm-stack-length: expected (stack)\"));\n register \"vm-stack-copy!\" (fun args ->\n match args with\n | [ListRef src; ListRef dst; Number n] ->\n let count = int_of_float n in\n let src_items = !src in\n dst := List.mapi (fun i x -> if i < count then List.nth src_items i else x) !dst; Nil\n | _ -> raise (Eval_error \"vm-stack-copy!: expected (src dst count)\"));\n register \"primitive?\" (fun args ->\n match args with\n | [String name] -> Bool (Hashtbl.mem primitives name)\n | _ -> Bool false);\n\n (* Scope stack primitives are registered by sx_server.ml / run_tests.ml\n because they use a shared scope stacks table with collect!/collected. *)\n\n (* ---- Predicates needed by adapter-html.sx ---- *)\n register \"lambda?\" (fun args ->\n match args with [Lambda _] -> Bool true | _ -> Bool false);\n register \"island?\" (fun args ->\n match args with [Island _] -> Bool true | _ -> Bool false);\n register \"is-else-clause?\" (fun args ->\n match args with\n | [Keyword \"else\"] -> Bool true\n | [Bool true] -> Bool true\n | _ -> Bool false);\n register \"cond-scheme?\" (fun args ->\n match args with\n | [List clauses] ->\n Bool (List.for_all (fun c ->\n match c with\n | List l -> List.length l = 2\n | _ -> false) clauses)\n | _ -> Bool false);\n register \"component?\" (fun args ->\n match args with [Component _] -> Bool true | [Island _] -> Bool true | _ -> Bool false);\n register \"lambda-closure\" (fun args ->\n match args with [Lambda l] -> Env l.l_closure | _ -> Nil);\n register \"component-closure\" (fun args ->\n match args with\n | [Component c] -> Env c.c_closure\n | [Island i] -> Env i.i_closure\n | _ -> Nil);\n register \"component-has-children?\" (fun args ->\n match args with\n | [Component c] -> Bool c.c_has_children\n | [Island i] -> Bool i.i_has_children\n | _ -> Bool false);\n register \"component-name\" (fun args ->\n match args with\n | [Component c] -> String c.c_name\n | [Island i] -> String i.i_name\n | _ -> Nil);\n register \"component-params\" (fun args ->\n match args with\n | [Component c] -> List (List.map (fun s -> String s) c.c_params)\n | [Island i] -> List (List.map (fun s -> String s) i.i_params)\n | _ -> List []);\n register \"component-body\" (fun args ->\n match args with\n | [Component c] -> c.c_body\n | [Island i] -> i.i_body\n | _ -> Nil);\n register \"component-file\" (fun args ->\n match args with [v] -> component_file v | _ -> Nil);\n register \"component-set-file!\" (fun args ->\n match args with [v; f] -> component_set_file v f | _ -> Nil);\n register \"macro?\" (fun args ->\n match args with [Macro _] -> Bool true | _ -> Bool false);\n register \"for-each-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iteri (fun i x -> ignore (call_any f [Number (float_of_int i); x])) items; Nil\n | _ -> raise (Eval_error \"for-each-indexed: expected (fn list)\"));\n register \"lambda-params\" (fun args ->\n match args with\n | [Lambda l] -> List (List.map (fun s -> String s) l.l_params)\n | _ -> List []);\n register \"lambda-body\" (fun args ->\n match args with [Lambda l] -> l.l_body | _ -> Nil);\n (* expand-macro is registered later by run_tests.ml / sx_server.ml\n because it needs eval_expr which creates a dependency cycle *);\n register \"empty-dict?\" (fun args ->\n match args with\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | _ -> Bool true);\n register \"make-raw-html\" (fun args ->\n match args with [String s] -> RawHTML s | _ -> Nil);\n register \"raw-html-content\" (fun args ->\n match args with [RawHTML s] -> String s | _ -> String \"\");\n register \"get-primitive\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"get-primitive: expected (name)\"));\n register \"call-primitive\" (fun args ->\n match args with\n | [String name; (List a | ListRef { contents = a })] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn a\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | [String name; Nil] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn []\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"call-primitive: expected (name args-list)\"));\n ()\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":145290},"map":{"version":3,"sources":["/workspace_root/lib/sx_runtime.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Runtime helpers for transpiled code.\n\n These bridge the gap between the transpiler's output and the\n foundation types/primitives. The transpiled evaluator calls these\n functions directly. *)\n\nopen Sx_types\n\n(** Call a registered primitive by name. *)\nlet prim_call name args =\n match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f args\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(** Convert any SX value to an OCaml string (internal). *)\nlet value_to_str = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | v -> inspect v\n\n(** sx_to_string returns a value (String) for transpiled code. *)\nlet sx_to_string v = String (value_to_str v)\n\n(** String concatenation helper — [sx_str] takes a list of values. *)\nlet sx_str args =\n String.concat \"\" (List.map value_to_str args)\n\n(** Convert a value to a list. *)\nlet sx_to_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\n(** Call an SX callable (lambda, native fn, continuation). *)\nlet sx_call f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | VmClosure cl -> !Sx_types._vm_call_closure_ref cl args\n | Lambda l ->\n let local = Sx_types.env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (Sx_types.env_bind local p a)) l.l_params args;\n Thunk (l.l_body, local)\n | Continuation (k, _) ->\n k (match args with x :: _ -> x | [] -> Nil)\n | _ ->\n let nargs = List.length args in\n let args_preview = if nargs = 0 then \"\" else\n let s = String.concat \", \" (List.map (fun a -> let s = inspect a in if String.length s > 40 then String.sub s 0 40 ^ \"..\" else s) args) in\n \" with args=[\" ^ s ^ \"]\" in\n raise (Eval_error (\"Not callable: \" ^ inspect f ^ args_preview))\n\n(* Initialize forward ref so primitives can call SX functions *)\nlet () = Sx_primitives._sx_call_fn := sx_call\n(* Trampoline ref is set by sx_ref.ml after it's loaded *)\n\n(** Apply a function to a list of args. *)\nlet sx_apply f args_list =\n sx_call f (sx_to_list args_list)\n\n(** Mutable append — add item to a list ref or accumulator.\n In transpiled code, lists that get appended to are mutable refs. *)\nlet sx_append_b lst item =\n match lst with\n | List items -> List (items @ [item])\n | ListRef r -> r := !r @ [item]; lst (* mutate in place, return same ref *)\n | _ -> raise (Eval_error (\"append!: expected list, got \" ^ type_of lst))\n\n(** Mutable dict-set — set key in dict, return value. *)\nlet sx_dict_set_b d k v =\n match d, k with\n | Dict tbl, String key -> Hashtbl.replace tbl key v; v\n | Dict tbl, Keyword key -> Hashtbl.replace tbl key v; v\n | _ -> raise (Eval_error \"dict-set!: expected dict and string key\")\n\n(** Get from dict or list. *)\nlet get_val container key =\n match container, key with\n | CekState s, String k ->\n (match k with\n | \"control\" -> s.cs_control | \"env\" -> s.cs_env\n | \"kont\" -> s.cs_kont | \"phase\" -> String s.cs_phase\n | \"value\" -> s.cs_value | _ -> Nil)\n | CekFrame f, String k ->\n (match k with\n | \"type\" -> String f.cf_type | \"env\" -> f.cf_env\n | \"name\" -> f.cf_name | \"body\" -> f.cf_body\n | \"remaining\" -> f.cf_remaining | \"f\" -> f.cf_f\n | \"args\" -> f.cf_args | \"evaled\" -> f.cf_args\n | \"results\" -> f.cf_results | \"raw-args\" -> f.cf_results\n | \"then\" -> f.cf_body | \"else\" -> f.cf_name\n | \"ho-type\" -> f.cf_extra | \"scheme\" -> f.cf_extra\n | \"indexed\" -> f.cf_extra | \"value\" -> f.cf_extra\n | \"phase\" -> f.cf_extra | \"has-effects\" -> f.cf_extra\n | \"match-val\" -> f.cf_extra | \"current-item\" -> f.cf_extra\n | \"update-fn\" -> f.cf_extra | \"head-name\" -> f.cf_extra\n | \"emitted\" -> f.cf_extra2 | \"effect-list\" -> f.cf_extra2\n | \"first-render\" -> f.cf_extra2 | \"file\" -> f.cf_env\n | _ -> Nil)\n | Dict d, String k -> dict_get d k\n | Dict d, Keyword k -> dict_get d k\n | (List l | ListRef { contents = l }), Number n ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | Nil, _ -> Nil (* nil.anything → nil *)\n | _, _ -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n\n(** Register get as a primitive override — transpiled code calls (get d k). *)\nlet () =\n Sx_primitives.register \"get\" (fun args ->\n match args with\n | [c; k] -> get_val c k\n | [c; k; default] ->\n (try\n let v = get_val c k in\n if v = Nil then default else v\n with _ -> default)\n | _ -> raise (Eval_error \"get: 2-3 args\"))\n\n\n(* ====================================================================== *)\n(* Primitive aliases — top-level functions called by transpiled code *)\n(* ====================================================================== *)\n\n(** The transpiled evaluator calls primitives directly by their mangled\n OCaml name. These aliases delegate to the primitives table so the\n transpiled code compiles without needing [prim_call] everywhere. *)\n\nlet _prim name = match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f | None -> (fun _ -> raise (Eval_error (\"Missing prim: \" ^ name)))\n\n(* Collection ops *)\nlet first args = _prim \"first\" [args]\nlet rest args = _prim \"rest\" [args]\nlet last args = _prim \"last\" [args]\nlet nth coll i = _prim \"nth\" [coll; i]\nlet cons x l = _prim \"cons\" [x; l]\nlet append a b = _prim \"append\" [a; b]\nlet reverse l = _prim \"reverse\" [l]\nlet flatten l = _prim \"flatten\" [l]\nlet concat a b = _prim \"concat\" [a; b]\nlet slice a b = _prim \"slice\" [a; b]\nlet len a = _prim \"len\" [a]\nlet get a b = get_val a b\nlet sort' a = _prim \"sort\" [a]\nlet range' a = _prim \"range\" [a]\nlet unique a = _prim \"unique\" [a]\nlet zip a b = _prim \"zip\" [a; b]\nlet zip_pairs a = _prim \"zip-pairs\" [a]\nlet take a b = _prim \"take\" [a; b]\nlet drop a b = _prim \"drop\" [a; b]\nlet chunk_every a b = _prim \"chunk-every\" [a; b]\n\n(* Predicates *)\nlet empty_p a = _prim \"empty?\" [a]\nlet nil_p a = _prim \"nil?\" [a]\nlet number_p a = _prim \"number?\" [a]\nlet string_p a = _prim \"string?\" [a]\nlet boolean_p a = _prim \"boolean?\" [a]\nlet list_p a = _prim \"list?\" [a]\nlet dict_p a = _prim \"dict?\" [a]\nlet symbol_p a = _prim \"symbol?\" [a]\nlet keyword_p a = _prim \"keyword?\" [a]\nlet contains_p a b = _prim \"contains?\" [a; b]\nlet has_key_p a b = _prim \"has-key?\" [a; b]\nlet starts_with_p a b = _prim \"starts-with?\" [a; b]\nlet ends_with_p a b = _prim \"ends-with?\" [a; b]\nlet string_contains_p a b = _prim \"string-contains?\" [a; b]\nlet odd_p a = _prim \"odd?\" [a]\nlet even_p a = _prim \"even?\" [a]\nlet zero_p a = _prim \"zero?\" [a]\n\n(* String ops *)\nlet str' args = String (sx_str args)\nlet upper a = _prim \"upper\" [a]\nlet upcase a = _prim \"upcase\" [a]\nlet lower a = _prim \"lower\" [a]\nlet downcase a = _prim \"downcase\" [a]\nlet trim a = _prim \"trim\" [a]\nlet split a b = _prim \"split\" [a; b]\nlet join a b = _prim \"join\" [a; b]\nlet replace a b c = _prim \"replace\" [a; b; c]\nlet index_of a b = _prim \"index-of\" [a; b]\nlet substring a b c = _prim \"substring\" [a; b; c]\nlet string_length a = _prim \"string-length\" [a]\nlet char_from_code a = _prim \"char-from-code\" [a]\n\n(* Dict ops *)\nlet assoc d k v = _prim \"assoc\" [d; k; v]\nlet dissoc d k = _prim \"dissoc\" [d; k]\nlet merge' a b = _prim \"merge\" [a; b]\nlet keys a = _prim \"keys\" [a]\nlet vals a = _prim \"vals\" [a]\nlet dict_set a b c = _prim \"dict-set!\" [a; b; c]\nlet dict_get a b = _prim \"dict-get\" [a; b]\nlet dict_has_p a b = _prim \"dict-has?\" [a; b]\nlet dict_delete a b = _prim \"dict-delete!\" [a; b]\n\n(* Math *)\nlet abs' a = _prim \"abs\" [a]\nlet sqrt' a = _prim \"sqrt\" [a]\nlet pow' a b = _prim \"pow\" [a; b]\nlet floor' a = _prim \"floor\" [a]\nlet ceil' a = _prim \"ceil\" [a]\nlet round' a = _prim \"round\" [a]\nlet min' a b = _prim \"min\" [a; b]\nlet max' a b = _prim \"max\" [a; b]\nlet clamp a b c = _prim \"clamp\" [a; b; c]\nlet parse_int a = _prim \"parse-int\" [a]\nlet parse_float a = _prim \"parse-float\" [a]\n\n(* Misc *)\nlet error msg = raise (Eval_error (value_to_str msg))\n\n(* inspect wrapper — returns String value instead of OCaml string *)\nlet inspect v = String (Sx_types.inspect v)\nlet apply' f args = sx_apply f args\nlet identical_p a b = _prim \"identical?\" [a; b]\nlet _is_spread_prim a = _prim \"spread?\" [a]\nlet spread_attrs a = _prim \"spread-attrs\" [a]\nlet make_spread a = _prim \"make-spread\" [a]\n\n(* Scope primitives — delegate to sx_ref.py's shared scope stacks *)\nlet sx_collect a b = prim_call \"collect!\" [a; b]\nlet sx_collected a = prim_call \"collected\" [a]\nlet sx_clear_collected a = prim_call \"clear-collected!\" [a]\nlet sx_emit a b = prim_call \"emit!\" [a; b]\nlet sx_emitted a = prim_call \"emitted\" [a]\nlet sx_context a b = prim_call \"context\" [a; b]\n\n(* Trampoline — forward-declared in sx_ref.ml, delegates to CEK eval_expr *)\n(* This is a stub; the real trampoline is wired up in sx_ref.ml after eval_expr is defined *)\nlet trampoline v = v\n\n(* Value-returning type predicates — the transpiled code passes these through\n sx_truthy, so they need to return Bool, not OCaml bool. *)\n(* type_of returns value, not string *)\nlet type_of v = String (Sx_types.type_of v)\n\n(* Env operations — accept Env-wrapped values and value keys.\n The transpiled CEK machine stores envs in dicts as Env values. *)\nlet unwrap_env = function\n | Env e -> e\n | Dict d ->\n (* Dict used as env — wrap it. Needed by adapter-html.sx which\n passes dicts as env args (e.g. empty {} as caller env). *)\n let e = Sx_types.make_env () in\n Hashtbl.iter (fun k v -> ignore (Sx_types.env_bind e k v)) d;\n e\n | Nil ->\n Sx_types.make_env ()\n | v -> raise (Eval_error (\"Expected env, got \" ^ Sx_types.type_of v))\n\nlet env_has e name = Bool (Sx_types.env_has (unwrap_env e) (value_to_str name))\nlet env_get e name = Sx_types.env_get (unwrap_env e) (value_to_str name)\nlet env_bind e name v = Sx_types.env_bind (unwrap_env e) (value_to_str name) v\nlet env_set e name v = Sx_types.env_set (unwrap_env e) (value_to_str name) v\n\nlet make_env () = Env (Sx_types.make_env ())\nlet env_extend e = Env (Sx_types.env_extend (unwrap_env e))\nlet env_merge a b = Env (Sx_types.env_merge (unwrap_env a) (unwrap_env b))\n\n(* set_lambda_name wrapper — accepts value, extracts string *)\nlet set_lambda_name l n = Sx_types.set_lambda_name l (value_to_str n)\n\nlet is_nil v = Bool (Sx_types.is_nil v)\nlet is_thunk v = Bool (Sx_types.is_thunk v)\nlet is_lambda v = Bool (Sx_types.is_lambda v)\nlet is_component v = Bool (Sx_types.is_component v)\nlet is_island v = Bool (Sx_types.is_island v)\nlet is_macro v = Bool (Sx_types.is_macro v)\nlet is_signal v = Bool (Sx_types.is_signal v)\nlet is_callable v = Bool (Sx_types.is_callable v)\nlet is_identical a b = Bool (a == b)\nlet is_primitive name = Bool (Sx_primitives.is_primitive (value_to_str name))\nlet get_primitive name = Sx_primitives.get_primitive (value_to_str name)\nlet is_spread v = match v with Spread _ -> Bool true | _ -> Bool false\n\n(* Stubs for functions defined in sx_ref.ml — resolved at link time *)\n(* These are forward-declared here; sx_ref.ml defines the actual implementations *)\n\n(* strip-prefix *)\n(* Stubs for evaluator functions — defined in sx_ref.ml but\n sometimes referenced before their definition via forward calls.\n These get overridden by the actual transpiled definitions. *)\n\nlet map_indexed fn coll =\n List (List.mapi (fun i x -> sx_call fn [Number (float_of_int i); x]) (sx_to_list coll))\n\nlet map_dict fn d =\n match d with\n | Dict tbl ->\n let result = Hashtbl.create (Hashtbl.length tbl) in\n Hashtbl.iter (fun k v -> Hashtbl.replace result k (sx_call fn [String k; v])) tbl;\n Dict result\n | _ -> raise (Eval_error \"map-dict: expected dict\")\n\nlet for_each fn coll =\n List.iter (fun x -> ignore (sx_call fn [x])) (sx_to_list coll);\n Nil\n\nlet for_each_indexed fn coll =\n List.iteri (fun i x -> ignore (sx_call fn [Number (float_of_int i); x])) (sx_to_list coll);\n Nil\n\n(* Continuation support *)\nlet continuation_p v = match v with Continuation (_, _) -> Bool true | _ -> Bool false\n\nlet make_cek_continuation captured rest_kont =\n let data = Hashtbl.create 2 in\n Hashtbl.replace data \"captured\" captured;\n Hashtbl.replace data \"rest-kont\" rest_kont;\n Continuation ((fun v -> v), Some data)\n\nlet continuation_data v = match v with\n | Continuation (_, Some d) -> Dict d\n | Continuation (_, None) -> Dict (Hashtbl.create 0)\n | _ -> raise (Eval_error \"not a continuation\")\n\n(* Dynamic wind — simplified for OCaml (no async) *)\nlet dynamic_wind_call before body after _env =\n ignore (sx_call before []);\n let result = sx_call body [] in\n ignore (sx_call after []);\n result\n\n(* Scope stack — all delegated to primitives registered in sx_server.ml *)\nlet scope_push name value = prim_call \"scope-push!\" [name; value]\nlet scope_pop name = prim_call \"scope-pop!\" [name]\nlet scope_peek name = prim_call \"scope-peek\" [name]\nlet scope_emit name value = prim_call \"scope-emit!\" [name; value]\nlet provide_push name value = prim_call \"scope-push!\" [name; value]\nlet provide_pop name = prim_call \"scope-pop!\" [name]\n\n(* Custom special forms registry — mutable dict *)\nlet custom_special_forms = Dict (Hashtbl.create 4)\n\n(* register-special-form! — add a handler to the custom registry *)\nlet register_special_form name handler =\n (match custom_special_forms with\n | Dict tbl -> Hashtbl.replace tbl (value_to_str name) handler; handler\n | _ -> raise (Eval_error \"custom_special_forms not a dict\"))\n\n(* Render check/fn hooks — nil by default, set by platform if needed *)\nlet render_check = Nil\nlet render_fn = Nil\n\n(* is-else-clause? — check if a cond/case test is an else marker *)\nlet is_else_clause v =\n match v with\n | Keyword k -> Bool (k = \"else\" || k = \"default\")\n | Symbol s -> Bool (s = \"else\" || s = \"default\")\n | Bool true -> Bool true\n | _ -> Bool false\n\n(* Signal accessors *)\nlet signal_value s = match s with\n | Signal sig' -> sig'.s_value\n | Dict d -> (match Hashtbl.find_opt d \"value\" with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"not a signal\")\nlet signal_set_value s v = match s with Signal sig' -> sig'.s_value <- v; v | _ -> raise (Eval_error \"not a signal\")\nlet signal_subscribers s = match s with Signal sig' -> List (List.map (fun _ -> Nil) sig'.s_subscribers) | _ -> List []\nlet signal_add_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := !r @ [f]; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (ListRef (ref (items @ [f]))); Nil\n | _ -> Hashtbl.replace d \"subscribers\" (ListRef (ref [f])); Nil)\n | _ -> Nil\n\nlet signal_remove_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := List.filter (fun x -> x != f) !r; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (List (List.filter (fun x -> x != f) items)); Nil\n | _ -> Nil)\n | _ -> Nil\n\nlet signal_deps s =\n match s with\n | Dict d -> (match Hashtbl.find_opt d \"deps\" with Some v -> v | None -> List [])\n | _ -> List []\n\nlet signal_set_deps s d =\n match s with\n | Dict tbl -> Hashtbl.replace tbl \"deps\" d; Nil\n | _ -> Nil\n\nlet notify_subscribers s =\n let subs = match s with\n | Dict d -> (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef { contents = items }) | Some (List items) -> items\n | _ -> [])\n | _ -> []\n in\n List.iter (fun f -> ignore (sx_call f [])) subs;\n Nil\n\nlet flush_subscribers _s = Nil\nlet dispose_computed _s = Nil\n\n(* Island scope stubs — accept both bare OCaml fns and NativeFn values\n from transpiled code (NativeFn wrapping for value-storable lambdas). *)\nlet with_island_scope _register_fn body_fn =\n match body_fn with\n | NativeFn (_, f) -> f []\n | _ -> Nil\nlet register_in_scope _dispose_fn = Nil\n\n(* Component type annotation stub *)\nlet component_set_param_types_b _comp _types = Nil\n\n(* Parse keyword args from a call — this is defined in evaluator.sx,\n the transpiled version will override this stub. *)\n(* Forward-reference stubs for evaluator functions used before definition *)\nlet parse_comp_params _params = List [List []; Nil; Bool false]\nlet parse_macro_params _params = List [List []; Nil]\n\nlet parse_keyword_args _raw_args _env =\n (* Stub — the real implementation is transpiled from evaluator.sx *)\n List [Dict (Hashtbl.create 0); List []]\n\n(* Make handler/query/action/page def stubs *)\nlet make_handler_def name params body _env = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"handler\"); Hashtbl.replace d \"name\" name; Hashtbl.replace d \"params\" params; Hashtbl.replace d \"body\" body; d)\nlet make_query_def name params body _env = make_handler_def name params body _env\nlet make_action_def name params body _env = make_handler_def name params body _env\nlet make_page_def name _opts = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"page\"); Hashtbl.replace d \"name\" name; d)\n\n(* sf-def* stubs — platform-specific def-forms, not in the SX spec *)\nlet sf_defhandler args env =\n let name = first args in let rest_args = rest args in\n make_handler_def name (first rest_args) (nth rest_args (Number 1.0)) env\nlet sf_defquery args env = sf_defhandler args env\nlet sf_defaction args env = sf_defhandler args env\nlet sf_defpage args _env =\n let name = first args in make_page_def name (rest args)\n\nlet strip_prefix s prefix =\n match s, prefix with\n | String s, String p ->\n let pl = String.length p in\n if String.length s >= pl && String.sub s 0 pl = p\n then String (String.sub s pl (String.length s - pl))\n else String s\n | _ -> s\n\n(* debug_log — no-op in production, used by CEK evaluator for component warnings *)\nlet debug_log _ _ = Nil\n\n(* mutable_list — mutable list for bytecode compiler pool entries *)\nlet mutable_list () = ListRef (ref [])\n\n","(* generated code *)"],"names":[],"mappings":"EA0csB,Q,EAAA,OAAgB,C,EAHlB,IAAG,C,WATrB,K,CAAA,0B,CAAA,4BAEE,SAFF,SAGE,UAA4B,UAA5B,OAA4B,iBAAqB,K,CAAA,EACG,IAAxC,MAAP,OAAO,EAAP,OAAO,aAAwC,OAC/C,eACA,EAAC,C,EATG,SAAiC,SAAW,Q,EAF7B,WAAsB,C,KAHrC,WAA8B,WACD,YAAD,EAAjB,SAAiB,WAAiC,C,EAL7B,QAAd,OAAc,eAAoB,2BAA0C,OAAF,OAAE,cAA6B,UAAI,C,EADhG,eAAsC,C,GAFvB,QAAd,OAAc,eAAoB,2BAA6C,OAAF,OAAE,cAA+B,OAAF,OAAE,cAAmC,OAAF,OAAE,cAA6B,UAAI,C,EAHhM,YAAlB,QAAX,OAAW,aAAkB,eAAU,C,EAJR,GAAmB,C,EADpB,GAA+B,C,EAR3B,IAAG,C,KAHrC,K,CAAA,qBACqB,IADrB,OACqB,eACd,IAAG,C,EAXiB,cAAc,K,MAAzC,GANA,Q,CAAA,4BACqB,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,uDAEzC,QACH,KAET,qBAA+C,IAC5C,C,KAZH,K,CAAA,4BACc,0BAA4B,OACnC,IAAG,C,KAPV,K,CAAA,4BACmB,GAAP,OAAO,eAAyB,OAA4B,eAAZ,E,GACrD,GAAO,C,EAPyE,kDAAM,C,MAJ7F,K,CAAA,8BAES,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,mBAChB,QADgB,UAChB,iBAAK,eAAgC,SAAE,MACtC,KAA2E,IAA3E,QADsC,UACtC,OAAsC,aAAqC,WAA3E,cAA4E,QAC5F,OACH,IAAG,C,MAfV,K,CAAA,8BAES,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,6BAChB,+BAAK,eAAQ,SAAE,MACd,KAA2D,QAD7C,UACd,qBAA8C,aAAa,eAA3D,cAA6D,QAC7E,wDAAmD,OACtD,IAAG,C,KARe,K,CAAA,qBAA6E,IAA5C,GAAjC,OAA4B,eAAK,aAA4C,OAAQ,GAAO,C,KAD5F,K,CAAA,4BAA4B,UAAmB,KAAS,qBAAiC,C,GAJ/F,K,CAAA,E,EAAA,mB,GAAA,uBACF,oBACE,GAAP,OAAO,eAA0B,OAA4B,gBAAZ,E,GACtD,qBAAiC,C,GAVxC,K,CAAA,E,EAAA,0CACqB,OAAU,OAAI,OAAa,2BAC5B,OAAU,OAAI,OAAa,8B,CAAA,EAChC,OACR,GAAU,C,KAdjB,mCACmC,SAApB,EAAuC,OAAvC,cAA+C,GACtD,sBAAqD,C,EATxC,wBAA6B,C,EADtB,kCAAqC,C,EADvC,kCAAqC,C,EAD3C,wBAA6B,C,EAD9B,wBAA6B,C,EADtB,kCAAqC,C,EANxD,cACM,eACN,cACP,EAAM,C,MAVkB,K,CAAA,sCAE2B,IAAlB,QAAL,OAAK,aAAkB,KADrB,IACqB,UADrB,QAEvB,qBAAuC,C,EALtB,EAAC,C,EAHd,QAAX,OAAW,eACX,0BACA,OADwC,OACxC,cAA0C,qBACJ,C,EANjB,K,CAAA,mBAAoC,MAAiB,GAAU,C,EAJ7D,KAAO,IAAoC,QAAhB,WAAgB,IAA3C,cAA2C,IAApC,QAAyC,K,EAAmB,WAAjB,SAAiB,OAA1F,cAA0F,IACvF,C,EALiB,KAAO,IAAP,cAAO,QAAgB,K,EAAmB,QAAjB,SAAiB,OAA9D,cAA8D,IAC3D,C,MANwB,QAAyB,IAAzB,gCAAyB,SAA0B,+B,MAH9E,K,CAAA,qBAGE,QADa,IAFf,SAEE,OAA4B,aAAoB,OAAnC,eACb,0BAAiF,aAE5E,qBAA4C,C,EARvB,KAAmC,YAAhB,WAAgB,IAAnC,cAAmC,WAAI,C,EAAoB,IAAD,WAAjB,SAAiB,OAAjF,aAAkF,K,EAXvE,K,CAAA,mBAAyB,MAAiB,GAAU,C,EADjB,SAAmB,sB,EADK,IAApB,SAAmB,QAA/C,aAAgD,K,EADtD,8CAAa,C,EADa,IAAxB,EAAL,QAAK,aAAwB,K,EADJ,IAAtB,EAAL,QAAK,aAAsB,K,EADF,IAArB,EAAL,QAAK,aAAqB,K,EADE,IAAtB,EAAL,QAAK,aAAsB,K,EADM,IAAzB,EAAL,QAAK,aAAyB,K,EADN,IAAtB,EAAL,QAAK,aAAsB,K,EADF,IAArB,EAAL,QAAK,aAAqB,K,EADJ,IAAnB,EAAL,QAAK,aAAmB,K,EAF8B,EAAhB,SAAgB,sB,EAHV,WAAe,IAA9B,SAApB,EAAkC,QAAlC,aAAkD,K,EADf,IAAf,SAAc,QAAnC,aAAoC,K,EADf,IAAtB,IAAJ,QAAI,aAAsB,K,EAFW,WAAf,SAAc,yBAAsB,C,EADnB,WAAf,SAAc,yBAAsB,C,EADzB,WAAf,SAAc,uBAAoB,C,EADb,WAAoB,IAAnC,SAAlB,EAAgC,QAAhC,aAAqD,K,EANlD,KAAO,QAAP,QAAO,cAAyB,K,GAN5C,OASb,+C,GAAA,2BARS,cAKT,MADQ,IAAR,QAAQ,eACR,0BAA4D,IAIrC,GAAwB,EAA1C,QAA0C,aAAkB,OAA1C,eAA2C,qB,CAAC,C,EAd5B,IAApB,EAAP,QAAO,aAAoB,K,EATtB,kCAA0B,C,EAD5B,wBAAuB,C,EADxB,kCAAwB,C,EADf,wBAAgC,C,EADtC,wBAAyB,C,EADzB,kCAA2B,C,EAH5B,qCAAuB,C,EADtB,qCAAwB,C,EADrB,qCAAmB,C,EADrB,+CAAyB,C,EAD3B,WAAe,C,EADQ,IAApB,EAAP,SAAO,aAAoB,K,EAHT,WAAkB,oBAAC,C,EAHjC,qCAAuB,C,EADzB,qCAAqB,C,EADrB,yDAAuB,C,EAD1B,+CAAkB,C,EADlB,+CAAkB,C,EADlB,qCAAiB,C,EADlB,qCAAgB,C,EADf,qCAAiB,C,EADjB,+CAAkB,C,EADnB,qCAAgB,C,EADjB,qCAAe,C,EAHN,+CAA2B,C,EAD5B,+CAAwB,C,EAD1B,+CAAuB,C,EADrB,yDAA2B,C,EADnC,qCAAgB,C,EADhB,qCAAgB,C,EADZ,+CAAoB,C,EADpB,+CAAqB,C,EADpB,yDAAuB,C,EAHlB,qCAA0B,C,EAD3B,qCAAyB,C,EADzB,yDAA2B,C,EAD9B,+CAAuB,C,EADtB,yDAAyB,C,EAD9B,+CAAmB,C,EADlB,+CAAoB,C,EADvB,qCAAgB,C,EADZ,qCAAoB,C,EADvB,qCAAiB,C,EADhB,qCAAkB,C,EADnB,qCAAiB,C,EADK,IAAb,SAAa,K,EAHrB,qCAAiB,C,EADjB,qCAAiB,C,EADlB,qCAAgB,C,EADF,+CAA+B,C,EADrC,+CAAyB,C,EADvB,+CAA2B,C,EAD/B,+CAAuB,C,EADtB,+CAAwB,C,EAD3B,qCAAoB,C,EADrB,qCAAmB,C,EADrB,qCAAiB,C,EADjB,qCAAiB,C,EADd,qCAAoB,C,EADrB,qCAAmB,C,EADnB,qCAAmB,C,EADtB,qCAAgB,C,EADd,qCAAkB,C,EAHZ,+CAA0B,C,EADjC,+CAAmB,C,EADnB,+CAAmB,C,EADhB,qCAAqB,C,EADzB,+CAAkB,C,EADjB,qCAAkB,C,EADlB,qCAAiB,C,EADlB,qCAAgB,C,EADhB,WAAW,C,EADb,qCAAe,C,EADX,+CAAoB,C,EADnB,+CAAqB,C,EADtB,qCAAmB,C,EADnB,qCAAmB,C,EADlB,+CAAqB,C,EADvB,+CAAmB,C,EADjB,+CAAqB,C,EADtB,qCAAmB,C,EADnB,qCAAmB,C,EADlB,qCAAoB,C,EAHiB,GAAlB,KAAkB,IAAlB,OAAkB,eAAyB,oBAAC,C,EAD/D,QAAM,EAAN,OAAM,eAA8C,QAC3C,oBAAuD,C,SAnB7E,O,CAAA,qB,CAAA,yCACY,wCAEV,OAEE,IADQ,aACR,a,AAAA,I,AAAA,G,EAAA,IACQ,OACL,qBAAkC,C,SAvC3C,QA0BY,mC,GAAA,6C,CALF,EAKE,qBAnBV,oEAOyC,0BAD5B,0BALA,kCAUK,0BAHsB,iBAHxB,2BAGA,0BAEE,0BARL,0BAOC,0BAJ+B,0BAF3B,mBAIF,uDAHqB,0BADK,0BAUG,0BAAxB,0BAJuB,0BAEE,kBAVL,2BAG5B,0BAFsB,0BAQc,0BAEF,0BANZ,0BAMnB,mBAER,8B,CAhBwB,EAgBxB,qBAnBR,YACgB,0BAAwB,0BAC3B,0BAAuB,kCACtB,YAAkB,M,UAAA,yD,GAAA,qDAqBtB,EArBsB,K,CAAA,qBAoBhC,OAAK,EApB2B,OAoBhC,SAAK,EAAL,OAAK,aAA2B,G,AAAA,I,AAAA,G,EAAA,IAAW,QAEnC,KAAG,C,MAlCb,K,CAAA,0B,CAAA,E,EAAA,0B,GAAA,iDAGO,qBAA4D,C,MAVnE,K,CAAA,E,EAAA,mB,GAAA,+BAEe,+BAAK,eAAW,SAAE,IADI,IACJ,UADjB,qBAAK,aAAgB,OAEZ,GAAkC,EAApD,QAAoD,aAAW,OAA7C,eAA8C,oBAAC,C,EARxC,EAAtB,SAAsB,Q,KAV2B,EAAR,SAAQ,eAAa,aAA6B,8BAAiB,wBAAa,GAAC,C,MAZpI,K,CAAA,E,EAAA,2DAEkB,sBADI,EACJ,UADI,cAOpB,UAAuC,gBAPnB,UAOS,cAH7B,MAG6B,UAJ7B,kBAAY,eACZ,iCAA4E,oBAM5E,IADY,EAAZ,OAAY,aACZ,QAEE,GADQ,GAAmB,KAA3B,OAA2B,aAA4G,OAA/H,aACS,GAAjB,OAAiB,aAAO,OAAxB,c,EACgB,GAAoB,EAAtC,SAAsC,eAAS,OAAT,aAAwB,OAA5C,eAA6C,oBAAC,C,GAtBnD,QAGN,0B,GAAA,6BADM,oBADH,EAGa,GAAyB,EAA3C,QAA2C,aAAS,OAAlC,eAAmC,qBAAC,C,EAPhB,GAA5B,KAAjB,OAAiB,aAA4B,qB,EAJH,IAAhB,SAAgB,K,GAbzB,QAOR,4DAJP,OAAG,aAAkB,OAChB,uCADsB,kC,EAGb,GADD,GAFc,mBAEd,EAKR,yBAAS,C,EAfhB,QAAM,EAAN,OAAM,eAA8C,OAExB,KAAlB,OAAkB,eAA8B,qBAD9C,EAC8C,UAD9C,c,CAC+C,C,SCZ7D,mBDmHE,MCnHF,QDmHE,cAkOgD,iZAAlB,QA1Nc,OA0Nd,aAAkB,0H,QCrVlD,4D,EAAA,c,QAAA,8B,EAAA,c,EAAA,c,WAAA,0C,EAAA,c,EAAA,e,EAAA,e,iBAAA","ignoreList":[1]}},{"offset":{"line":0,"column":157617},"map":{"version":3,"sources":["/workspace_root/lib/sx_ref.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_ref.ml — Auto-generated from SX spec by hosts/ocaml/bootstrap.py *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* Trampoline — forward ref, resolved after eval_expr is defined. *)\nlet trampoline_fn : (value -> value) ref = ref (fun v -> v)\nlet trampoline v = !trampoline_fn v\n\n\n\n(* === Mutable state for strict mode === *)\n(* These are defined as top-level refs because the transpiler cannot handle\n global set! mutation (it creates local refs that shadow the global). *)\nlet _strict_ref = ref (Bool false)\nlet _prim_param_types_ref = ref Nil\n\n(* JIT call hook — cek_call checks this before CEK dispatch for named\n lambdas. Registered by sx_server.ml after compiler loads. Tests\n run with hook = None (pure CEK, no compilation dependency). *)\nlet jit_call_hook : (value -> value list -> value option) option ref = ref None\n\n(* Component trace — captures kont from last CEK error for diagnostics *)\nlet _last_error_kont : value ref = ref Nil\n\n\n\n(* === Transpiled from evaluator (frames + eval + CEK) === *)\n\n(* make-cek-state *)\nlet rec make_cek_state control env kont =\n (CekState { cs_control = control; cs_env = env; cs_kont = kont; cs_phase = \"eval\"; cs_value = Nil })\n\n(* make-cek-value *)\nand make_cek_value value env kont =\n (CekState { cs_control = Nil; cs_env = env; cs_kont = kont; cs_phase = \"continue\"; cs_value = value })\n\n(* cek-terminal? *)\nand cek_terminal_p state =\n (let _and = (prim_call \"=\" [(get (state) ((String \"phase\"))); (String \"continue\")]) in if not (sx_truthy _and) then _and else (empty_p ((get (state) ((String \"kont\"))))))\n\n(* cek-control *)\nand cek_control s =\n (get (s) ((String \"control\")))\n\n(* cek-env *)\nand cek_env s =\n (get (s) ((String \"env\")))\n\n(* cek-kont *)\nand cek_kont s =\n (get (s) ((String \"kont\")))\n\n(* cek-phase *)\nand cek_phase s =\n (get (s) ((String \"phase\")))\n\n(* cek-value *)\nand cek_value s =\n (get (s) ((String \"value\")))\n\n(* make-if-frame *)\nand make_if_frame then_expr else_expr env =\n (CekFrame { cf_type = \"if\"; cf_env = env; cf_name = else_expr; cf_body = then_expr; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-when-frame *)\nand make_when_frame body_exprs env =\n (CekFrame { cf_type = \"when\"; cf_env = env; cf_name = Nil; cf_body = body_exprs; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-begin-frame *)\nand make_begin_frame remaining env =\n (CekFrame { cf_type = \"begin\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-let-frame *)\nand make_let_frame name remaining body local =\n (CekFrame { cf_type = \"let\"; cf_env = local; cf_name = name; cf_body = body; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-define-frame *)\nand make_define_frame name env has_effects effect_list =\n (CekFrame { cf_type = \"define\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = has_effects; cf_extra2 = effect_list })\n\n(* make-set-frame *)\nand make_set_frame name env =\n (CekFrame { cf_type = \"set\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-arg-frame *)\nand make_arg_frame f evaled remaining env raw_args head_name =\n (CekFrame { cf_type = \"arg\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = evaled; cf_results = raw_args; cf_extra = (let _or = head_name in if sx_truthy _or then _or else Nil); cf_extra2 = Nil })\n\n(* make-call-frame *)\nand make_call_frame f args env =\n (CekFrame { cf_type = \"call\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = f; cf_args = args; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-cond-frame *)\nand make_cond_frame remaining env scheme_p =\n (CekFrame { cf_type = \"cond\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = scheme_p; cf_extra2 = Nil })\n\n(* make-case-frame *)\nand make_case_frame match_val remaining env =\n (CekFrame { cf_type = \"case\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = match_val; cf_extra2 = Nil })\n\n(* make-thread-frame *)\nand make_thread_frame remaining env =\n (CekFrame { cf_type = \"thread\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-map-frame *)\nand make_map_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool false); cf_extra2 = Nil })\n\n(* make-map-indexed-frame *)\nand make_map_indexed_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool true); cf_extra2 = Nil })\n\n(* make-filter-frame *)\nand make_filter_frame f remaining results current_item env =\n (CekFrame { cf_type = \"filter\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = current_item; cf_extra2 = Nil })\n\n(* make-reduce-frame *)\nand make_reduce_frame f remaining env =\n (CekFrame { cf_type = \"reduce\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-for-each-frame *)\nand make_for_each_frame f remaining env =\n (CekFrame { cf_type = \"for-each\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-some-frame *)\nand make_some_frame f remaining env =\n (CekFrame { cf_type = \"some\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-every-frame *)\nand make_every_frame f remaining env =\n (CekFrame { cf_type = \"every\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-scope-frame *)\nand make_scope_frame name remaining env =\n (CekFrame { cf_type = \"scope\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-provide-frame *)\nand make_provide_frame name value remaining env =\n (CekFrame { cf_type = \"provide\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = value; cf_extra2 = Nil })\n\n(* make-scope-acc-frame *)\nand make_scope_acc_frame name value remaining env =\n (CekFrame { cf_type = \"scope-acc\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = (let _or = value in if sx_truthy _or then _or else Nil); cf_extra2 = (List []) })\n\n(* make-reset-frame *)\nand make_reset_frame env =\n (CekFrame { cf_type = \"reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dict-frame *)\nand make_dict_frame remaining results env =\n (CekFrame { cf_type = \"dict\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = results; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-and-frame *)\nand make_and_frame remaining env =\n (CekFrame { cf_type = \"and\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-or-frame *)\nand make_or_frame remaining env =\n (CekFrame { cf_type = \"or\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dynamic-wind-frame *)\nand make_dynamic_wind_frame phase body_thunk after_thunk env =\n (CekFrame { cf_type = \"dynamic-wind\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = phase; cf_extra2 = Nil })\n\n(* make-reactive-reset-frame *)\nand make_reactive_reset_frame env update_fn first_render_p =\n (CekFrame { cf_type = \"reactive-reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = update_fn; cf_extra2 = first_render_p })\n\n(* make-deref-frame *)\nand make_deref_frame env =\n (CekFrame { cf_type = \"deref\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-ho-setup-frame *)\nand make_ho_setup_frame ho_type remaining_args evaled_args env =\n (CekFrame { cf_type = \"ho-setup\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining_args; cf_f = Nil; cf_args = evaled_args; cf_results = Nil; cf_extra = ho_type; cf_extra2 = Nil })\n\n(* make-comp-trace-frame *)\nand make_comp_trace_frame name file =\n (CekFrame { cf_type = \"comp-trace\"; cf_env = file; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* kont-collect-comp-trace *)\nand kont_collect_comp_trace kont =\n (if sx_truthy ((empty_p (kont))) then (List []) else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"comp-trace\")])) then (cons ((let _d = Hashtbl.create 2 in Hashtbl.replace _d \"file\" (get (frame) ((String \"file\"))); Hashtbl.replace _d \"name\" (get (frame) ((String \"name\"))); Dict _d)) ((kont_collect_comp_trace ((rest (kont)))))) else (kont_collect_comp_trace ((rest (kont)))))))\n\n(* make-handler-frame *)\nand make_handler_frame handlers remaining env =\n (CekFrame { cf_type = \"handler\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = handlers; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-restart-frame *)\nand make_restart_frame restarts remaining env =\n (CekFrame { cf_type = \"restart\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = restarts; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-signal-return-frame *)\nand make_signal_return_frame env saved_kont =\n (CekFrame { cf_type = \"signal-return\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = saved_kont; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* find-matching-handler *)\nand find_matching_handler handlers condition =\n (if sx_truthy ((empty_p (handlers))) then Nil else (let pair = (first (handlers)) in (let pred = (first (pair)) in let handler_fn = (nth (pair) ((Number 1.0))) in (if sx_truthy ((cek_call (pred) ((List [condition])))) then handler_fn else (find_matching_handler ((rest (handlers))) (condition))))))\n\n(* kont-find-handler *)\nand kont_find_handler kont condition =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"handler\")])) then (let match' = (find_matching_handler ((get (frame) ((String \"f\")))) (condition)) in (if sx_truthy ((is_nil (match'))) then (kont_find_handler ((rest (kont))) (condition)) else match')) else (kont_find_handler ((rest (kont))) (condition)))))\n\n(* find-named-restart *)\nand find_named_restart restarts name =\n (if sx_truthy ((empty_p (restarts))) then Nil else (let entry = (first (restarts)) in (if sx_truthy ((prim_call \"=\" [(first (entry)); name])) then entry else (find_named_restart ((rest (restarts))) (name)))))\n\n(* kont-find-restart *)\nand kont_find_restart kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"restart\")])) then (let match' = (find_named_restart ((get (frame) ((String \"f\")))) (name)) in (if sx_truthy ((is_nil (match'))) then (kont_find_restart ((rest (kont))) (name)) else (List [match'; frame; (rest (kont))]))) else (kont_find_restart ((rest (kont))) (name)))))\n\n(* frame-type *)\nand frame_type f =\n (get (f) ((String \"type\")))\n\n(* kont-push *)\nand kont_push frame kont =\n (cons (frame) (kont))\n\n(* kont-top *)\nand kont_top kont =\n (first (kont))\n\n(* kont-pop *)\nand kont_pop kont =\n (rest (kont))\n\n(* kont-empty? *)\nand kont_empty_p kont =\n (empty_p (kont))\n\n(* kont-capture-to-reset *)\nand kont_capture_to_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"shift without enclosing reset\")))) else (let frame = (first (k)) in (if sx_truthy ((let _or = (prim_call \"=\" [(frame_type (frame)); (String \"reset\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")]))) then (List [captured; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* kont-find-provide *)\nand kont_find_provide kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"provide\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_provide ((rest (kont))) (name)))))\n\n(* kont-find-scope-acc *)\nand kont_find_scope_acc kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"scope-acc\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_scope_acc ((rest (kont))) (name)))))\n\n(* has-reactive-reset-frame? *)\nand has_reactive_reset_frame_p kont =\n (if sx_truthy ((empty_p (kont))) then (Bool false) else (if sx_truthy ((prim_call \"=\" [(frame_type ((first (kont)))); (String \"reactive-reset\")])) then (Bool true) else (has_reactive_reset_frame_p ((rest (kont))))))\n\n(* kont-capture-to-reactive-reset *)\nand kont_capture_to_reactive_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"reactive deref without enclosing reactive-reset\")))) else (let frame = (first (k)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")])) then (List [captured; frame; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* *custom-special-forms* *)\nand custom_special_forms =\n (Dict (Hashtbl.create 0))\n\n(* register-special-form! *)\nand register_special_form name handler =\n (sx_dict_set_b custom_special_forms name handler)\n\n(* *render-check* *)\nand render_check =\n Nil\n\n(* *render-fn* *)\nand render_fn =\n Nil\n\n(* *strict* *)\nand _strict_ = !_strict_ref\n\n(* set-strict! *)\nand set_strict_b val' =\n _strict_ref := val'; Nil\n\n(* *prim-param-types* *)\nand _prim_param_types_ = !_prim_param_types_ref\n\n(* set-prim-param-types! *)\nand set_prim_param_types_b types =\n _prim_param_types_ref := types; Nil\n\n(* value-matches-type? *)\nand value_matches_type_p val' expected_type =\n (if sx_truthy ((prim_call \"=\" [expected_type; (String \"any\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"number\")])) then (number_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"string\")])) then (string_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"boolean\")])) then (boolean_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"nil\")])) then (is_nil (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"list\")])) then (list_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"dict\")])) then (dict_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"lambda\")])) then (is_lambda (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"symbol\")])) then (prim_call \"=\" [(type_of (val')); (String \"symbol\")]) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"keyword\")])) then (prim_call \"=\" [(type_of (val')); (String \"keyword\")]) else (if sx_truthy ((let _and = (string_p (expected_type)) in if not (sx_truthy _and) then _and else (prim_call \"ends-with?\" [expected_type; (String \"?\")]))) then (let _or = (is_nil (val')) in if sx_truthy _or then _or else (value_matches_type_p (val') ((prim_call \"slice\" [expected_type; (Number 0.0); (prim_call \"-\" [(prim_call \"string-length\" [expected_type]); (Number 1.0)])])))) else (Bool true))))))))))))\n\n(* strict-check-args *)\nand strict_check_args name args =\n (if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else !_prim_param_types_ref)) then (let spec = (get (!_prim_param_types_ref) (name)) in (if sx_truthy (spec) then (let positional = (get (spec) ((String \"positional\"))) in let rest_type = (get (spec) ((String \"rest-type\"))) in (let () = ignore ((if sx_truthy (positional) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let param = (nth (pair) ((Number 1.0))) in let p_name = (first (param)) in let p_type = (nth (param) ((Number 1.0))) in (if sx_truthy ((prim_call \"<\" [idx; (len (args))])) then (let val' = (nth (args) (idx)) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (p_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); p_type; (String \" for param \"); p_name; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [i; p])) (sx_to_list positional)))); Nil) else Nil)) in (if sx_truthy ((let _and = rest_type in if not (sx_truthy _and) then _and else (prim_call \">\" [(len (args)); (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let val' = (nth (pair) ((Number 1.0))) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (rest_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); rest_type; (String \" for rest arg \"); idx; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)))) (sx_to_list (List (List.mapi (fun i v -> let i = Number (float_of_int i) in (List [i; v])) (sx_to_list (prim_call \"slice\" [args; (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))))); Nil) else Nil))) else Nil)) else Nil)\n\n(* call-lambda *)\nand call_lambda f args caller_env =\n (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (caller_env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (make_thunk ((lambda_body (f))) (local))))))\n\n(* call-component *)\nand call_component comp raw_args env =\n (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (comp))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (comp))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (comp))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_thunk ((component_body (comp))) (local)))))\n\n(* parse-keyword-args *)\nand parse_keyword_args raw_args env =\n (let kwargs = (Dict (Hashtbl.create 0)) in let children = ref ((List [])) in let i = (Number 0.0) in (let () = ignore ((List.fold_left (fun state arg -> (let idx = (get (state) ((String \"i\"))) in let skip = (get (state) ((String \"skip\"))) in (if sx_truthy (skip) then (prim_call \"assoc\" [state; (String \"skip\"); (Bool false); (String \"i\"); (prim_call \"inc\" [idx])]) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (arg)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"inc\" [idx]); (len (raw_args))]))) then (let () = ignore ((sx_dict_set_b kwargs (keyword_name (arg)) (trampoline ((eval_expr ((nth (raw_args) ((prim_call \"inc\" [idx])))) (env)))))) in (prim_call \"assoc\" [state; (String \"skip\"); (Bool true); (String \"i\"); (prim_call \"inc\" [idx])])) else (let () = ignore ((children := sx_append_b !children (trampoline ((eval_expr (arg) (env)))); Nil)) in (prim_call \"assoc\" [state; (String \"i\"); (prim_call \"inc\" [idx])])))))) (let _d = Hashtbl.create 2 in Hashtbl.replace _d (value_to_str (String \"i\")) (Number 0.0); Hashtbl.replace _d (value_to_str (String \"skip\")) (Bool false); Dict _d) (sx_to_list raw_args))) in (List [kwargs; !children])))\n\n(* cond-scheme? *)\nand cond_scheme_p clauses =\n (Bool (List.for_all (fun c -> sx_truthy ((let _and = (prim_call \"=\" [(type_of (c)); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len (c)); (Number 2.0)])))) (sx_to_list clauses)))\n\n(* is-else-clause? *)\nand is_else_clause test =\n (let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (let _and = (prim_call \"=\" [(type_of (test)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _or = (prim_call \"=\" [(symbol_name (test)); (String \"else\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(symbol_name (test)); (String \":else\")]))))\n\n(* sf-named-let *)\nand sf_named_let args env =\n (let loop_name = (symbol_name ((first (args)))) in let bindings = (nth (args) ((Number 1.0))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in let params = ref ((List [])) in let inits = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))); Nil)) in (inits := sx_append_b !inits (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))); Nil))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let loop_body = (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (first (body)) else (cons ((make_symbol ((String \"begin\")))) (body))) in let loop_fn = (make_lambda (!params) (loop_body) (env)) in (let () = ignore ((set_lambda_name loop_fn (sx_to_string loop_name))) in (let () = ignore ((env_bind (lambda_closure (loop_fn)) (sx_to_string loop_name) loop_fn)) in (let init_vals = (List (List.map (fun e -> (trampoline ((eval_expr (e) (env))))) (sx_to_list !inits))) in (trampoline (call_lambda (loop_fn) (init_vals) (env)))))))))\n\n(* sf-lambda *)\nand sf_lambda args env =\n (let params_expr = (first (args)) in let body_exprs = (rest (args)) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (cons ((make_symbol ((String \"begin\")))) (body_exprs))) in let param_names = (List (List.map (fun p -> (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")]))))) then (symbol_name ((first (p)))) else p))) (sx_to_list params_expr))) in (make_lambda (param_names) (body) (env)))\n\n(* sf-defcomp *)\nand sf_defcomp args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (last (args)) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in let param_types = (nth (parsed) ((Number 2.0))) in let affinity = (defcomp_kwarg (args) ((String \"affinity\")) ((String \"auto\"))) in (let comp = (make_component (comp_name) (params) (has_children) (body) (env) (affinity)) in let effects = (defcomp_kwarg (args) ((String \"effects\")) (Nil)) in (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((is_nil (param_types)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((empty_p ((prim_call \"keys\" [param_types]))))))))) then (component_set_param_types_b (comp) (param_types)) else Nil)) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((is_nil (effects))))))) then (let effect_list = (if sx_truthy ((prim_call \"=\" [(type_of (effects)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effects))) else (List [(String (sx_str [effects]))])) in let effect_anns = (if sx_truthy ((env_has (env) ((String \"*effect-annotations*\")))) then (env_get (env) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns (symbol_name (name_sym)) effect_list)) in (env_bind env (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (let () = ignore ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (comp) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) comp)) in comp))))))\n\n(* defcomp-kwarg *)\nand defcomp_kwarg args key default =\n (let end' = (prim_call \"-\" [(len (args)); (Number 1.0)]) in let result' = ref (default) in (let () = ignore ((List.iter (fun i -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((nth (args) (i)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(keyword_name ((nth (args) (i)))); key]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"+\" [i; (Number 1.0)]); end'])))) then (let val' = (nth (args) ((prim_call \"+\" [i; (Number 1.0)]))) in (result' := (if sx_truthy ((prim_call \"=\" [(type_of (val')); (String \"keyword\")])) then (keyword_name (val')) else val'); Nil)) else Nil))) (sx_to_list (prim_call \"range\" [(Number 2.0); end'; (Number 1.0)])); Nil)) in !result'))\n\n(* parse-comp-params *)\nand parse_comp_params params_expr =\n (let params = ref ((List [])) in let param_types = (Dict (Hashtbl.create 0)) in let has_children = ref ((Bool false)) in let in_key = ref ((Bool false)) in (let () = ignore ((List.iter (fun p -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")])))))) then (let name = (symbol_name ((first (p)))) in let ptype = (nth (p) ((Number 2.0))) in (let type_val = (if sx_truthy ((prim_call \"=\" [(type_of (ptype)); (String \"symbol\")])) then (symbol_name (ptype)) else ptype) in (if sx_truthy ((Bool (not (sx_truthy (!has_children))))) then (let () = ignore ((params := sx_append_b !params name; Nil)) in (sx_dict_set_b param_types name type_val)) else Nil))) else (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (let name = (symbol_name (p)) in (if sx_truthy ((prim_call \"=\" [name; (String \"&key\")])) then (in_key := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&rest\")])) then (has_children := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&children\")])) then (has_children := (Bool true); Nil) else (if sx_truthy (!has_children) then Nil else (if sx_truthy (!in_key) then (params := sx_append_b !params name; Nil) else (params := sx_append_b !params name; Nil))))))) else Nil)))) (sx_to_list params_expr); Nil)) in (List [!params; !has_children; param_types])))\n\n(* sf-defisland *)\nand sf_defisland args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (cons ((make_symbol ((String \"begin\")))) (body_exprs))) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in (let island = (make_island (comp_name) (params) (has_children) (body) (env)) in (let () = ignore ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (island) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) island)) in island))))\n\n(* sf-defmacro *)\nand sf_defmacro args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (nth (args) ((Number 2.0))) in let parsed = (parse_macro_params (params_raw)) in let params = (first (parsed)) in let rest_param = (nth (parsed) ((Number 1.0))) in (let mac = (make_macro (params) (rest_param) (body) (env) ((symbol_name (name_sym)))) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) mac)) in mac)))\n\n(* parse-macro-params *)\nand parse_macro_params params_expr =\n (let params = ref ((List [])) in let rest_param = ref (Nil) in (let () = ignore ((List.fold_left (fun state p -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (p)); (String \"&rest\")]))) then (prim_call \"assoc\" [state; (String \"in-rest\"); (Bool true)]) else (if sx_truthy ((get (state) ((String \"in-rest\")))) then (let () = ignore ((rest_param := (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state) else (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state)))) (let _d = Hashtbl.create 1 in Hashtbl.replace _d (value_to_str (String \"in-rest\")) (Bool false); Dict _d) (sx_to_list params_expr))) in (List [!params; !rest_param])))\n\n(* qq-expand *)\nand qq_expand template env =\n (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (template)); (String \"list\")])))))) then template else (if sx_truthy ((empty_p (template))) then (List []) else (let head = (first (template)) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (head)); (String \"unquote\")]))) then (trampoline ((eval_expr ((nth (template) ((Number 1.0)))) (env)))) else (List.fold_left (fun result' item -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")]))))) then (let spliced = (trampoline ((eval_expr ((nth (item) ((Number 1.0)))) (env)))) in (if sx_truthy ((prim_call \"=\" [(type_of (spliced)); (String \"list\")])) then (prim_call \"concat\" [result'; spliced]) else (if sx_truthy ((is_nil (spliced))) then result' else (prim_call \"concat\" [result'; (List [spliced])])))) else (prim_call \"concat\" [result'; (List [(qq_expand (item) (env))])]))) (List []) (sx_to_list template))))))\n\n(* sf-letrec *)\nand sf_letrec args env =\n (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in let names = ref ((List [])) in let val_exprs = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs (nth (binding) ((Number 1.0))); Nil)) in (env_bind local (sx_to_string vname) Nil)))))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))) in let val_expr = (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs val_expr; Nil)) in (env_bind local (sx_to_string vname) Nil))))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let () = ignore ((let values = (List (List.map (fun e -> (trampoline ((eval_expr (e) (local))))) (sx_to_list !val_exprs))) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [!names; values])); Nil)) in (List.iter (fun val' -> ignore ((if sx_truthy ((is_lambda (val'))) then (List.iter (fun n -> ignore ((env_bind (lambda_closure (val')) (sx_to_string n) (env_get (local) (n))))) (sx_to_list !names); Nil) else Nil))) (sx_to_list values); Nil)))) in (let () = ignore ((List.iter (fun e -> ignore ((trampoline ((eval_expr (e) (local)))))) (sx_to_list (prim_call \"slice\" [body; (Number 0.0); (prim_call \"dec\" [(len (body))])])); Nil)) in (make_thunk ((last (body))) (local))))))\n\n(* step-sf-letrec *)\nand step_sf_letrec args env kont =\n (let thk = (sf_letrec (args) (env)) in (make_cek_state ((thunk_expr (thk))) ((thunk_env (thk))) (kont)))\n\n(* sf-dynamic-wind *)\nand sf_dynamic_wind args env =\n (let before = (trampoline ((eval_expr ((first (args))) (env)))) in let body = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let after = (trampoline ((eval_expr ((nth (args) ((Number 2.0)))) (env)))) in (dynamic_wind_call (before) (body) (after) (env)))\n\n(* sf-scope *)\nand sf_scope args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body_exprs = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest) ((Number 1.0)))) (env)))); Nil)) in (body_exprs := (prim_call \"slice\" [rest; (Number 2.0)]); Nil)) else (body_exprs := rest; Nil))) in (let () = ignore ((scope_push (name) (!val'))) in (let result' = ref (Nil) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list !body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))))\n\n(* sf-provide *)\nand sf_provide args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) in let result' = ref (Nil) in (let () = ignore ((scope_push (name) (val'))) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))\n\n(* expand-macro *)\nand expand_macro mac raw_args env =\n (let local = (env_merge ((macro_closure (mac))) (env)) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (if sx_truthy ((prim_call \"<\" [(nth (pair) ((Number 1.0))); (len (raw_args))])) then (nth (raw_args) ((nth (pair) ((Number 1.0))))) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [p; i])) (sx_to_list (macro_params (mac)))))); Nil)) in (let () = ignore ((if sx_truthy ((macro_rest_param (mac))) then (env_bind local (sx_to_string (macro_rest_param (mac))) (prim_call \"slice\" [raw_args; (len ((macro_params (mac))))])) else Nil)) in (trampoline ((eval_expr ((macro_body (mac))) (local)))))))\n\n(* cek-run — iterative to avoid OCaml/WASM stack overflow *)\nand cek_run state =\n let s = ref state in\n (try\n while not (sx_truthy (cek_terminal_p !s)) do\n s := cek_step !s\n done;\n cek_value !s\n with Eval_error msg ->\n (if !_last_error_kont = Nil then _last_error_kont := cek_kont !s);\n raise (Eval_error msg))\n\n(* cek-step *)\nand cek_step state =\n (if sx_truthy ((prim_call \"=\" [(cek_phase (state)); (String \"eval\")])) then (step_eval (state)) else (step_continue (state)))\n\n(* step-eval *)\nand step_eval state =\n (let expr = (cek_control (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (let _match_val = (type_of (expr)) in (if _match_val = (String \"number\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"string\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"boolean\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"nil\") then (make_cek_value (Nil) (env) (kont)) else (if _match_val = (String \"symbol\") then (let name = (symbol_name (expr)) in (let val' = (if sx_truthy ((env_has (env) (name))) then (env_get (env) (name)) else (if sx_truthy ((is_primitive (name))) then (get_primitive (name)) else (if sx_truthy ((prim_call \"=\" [name; (String \"true\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [name; (String \"false\")])) then (Bool false) else (if sx_truthy ((prim_call \"=\" [name; (String \"nil\")])) then Nil else (raise (Eval_error (value_to_str (String (sx_str [(String \"Undefined symbol: \"); name])))))))))) in (let () = ignore ((if sx_truthy ((let _and = (is_nil (val')) in if not (sx_truthy _and) then _and else (prim_call \"starts-with?\" [name; (String \"~\")]))) then (debug_log ((String \"Component not found:\")) (name)) else Nil)) in (make_cek_value (val') (env) (kont))))) else (if _match_val = (String \"keyword\") then (make_cek_value ((keyword_name (expr))) (env) (kont)) else (if _match_val = (String \"dict\") then (let ks = (prim_call \"keys\" [expr]) in (if sx_truthy ((empty_p (ks))) then (make_cek_value ((Dict (Hashtbl.create 0))) (env) (kont)) else (let first_key = (first (ks)) in let remaining_entries = ref ((List [])) in (let () = ignore ((List.iter (fun k -> ignore ((remaining_entries := sx_append_b !remaining_entries (List [k; (get (expr) (k))]); Nil))) (sx_to_list (rest (ks))); Nil)) in (make_cek_state ((get (expr) (first_key))) (env) ((kont_push ((make_dict_frame (!remaining_entries) ((List [(List [first_key])])) (env))) (kont)))))))) else (if _match_val = (String \"list\") then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (step_eval_list (expr) (env) (kont))) else (make_cek_value (expr) (env) (kont))))))))))))\n\n(* step-eval-list *)\nand step_eval_list expr env kont =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((let _or = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [(type_of (head)); (String \"lambda\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(type_of (head)); (String \"list\")])))))))) then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (make_cek_state ((first (expr))) (env) ((kont_push ((make_map_frame (Nil) ((rest (expr))) ((List [])) (env))) (kont))))) else (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (step_sf_if (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (step_sf_when (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (step_sf_cond (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (step_sf_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (step_sf_and (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (step_sf_or (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (make_cek_value ((sf_defcomp (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (make_cek_value ((sf_defisland (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (make_cek_value ((sf_defmacro (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (make_cek_value ((if sx_truthy ((empty_p (args))) then Nil else (first (args)))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (make_cek_value ((qq_expand ((first (args))) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (step_sf_thread_first (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (step_sf_set_b (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (step_sf_letrec (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reset\")])) then (step_sf_reset (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"shift\")])) then (step_sf_shift (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"deref\")])) then (step_sf_deref (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"scope\")])) then (step_sf_scope (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"provide\")])) then (step_sf_provide (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"context\")])) then (step_sf_context (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emit!\")])) then (step_sf_emit (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emitted\")])) then (step_sf_emitted (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"handler-bind\")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"restart-case\")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"signal-condition\")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"invoke-restart\")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (step_sf_match (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"dynamic-wind\")])) then (make_cek_value ((sf_dynamic_wind (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map\")])) then (step_ho_map (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map-indexed\")])) then (step_ho_map_indexed (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"filter\")])) then (step_ho_filter (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reduce\")])) then (step_ho_reduce (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"some\")])) then (step_ho_some (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"every?\")])) then (step_ho_every (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"for-each\")])) then (step_ho_for_each (args) (env) (kont)) else (if sx_truthy ((prim_call \"has-key?\" [custom_special_forms; name])) then (make_cek_value ((cek_call ((get (custom_special_forms) (name))) (List [args; env]))) (env) (kont)) else (if sx_truthy ((let _and = (env_has (env) (name)) in if not (sx_truthy _and) then _and else (is_macro ((env_get (env) (name)))))) then (let mac = (env_get (env) (name)) in (make_cek_state ((expand_macro (mac) (args) (env))) (env) (kont))) else (if sx_truthy ((let _and = render_check in if not (sx_truthy _and) then _and else (cek_call (render_check) (List [expr; env])))) then (make_cek_value ((cek_call (render_fn) (List [expr; env]))) (env) (kont)) else (step_eval_call (head) (args) (env) (kont)))))))))))))))))))))))))))))))))))))))))))))))) else (step_eval_call (head) (args) (env) (kont)))))\n\n(* match-find-clause *)\nand match_find_clause val' clauses env =\n (if sx_truthy ((empty_p (clauses))) then Nil else (let clause = (first (clauses)) in let pattern = (first (clause)) in let body = (nth (clause) ((Number 1.0))) in let local = (env_extend (env)) in (if sx_truthy ((match_pattern (pattern) (val') (local))) then (List [local; body]) else (match_find_clause (val') ((rest (clauses))) (env)))))\n\n(* match-pattern *)\nand match_pattern pattern value env =\n (if sx_truthy ((prim_call \"=\" [pattern; (Symbol \"_\")])) then (Bool true) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (pattern)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"?\")])))) then (let pred = (trampoline ((eval_expr ((nth (pattern) ((Number 1.0)))) (env)))) in (cek_call (pred) ((List [value])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"quote\")])))) then (prim_call \"=\" [value; (nth (pattern) ((Number 1.0)))]) else (if sx_truthy ((symbol_p (pattern))) then (let () = ignore ((env_bind env (sx_to_string (symbol_name (pattern))) value)) in (Bool true)) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (list_p (value)))) then (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(len (pattern)); (len (value))])))))) then (Bool false) else (let pairs = (prim_call \"zip\" [pattern; value]) in (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list pairs))))) else (prim_call \"=\" [pattern; value]))))))\n\n(* step-sf-match *)\nand step_sf_match args env kont =\n (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"match: no clause matched \"); (inspect (val'))]))))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))\n\n(* step-sf-handler-bind *)\nand step_sf_handler_bind args env kont =\n (let handler_specs = (first (args)) in let body = (rest (args)) in let handlers = (List (List.map (fun spec -> (List [(trampoline ((eval_expr ((first (spec))) (env)))); (trampoline ((eval_expr ((nth (spec) ((Number 1.0)))) (env))))])) (sx_to_list handler_specs))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_handler_frame (handlers) ((rest (body))) (env))) (kont))))))\n\n(* step-sf-restart-case *)\nand step_sf_restart_case args env kont =\n (let body = (first (args)) in let restart_specs = (rest (args)) in let restarts = (List (List.map (fun spec -> (List [(if sx_truthy ((symbol_p ((first (spec))))) then (symbol_name ((first (spec)))) else (first (spec))); (nth (spec) ((Number 1.0))); (nth (spec) ((Number 2.0)))])) (sx_to_list restart_specs))) in (make_cek_state (body) (env) ((kont_push ((make_restart_frame (restarts) ((List [])) (env))) (kont)))))\n\n(* step-sf-signal *)\nand step_sf_signal args env kont =\n (let condition = (trampoline ((eval_expr ((first (args))) (env)))) in let handler_fn = (kont_find_handler (kont) (condition)) in (if sx_truthy ((is_nil (handler_fn))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Unhandled condition: \"); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (env) ((List [condition])) ((kont_push ((make_signal_return_frame (env) (kont))) (kont))))))\n\n(* step-sf-invoke-restart *)\nand step_sf_invoke_restart args env kont =\n (let restart_name = (let rn = (if sx_truthy ((symbol_p ((first (args))))) then (symbol_name ((first (args)))) else (trampoline ((eval_expr ((first (args))) (env))))) in (if sx_truthy ((symbol_p (rn))) then (symbol_name (rn)) else rn)) in let restart_arg = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let found = (kont_find_restart (kont) (restart_name)) in (if sx_truthy ((is_nil (found))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"No restart named: \"); (inspect (restart_name))]))))) else (let entry = (first (found)) in let restart_frame = (nth (found) ((Number 1.0))) in let rest_kont = (nth (found) ((Number 2.0))) in (let params = (nth (entry) ((Number 1.0))) in let body = (nth (entry) ((Number 2.0))) in let restart_env = (env_extend ((get (restart_frame) ((String \"env\"))))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((empty_p (params))))))) then (env_bind restart_env (sx_to_string (first (params))) restart_arg) else Nil)) in (make_cek_state (body) (restart_env) (rest_kont)))))))\n\n(* step-sf-if *)\nand step_sf_if args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_if_frame ((nth (args) ((Number 1.0)))) ((if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil)) (env))) (kont))))\n\n(* step-sf-when *)\nand step_sf_when args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_when_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-begin *)\nand step_sf_begin args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (make_cek_state ((first (args))) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_begin_frame ((rest (args))) (env))) (kont))))))\n\n(* step-sf-let *)\nand step_sf_let args env kont =\n let pairs = ref Nil in (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (make_cek_value ((sf_named_let (args) (env))) (env) (kont)) else (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in (if sx_truthy ((empty_p (bindings))) then (step_sf_begin (body) (local) (kont)) else (let first_binding = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (first (bindings)) else (List [(first (bindings)); (nth (bindings) ((Number 1.0)))])) in let rest_bindings = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (rest (bindings)) else (let pairs = ref ((List [])) in (let () = ignore ((List.fold_left (fun _acc i -> (pairs := sx_append_b !pairs (List [(nth (bindings) ((prim_call \"*\" [i; (Number 2.0)]))); (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [i; (Number 2.0)])])))]); Nil)) Nil (sx_to_list (prim_call \"range\" [(Number 1.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])])))) in !pairs))) in (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (first_binding)))); (String \"symbol\")])) then (symbol_name ((first (first_binding)))) else (first (first_binding))) in (make_cek_state ((nth (first_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) (rest_bindings) (body) (local))) (kont)))))))))\n\n(* step-sf-define *)\nand step_sf_define args env kont =\n (let name_sym = (first (args)) in let has_effects = (let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")]))) in let val_idx = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (Number 3.0) else (Number 1.0)) in let effect_list = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (nth (args) ((Number 2.0))) else Nil) in (make_cek_state ((nth (args) (val_idx))) (env) ((kont_push ((make_define_frame ((symbol_name (name_sym))) (env) (has_effects) (effect_list))) (kont)))))\n\n(* step-sf-set! *)\nand step_sf_set_b args env kont =\n (make_cek_state ((nth (args) ((Number 1.0)))) (env) ((kont_push ((make_set_frame ((symbol_name ((first (args))))) (env))) (kont))))\n\n(* step-sf-and *)\nand step_sf_and args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool true)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_and_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-or *)\nand step_sf_or args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool false)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_or_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-cond *)\nand step_sf_cond args env kont =\n (let scheme_p = (cond_scheme_p (args)) in (if sx_truthy (scheme_p) then (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (let clause = (first (args)) in let test = (first (clause)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (clause) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool true)))) (kont))))))) else (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (args)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (args) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool false)))) (kont)))))))))\n\n(* step-sf-case *)\nand step_sf_case args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_case_frame (Nil) ((rest (args))) (env))) (kont))))\n\n(* step-sf-thread-first *)\nand step_sf_thread_first args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_thread_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-lambda *)\nand step_sf_lambda args env kont =\n (make_cek_value ((sf_lambda (args) (env))) (env) (kont))\n\n(* step-sf-scope *)\nand step_sf_scope args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest_args = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest_args)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest_args)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest_args) ((Number 1.0)))) (env)))); Nil)) in (body := (prim_call \"slice\" [rest_args; (Number 2.0)]); Nil)) else (body := rest_args; Nil))) in (if sx_truthy ((empty_p (!body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (!body))) (env) ((kont_push ((make_scope_acc_frame (name) (!val') ((rest (!body))) (env))) (kont)))))))\n\n(* step-sf-provide *)\nand step_sf_provide args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_provide_frame (name) (val') ((rest (body))) (env))) (kont))))))\n\n(* step-sf-context — check kont provide frames first, then fall back to scope_stacks *)\nand step_sf_context args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let default_val = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let frame = (kont_find_provide (kont) (name)) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil (frame))))))) then (make_cek_value ((get (frame) ((String \"value\")))) (env) (kont)) else (let scope_val = (sx_context (name) (Nil)) in (make_cek_value ((if sx_truthy ((is_nil (scope_val))) then default_val else scope_val)) (env) (kont)))))\n\n(* step-sf-emit *)\nand step_sf_emit args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (let () = ignore ((if sx_truthy (frame) then (sx_dict_set_b frame (String \"emitted\") (prim_call \"append\" [(get (frame) ((String \"emitted\"))); (List [val'])])) else Nil)) in (make_cek_value (Nil) (env) (kont))))\n\n(* step-sf-emitted *)\nand step_sf_emitted args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (make_cek_value ((if sx_truthy ((is_nil (frame))) then (List []) else (get (frame) ((String \"emitted\"))))) (env) (kont)))\n\n(* step-sf-reset *)\nand step_sf_reset args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_reset_frame (env))) (kont))))\n\n(* step-sf-shift *)\nand step_sf_shift args env kont =\n (let k_name = (symbol_name ((first (args)))) in let body = (nth (args) ((Number 1.0))) in let captured_result = (kont_capture_to_reset (kont)) in let captured = (first (captured_result)) in let rest_kont = (nth (captured_result) ((Number 1.0))) in (let k = (make_cek_continuation (captured) (rest_kont)) in (let shift_env = (env_extend (env)) in (let () = ignore ((env_bind shift_env (sx_to_string k_name) k)) in (make_cek_state (body) (shift_env) (rest_kont))))))\n\n(* step-sf-deref *)\nand step_sf_deref args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_deref_frame (env))) (kont))))\n\n(* cek-call *)\nand cek_call f args =\n (let a = (if sx_truthy ((is_nil (args))) then (List []) else args) in (if sx_truthy ((is_nil (f))) then Nil else (if sx_truthy ((let _or = (is_lambda (f)) in if sx_truthy _or then _or else (is_callable (f)))) then (cek_run ((continue_with_call (f) (a) ((make_env ())) (a) ((List []))))) else Nil)))\n\n(* reactive-shift-deref *)\nand reactive_shift_deref sig' env kont =\n (let scan_result = (kont_capture_to_reactive_reset (kont)) in let captured_frames = (first (scan_result)) in let reset_frame = (nth (scan_result) ((Number 1.0))) in let remaining_kont = (nth (scan_result) ((Number 2.0))) in let update_fn = (get (reset_frame) ((String \"update-fn\"))) in (let sub_disposers = ref ((List [])) in (let subscriber = (NativeFn (\"\\206\\187\", fun _args -> (fun () -> let sub_disposers = ref Nil in (let () = ignore ((List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil)) in (let () = ignore ((sub_disposers := (List []); Nil)) in (let new_reset = (make_reactive_reset_frame (env) (update_fn) ((Bool false))) in let new_kont = (prim_call \"concat\" [captured_frames; (List [new_reset]); remaining_kont]) in (with_island_scope ((NativeFn (\"\\206\\187\", fun _args -> match _args with [d] -> (fun d -> let sub_disposers = ref Nil in (sub_disposers := sx_append_b !sub_disposers d; Nil)) d | _ -> Nil))) ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (cek_run ((make_cek_value ((signal_value (sig'))) (env) (new_kont))))) ())))))))) ())) in (let () = ignore ((signal_add_sub_b (sig') (subscriber))) in (let () = ignore ((register_in_scope ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (let () = ignore ((signal_remove_sub_b (sig') (subscriber))) in (List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil))) ()))))) in (let initial_kont = (prim_call \"concat\" [captured_frames; (List [reset_frame]); remaining_kont]) in (make_cek_value ((signal_value (sig'))) (env) (initial_kont))))))))\n\n(* step-eval-call *)\nand step_eval_call head args env kont =\n (let hname = (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (symbol_name (head)) else Nil) in (make_cek_state (head) (env) ((kont_push ((make_arg_frame (Nil) ((List [])) (args) (env) (args) (hname))) (kont)))))\n\n(* ho-form-name? *)\nand ho_form_name_p name =\n (let _or = (prim_call \"=\" [name; (String \"map\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"map-indexed\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"filter\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"reduce\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"some\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"every?\")]) in if sx_truthy _or then _or else (prim_call \"=\" [name; (String \"for-each\")])))))))\n\n(* ho-fn? *)\nand ho_fn_p v =\n (let _or = (is_callable (v)) in if sx_truthy _or then _or else (is_lambda (v)))\n\n(* ho-swap-args *)\nand ho_swap_args ho_type evaled =\n (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; (nth (evaled) ((Number 2.0))); a]) else evaled)) else (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; a]) else evaled)))\n\n(* ho-setup-dispatch *)\nand ho_setup_dispatch ho_type evaled env kont =\n (let ordered = (ho_swap_args (ho_type) (evaled)) in (let f = (first (ordered)) in (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_map_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map-indexed\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(Number 0.0); (first (coll))])) (env) ((List [])) ((kont_push ((make_map_indexed_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"filter\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (coll))) ((List [])) ((first (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let init = (nth (ordered) ((Number 1.0))) in let coll = (nth (ordered) ((Number 2.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (init) (env) (kont)) else (continue_with_call (f) ((List [init; (first (coll))])) (env) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"some\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool false)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_some_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"every\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool true)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_every_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"for-each\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (Nil) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (coll))) (env))) (kont)))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown HO type: \"); ho_type]))))))))))))))\n\n(* step-ho-map *)\nand step_ho_map args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-map-indexed *)\nand step_ho_map_indexed args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map-indexed\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-filter *)\nand step_ho_filter args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"filter\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-reduce *)\nand step_ho_reduce args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"reduce\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-some *)\nand step_ho_some args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"some\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-every *)\nand step_ho_every args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"every\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-for-each *)\nand step_ho_for_each args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"for-each\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-continue *)\nand step_continue state =\n (let value = (cek_value (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (if sx_truthy ((kont_empty_p (kont))) then state else (let frame = (kont_top (kont)) in let rest_k = (kont_pop (kont)) in let ft = (frame_type (frame)) in (if sx_truthy ((prim_call \"=\" [ft; (String \"if\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (make_cek_state ((get (frame) ((String \"then\")))) ((get (frame) ((String \"env\")))) (rest_k)) else (if sx_truthy ((is_nil ((get (frame) ((String \"else\")))))) then (make_cek_value (Nil) (env) (rest_k)) else (make_cek_state ((get (frame) ((String \"else\")))) ((get (frame) ((String \"env\")))) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"when\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (let body = (get (frame) ((String \"body\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (make_cek_state ((first (body))) (fenv) (rest_k)) else (make_cek_state ((first (body))) (fenv) ((kont_push ((make_begin_frame ((rest (body))) (fenv))) (rest_k))))))) else (make_cek_value (Nil) (env) (rest_k))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"begin\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then (make_cek_state ((first (remaining))) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_begin_frame ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"let\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let body = (get (frame) ((String \"body\"))) in let local = (get (frame) ((String \"env\"))) in (let () = ignore ((env_bind local (sx_to_string name) value)) in (if sx_truthy ((empty_p (remaining))) then (step_sf_begin (body) (local) (rest_k)) else (let next_binding = (first (remaining)) in let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (next_binding)))); (String \"symbol\")])) then (symbol_name ((first (next_binding)))) else (first (next_binding))) in (make_cek_state ((nth (next_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) ((rest (remaining))) (body) (local))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"define\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in let has_effects = (get (frame) ((String \"has-effects\"))) in let effect_list = (get (frame) ((String \"effect-list\"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (let () = ignore ((if sx_truthy (has_effects) then (let effect_names = (if sx_truthy ((prim_call \"=\" [(type_of (effect_list)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effect_list))) else (List [(String (sx_str [effect_list]))])) in let effect_anns = (if sx_truthy ((env_has (fenv) ((String \"*effect-annotations*\")))) then (env_get (fenv) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns name effect_names)) in (env_bind fenv (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"set\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in (let () = ignore ((env_set fenv (sx_to_string name) value)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"and\")])) then (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_and_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"or\")])) then (if sx_truthy (value) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_or_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"cond\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let scheme_p = (get (frame) ((String \"scheme\"))) in (if sx_truthy (scheme_p) then (if sx_truthy (value) then (make_cek_state ((nth ((first (remaining))) ((Number 1.0)))) (fenv) (rest_k)) else (let next_clauses = (rest (remaining)) in (if sx_truthy ((empty_p (next_clauses))) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_clause = (first (next_clauses)) in let next_test = (first (next_clause)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next_clause) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next_clauses) (fenv) ((Bool true)))) (rest_k))))))))) else (if sx_truthy (value) then (make_cek_state ((nth (remaining) ((Number 1.0)))) (fenv) (rest_k)) else (let next = (prim_call \"slice\" [remaining; (Number 2.0)]) in (if sx_truthy ((prim_call \"<\" [(len (next)); (Number 2.0)])) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_test = (first (next)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next) (fenv) ((Bool false)))) (rest_k))))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"case\")])) then (let match_val = (get (frame) ((String \"match-val\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((is_nil (match_val))) then (sf_case_step_loop (value) (remaining) (fenv) (rest_k)) else (sf_case_step_loop (match_val) (remaining) (fenv) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"thread\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (let form = (first (remaining)) in let rest_forms = (rest (remaining)) in let new_kont = (if sx_truthy ((empty_p ((rest (remaining))))) then rest_k else (kont_push ((make_thread_frame ((rest (remaining))) (fenv))) (rest_k))) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (form)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (form)))))) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (form)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (ho_form_name_p ((symbol_name ((first (form)))))))))) then (make_cek_state ((cons ((first (form))) ((cons ((List [(Symbol \"quote\"); value])) ((rest (form))))))) (fenv) (new_kont)) else (let result' = (if sx_truthy ((prim_call \"=\" [(type_of (form)); (String \"list\")])) then (let f = (trampoline ((eval_expr ((first (form))) (fenv)))) in let rargs = (List (List.map (fun a -> (trampoline ((eval_expr (a) (fenv))))) (sx_to_list (rest (form))))) in let all_args = (cons (value) (rargs)) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (sx_apply f all_args) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) (all_args) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))])))))))) else (let f = (trampoline ((eval_expr (form) (fenv)))) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (cek_call (f) (List [value])) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) ((List [value])) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))]))))))))) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv))) (rest_k)))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"arg\")])) then (let f = (get (frame) ((String \"f\"))) in let evaled = (get (frame) ((String \"evaled\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let raw_args = (get (frame) ((String \"raw-args\"))) in let hname = (get (frame) ((String \"head-name\"))) in (if sx_truthy ((is_nil (f))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) ((List []))) else Nil)) in (if sx_truthy ((empty_p (remaining))) then (continue_with_call (value) ((List [])) (fenv) (raw_args) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (value) ((List [])) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))) else (let new_evaled = (prim_call \"append\" [evaled; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) (new_evaled)) else Nil)) in (continue_with_call (f) (new_evaled) (fenv) (raw_args) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (f) (new_evaled) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"dict\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let fenv = (get (frame) ((String \"env\"))) in (let last_result = (last (results)) in let completed = (prim_call \"append\" [(prim_call \"slice\" [results; (Number 0.0); (prim_call \"dec\" [(len (results))])]); (List [(List [(first (last_result)); value])])]) in (if sx_truthy ((empty_p (remaining))) then (let d = (Dict (Hashtbl.create 0)) in (let () = ignore ((List.iter (fun pair -> ignore ((sx_dict_set_b d (first (pair)) (nth (pair) ((Number 1.0)))))) (sx_to_list completed); Nil)) in (make_cek_value (d) (fenv) (rest_k)))) else (let next_entry = (first (remaining)) in (make_cek_state ((nth (next_entry) ((Number 1.0)))) (fenv) ((kont_push ((make_dict_frame ((rest (remaining))) ((prim_call \"append\" [completed; (List [(List [(first (next_entry))])])])) (fenv))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"ho-setup\")])) then (let ho_type = (get (frame) ((String \"ho-type\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let evaled = (prim_call \"append\" [(get (frame) ((String \"evaled\"))); (List [value])]) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (ho_setup_dispatch (ho_type) (evaled) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_ho_setup_frame (ho_type) ((rest (remaining))) (evaled) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reset\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"deref\")])) then (let val' = value in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy ((is_signal (val'))))))) then (make_cek_value (val') (fenv) (rest_k)) else (if sx_truthy ((has_reactive_reset_frame_p (rest_k))) then (reactive_shift_deref (val') (fenv) (rest_k)) else (let () = ignore ((let ctx = (sx_context ((String \"sx-reactive\")) (Nil)) in (if sx_truthy (ctx) then (let dep_list = ref ((get (ctx) ((String \"deps\")))) in let notify_fn = (get (ctx) ((String \"notify\"))) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"contains?\" [!dep_list; val'])))))) then (let () = ignore ((dep_list := sx_append_b !dep_list val'; Nil)) in (signal_add_sub_b (val') (notify_fn))) else Nil)) else Nil))) in (make_cek_value ((signal_value (val'))) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reactive-reset\")])) then (let update_fn = (get (frame) ((String \"update-fn\"))) in let first_p = (get (frame) ((String \"first-render\"))) in (let () = ignore ((if sx_truthy ((let _and = update_fn in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy (first_p)))))) then (cek_call (update_fn) ((List [value]))) else Nil)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop (name))) in (make_cek_value (value) (fenv) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_scope_frame (name) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"provide\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_provide_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope-acc\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((let new_frame = (make_scope_acc_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String \"emitted\") (get (frame) ((String \"emitted\"))))) in new_frame))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"map\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let indexed = (get (frame) ((String \"indexed\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (prim_call \"append\" [results; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let call_args = (if sx_truthy (indexed) then (List [(len (new_results)); (first (remaining))]) else (List [(first (remaining))])) in let next_frame = (if sx_truthy (indexed) then (make_map_indexed_frame (f) ((rest (remaining))) (new_results) (fenv)) else (make_map_frame (f) ((rest (remaining))) (new_results) (fenv))) in (continue_with_call (f) (call_args) (fenv) ((List [])) ((kont_push (next_frame) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"filter\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let current_item = (get (frame) ((String \"current-item\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (if sx_truthy (value) then (prim_call \"append\" [results; (List [current_item])]) else results) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (remaining))) (new_results) ((first (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reduce\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (continue_with_call (f) ((List [value; (first (remaining))])) (fenv) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"for-each\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (Nil) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"some\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy (value) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_some_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"every\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool true)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_every_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"handler\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_handler_frame ((get (frame) ((String \"f\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"restart\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"signal-return\")])) then (let saved_kont = (get (frame) ((String \"f\"))) in (make_cek_value (value) ((get (frame) ((String \"env\")))) (saved_kont))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"comp-trace\")])) then (make_cek_value (value) (env) (rest_k)) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown frame type: \"); ft]))))))))))))))))))))))))))))))))))))))\n\n(* continue-with-call *)\nand continue_with_call f args env raw_args kont =\n (if sx_truthy ((continuation_p (f))) then (let arg = (if sx_truthy ((empty_p (args))) then Nil else (first (args))) in let cont_data = (continuation_data (f)) in (let captured = (get (cont_data) ((String \"captured\"))) in (let result' = (cek_run ((make_cek_value (arg) (env) (captured)))) in (make_cek_value (result') (env) (kont))))) else (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_lambda (f)))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_component (f)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_island (f)))))))))) then (make_cek_value ((sx_apply f args)) (env) (kont)) else (if sx_truthy ((is_lambda (f))) then (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (match !jit_call_hook, f with | Some hook, Lambda l when l.l_name <> None -> let args_list = match args with List a | ListRef { contents = a } -> a | _ -> [] in (match hook f args_list with Some result -> make_cek_value result local kont | None -> make_cek_state (lambda_body f) local kont) | _ -> make_cek_state ((lambda_body (f))) (local) (kont)))))) else (if sx_truthy ((let _or = (is_component (f)) in if sx_truthy _or then _or else (is_island (f)))) then (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (f))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (f))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (f))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_cek_state ((component_body (f))) (local) ((kont_push ((make_comp_trace_frame ((component_name (f))) ((component_file (f))))) (kont))))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Not callable: \"); (inspect (f))])))))))))\n\n(* sf-case-step-loop *)\nand sf_case_step_loop match_val clauses env kont =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state (body) (env) (kont)) else (let test_val = (trampoline ((eval_expr (test) (env)))) in (if sx_truthy ((prim_call \"=\" [match_val; test_val])) then (make_cek_state (body) (env) (kont)) else (sf_case_step_loop (match_val) ((prim_call \"slice\" [clauses; (Number 2.0)])) (env) (kont)))))))\n\n(* eval-expr-cek *)\nand eval_expr_cek expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n(* trampoline-cek *)\nand trampoline_cek val' =\n (if sx_truthy ((is_thunk (val'))) then (eval_expr_cek ((thunk_expr (val'))) ((thunk_env (val')))) else val')\n\n(* eval-expr *)\nand eval_expr expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n\n(* Wire up trampoline to resolve thunks via the CEK machine *)\nlet () = trampoline_fn := (fun v ->\n match v with\n | Thunk (expr, env) -> eval_expr expr (Env env)\n | _ -> v)\n\n(* Wire up the primitives trampoline so call_any in HO forms resolves Thunks *)\nlet () = Sx_primitives._sx_trampoline_fn := !trampoline_fn\n\n(* Collect component trace from a kont value *)\nlet collect_comp_trace kont =\n let trace = ref [] in\n let k = ref kont in\n while (match !k with List (_::_) -> true | _ -> false) do\n (match !k with\n | List (frame :: rest) ->\n (match frame with\n | CekFrame f when f.cf_type = \"comp-trace\" ->\n let name = match f.cf_name with String s -> s | _ -> \"?\" in\n let file = match f.cf_env with String s -> s | Nil -> \"\" | _ -> \"\" in\n trace := (name, file) :: !trace\n | Dict d when (match Hashtbl.find_opt d \"type\" with Some (String \"comp-trace\") -> true | _ -> false) ->\n let name = match Hashtbl.find_opt d \"name\" with Some (String s) -> s | _ -> \"?\" in\n let file = match Hashtbl.find_opt d \"file\" with Some (String s) -> s | _ -> \"\" in\n trace := (name, file) :: !trace\n | _ -> ());\n k := List rest\n | _ -> k := List [])\n done;\n List.rev !trace\n\n(* Format a comp-trace into a human-readable string *)\nlet format_comp_trace trace =\n match trace with\n | [] -> \"\"\n | entries ->\n let lines = List.mapi (fun i (name, file) ->\n let prefix = if i = 0 then \" in \" else \" called from \" in\n if file = \"\" then prefix ^ \"~\" ^ name\n else prefix ^ \"~\" ^ name ^ \" (\" ^ file ^ \")\"\n ) entries in\n \"\n\" ^ String.concat \"\n\" lines\n\n(* Enhance an error message with component trace *)\nlet enhance_error_with_trace msg =\n let trace = collect_comp_trace !_last_error_kont in\n _last_error_kont := Nil;\n msg ^ (format_comp_trace trace)\n\n\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":231758},"map":{"version":3,"sources":["/workspace_root/lib/sx_vm.ml","/builtin/blackbox.ml"],"sourcesContent":["(** SX bytecode VM — stack-based interpreter.\n\n Executes bytecode produced by compiler.sx.\n Designed for speed: array-based stack, direct dispatch,\n no allocation per step (unlike the CEK machine).\n\n This is the platform-native execution engine. The same bytecode\n runs on all platforms (OCaml, JS, WASM).\n\n VM types (vm_code, vm_upvalue_cell, vm_closure) are defined in\n sx_types.ml to share the mutual recursion block with [value]. *)\n\nopen Sx_types\n\n(** Call frame — one per function invocation. *)\ntype frame = {\n closure : vm_closure;\n mutable ip : int;\n base : int; (* base index in value stack for locals *)\n local_cells : (int, vm_upvalue_cell) Hashtbl.t; (* slot → shared cell for captured locals *)\n}\n\n(** VM state. *)\ntype vm = {\n mutable stack : value array;\n mutable sp : int;\n mutable frames : frame list;\n globals : (string, value) Hashtbl.t; (* live reference to kernel env *)\n}\n\n(** Forward reference for JIT compilation — set after definition. *)\nlet jit_compile_ref : (lambda -> (string, value) Hashtbl.t -> vm_closure option) ref =\n ref (fun _ _ -> None)\n\n(** Sentinel closure indicating JIT compilation was attempted and failed.\n Prevents retrying compilation on every call. *)\nlet jit_failed_sentinel = {\n vm_code = { vc_arity = -1; vc_locals = 0; vc_bytecode = [||]; vc_constants = [||] };\n vm_upvalues = [||]; vm_name = Some \"__jit_failed__\"; vm_env_ref = Hashtbl.create 0; vm_closure_env = None\n}\n\nlet is_jit_failed cl = cl.vm_code.vc_arity = -1\n\n(** Current active VM — allows HO primitives (map, filter, for-each, some)\n to call VmClosure callbacks on the same VM instead of creating a new one.\n This is critical: creating a new VM per callback loses the calling VM's\n stack/frame context, causing upvalue-captured host objects to become\n inaccessible. *)\nlet _active_vm : vm option ref = ref None\n\nlet create globals =\n { stack = Array.make 4096 Nil; sp = 0; frames = []; globals }\n\n(** Stack ops — inlined for speed. *)\nlet push vm v =\n if vm.sp >= Array.length vm.stack then begin\n let ns = Array.make (vm.sp * 2) Nil in\n Array.blit vm.stack 0 ns 0 vm.sp;\n vm.stack <- ns\n end;\n vm.stack.(vm.sp) <- v;\n vm.sp <- vm.sp + 1\n\nlet[@inline] pop vm =\n vm.sp <- vm.sp - 1;\n vm.stack.(vm.sp)\n\nlet[@inline] peek vm = vm.stack.(vm.sp - 1)\n\n(** Read operands. *)\nlet[@inline] read_u8 f =\n let v = f.closure.vm_code.vc_bytecode.(f.ip) in\n f.ip <- f.ip + 1; v\n\nlet[@inline] read_u16 f =\n let lo = f.closure.vm_code.vc_bytecode.(f.ip) in\n let hi = f.closure.vm_code.vc_bytecode.(f.ip + 1) in\n f.ip <- f.ip + 2;\n lo lor (hi lsl 8)\n\nlet[@inline] read_i16 f =\n let v = read_u16 f in\n if v >= 32768 then v - 65536 else v\n\n(** Wrap a VM closure as an SX value (NativeFn). *)\nlet closure_to_value cl =\n NativeFn (\"vm:\" ^ (match cl.vm_name with Some n -> n | None -> \"anon\"),\n fun args -> raise (Eval_error (\"VM_CLOSURE_CALL:\" ^ String.concat \",\" (List.map Sx_runtime.value_to_str args))))\n (* Placeholder — actual calls go through vm_call below *)\n\nlet _vm_insn_count = ref 0\nlet _vm_call_count = ref 0\nlet _vm_cek_count = ref 0\nlet vm_reset_counters () = _vm_insn_count := 0; _vm_call_count := 0; _vm_cek_count := 0\nlet vm_report_counters () =\n Printf.eprintf \"[vm-perf] insns=%d calls=%d cek_fallbacks=%d\\n%!\"\n !_vm_insn_count !_vm_call_count !_vm_cek_count\n\n(** Push a VM closure frame onto the current VM — no new VM allocation.\n This is the fast path for intra-VM closure calls. *)\nlet push_closure_frame vm cl args =\n let frame = { closure = cl; ip = 0; base = vm.sp; local_cells = Hashtbl.create 4 } in\n List.iter (fun a -> push vm a) args;\n for _ = List.length args to cl.vm_code.vc_locals - 1 do push vm Nil done;\n vm.frames <- frame :: vm.frames\n\n(** Convert compiler output (SX dict) to a vm_code object. *)\nlet code_from_value v =\n match v with\n | Dict d ->\n let bc_list = match Hashtbl.find_opt d \"bytecode\" with\n | Some (List l | ListRef { contents = l }) ->\n Array.of_list (List.map (fun x -> match x with Number n -> int_of_float n | _ -> 0) l)\n | _ -> [||]\n in\n let entries = match Hashtbl.find_opt d \"constants\" with\n | Some (List l | ListRef { contents = l }) -> Array.of_list l\n | _ -> [||]\n in\n let constants = Array.map (fun entry ->\n match entry with\n | Dict ed when Hashtbl.mem ed \"bytecode\" -> entry (* nested code — convert lazily *)\n | _ -> entry\n ) entries in\n let arity = match Hashtbl.find_opt d \"arity\" with\n | Some (Number n) -> int_of_float n | _ -> 0\n in\n { vc_arity = arity; vc_locals = arity + 16; vc_bytecode = bc_list; vc_constants = constants }\n | _ -> { vc_arity = 0; vc_locals = 16; vc_bytecode = [||]; vc_constants = [||] }\n\n(** Execute a closure with arguments — creates a fresh VM.\n Used for entry points: JIT Lambda calls, module execution, cross-boundary. *)\nlet rec call_closure cl args globals =\n incr _vm_call_count;\n let prev_vm = !_active_vm in\n let vm = create globals in\n _active_vm := Some vm;\n push_closure_frame vm cl args;\n (try run vm with e -> _active_vm := prev_vm; raise e);\n _active_vm := prev_vm;\n pop vm\n\n(** Call a VmClosure on the active VM if one exists, otherwise create a new one.\n This is the path used by HO primitives (map, filter, for-each, some) so\n callbacks can access upvalues that reference the calling VM's state. *)\nand call_closure_reuse cl args =\n call_closure cl args cl.vm_env_ref\n\n(** Call a value as a function — dispatch by type.\n VmClosure: pushes frame on current VM (fast intra-VM path).\n Lambda: tries JIT then falls back to CEK.\n NativeFn: calls directly. *)\nand vm_call vm f args =\n match f with\n | VmClosure cl ->\n (* Fast path: push frame on current VM — no allocation, enables TCO *)\n push_closure_frame vm cl args\n | NativeFn (_name, fn) ->\n let result = fn args in\n push vm result\n | Lambda l ->\n (match l.l_compiled with\n | Some cl when not (is_jit_failed cl) ->\n (* Cached bytecode — run on VM using the closure's captured env,\n not the caller's globals. Closure vars were merged at compile time. *)\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _e ->\n (* Fallback to CEK — data-dependent error, not a JIT bug.\n Dedup logging happens in register_jit_hook. *)\n push vm (Sx_ref.cek_call f (List args)))\n | Some _ ->\n (* Compile failed — CEK *)\n push vm (Sx_ref.cek_call f (List args))\n | None ->\n if l.l_name <> None\n then begin\n (* Pre-mark before compile attempt to prevent re-entrancy *)\n l.l_compiled <- Some jit_failed_sentinel;\n match !jit_compile_ref l vm.globals with\n | Some cl ->\n l.l_compiled <- Some cl;\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _e -> push vm (Sx_ref.cek_call f (List args)))\n | None ->\n push vm (Sx_ref.cek_call f (List args))\n end\n else\n push vm (Sx_ref.cek_call f (List args)))\n | Component _ | Island _ ->\n (* Components use keyword-arg parsing — CEK handles this *)\n incr _vm_cek_count;\n let result = Sx_ref.cek_call f (List args) in\n push vm result\n | _ ->\n raise (Eval_error (\"VM: not callable: \" ^ Sx_runtime.value_to_str f))\n\n(** Main execution loop — iterative (no OCaml stack growth).\n VmClosure calls push frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop. *)\nand run vm =\n while vm.frames <> [] do\n match vm.frames with\n | [] -> () (* guard handled by while condition *)\n | frame :: rest_frames ->\n let bc = frame.closure.vm_code.vc_bytecode in\n let consts = frame.closure.vm_code.vc_constants in\n if frame.ip >= Array.length bc then begin\n (* Bytecode exhausted without explicit RETURN — pop frame like RETURN *)\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n Printf.eprintf \"[vm] WARN: bytecode exhausted without RETURN in %s (base=%d sp=%d frames=%d)\\n%!\"\n fn_name frame.base vm.sp (List.length rest_frames);\n let result = if vm.sp > frame.base then pop vm else Nil in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n if rest_frames <> [] then push vm result\n (* If no more frames, result stays on stack for call_closure to pop *)\n end\n else begin\n let saved_ip = frame.ip in\n let op = bc.(frame.ip) in\n frame.ip <- frame.ip + 1;\n (try match op with\n (* ---- Constants ---- *)\n | 1 (* OP_CONST *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CONST index %d out of bounds (pool size %d)\"\n idx (Array.length consts)));\n push vm consts.(idx)\n | 2 (* OP_NIL *) -> push vm Nil\n | 3 (* OP_TRUE *) -> push vm (Bool true)\n | 4 (* OP_FALSE *) -> push vm (Bool false)\n | 5 (* OP_POP *) -> ignore (pop vm)\n | 6 (* OP_DUP *) -> push vm (peek vm)\n\n (* ---- Variable access ---- *)\n | 16 (* OP_LOCAL_GET *) ->\n let slot = read_u8 frame in\n let v = match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value\n | None ->\n let idx = frame.base + slot in\n if idx >= vm.sp then\n raise (Eval_error (Printf.sprintf\n \"VM: LOCAL_GET slot=%d base=%d sp=%d out of bounds\" slot frame.base vm.sp));\n vm.stack.(idx)\n in\n push vm v\n | 17 (* OP_LOCAL_SET *) ->\n let slot = read_u8 frame in\n let v = peek vm in\n (* Write to shared cell if captured, else to stack *)\n (match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value <- v\n | None -> vm.stack.(frame.base + slot) <- v)\n | 18 (* OP_UPVALUE_GET *) ->\n let idx = read_u8 frame in\n if idx >= Array.length frame.closure.vm_upvalues then\n raise (Eval_error (Printf.sprintf\n \"VM: UPVALUE_GET idx=%d out of bounds (have %d)\" idx\n (Array.length frame.closure.vm_upvalues)));\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 (* OP_UPVALUE_SET *) ->\n let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 (* OP_GLOBAL_GET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n (* Walk the closure env chain for inner functions *)\n let id = Sx_types.intern name in\n let rec env_lookup e =\n try Hashtbl.find e.bindings id\n with Not_found ->\n match e.parent with Some p -> env_lookup p | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n match frame.closure.vm_closure_env with\n | Some env -> env_lookup env\n | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n push vm v\n | 21 (* OP_GLOBAL_SET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n (* Write to closure env if the name exists there (mutable closure vars) *)\n let written = match frame.closure.vm_closure_env with\n | Some env ->\n let id = Sx_types.intern name in\n let rec find_env e =\n if Hashtbl.mem e.bindings id then\n (Hashtbl.replace e.bindings id (peek vm); true)\n else match e.parent with Some p -> find_env p | None -> false\n in find_env env\n | None -> false\n in\n if not written then begin\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with Some f -> f name v | None -> ())\n end\n\n (* ---- Control flow ---- *)\n | 32 (* OP_JUMP *) ->\n let offset = read_i16 frame in\n frame.ip <- frame.ip + offset\n | 33 (* OP_JUMP_IF_FALSE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 (* OP_JUMP_IF_TRUE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n\n (* ---- Function calls ---- *)\n | 48 (* OP_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n vm_call vm f args_list\n (* Loop continues — if VmClosure, new frame runs next iteration *)\n | 49 (* OP_TAIL_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n (* Drop current frame, reuse stack space — true TCO for VmClosure *)\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n vm_call vm f args_list\n | 50 (* OP_RETURN *) ->\n let result = pop vm in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n push vm result\n (* Loop continues with caller frame *)\n | 51 (* OP_CLOSURE *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CLOSURE idx %d >= consts %d\" idx (Array.length consts)));\n let code_val = consts.(idx) in\n let code = code_from_value code_val in\n (* Read upvalue descriptors from bytecode *)\n let uv_count = match code_val with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0\n in\n let upvalues = Array.init uv_count (fun _ ->\n let is_local = read_u8 frame in\n let index = read_u8 frame in\n if is_local = 1 then begin\n (* Capture from enclosing frame's local slot.\n Create a shared cell — both parent and closure\n read/write through this cell. *)\n let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing (* reuse existing cell *)\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c;\n c\n in\n cell\n end else\n (* Capture from enclosing frame's upvalue — already a shared cell *)\n frame.closure.vm_upvalues.(index)\n ) in\n let cl = { vm_code = code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure cl)\n | 52 (* OP_CALL_PRIM *) ->\n let idx = read_u16 frame in\n let argc = read_u8 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\n (* Resolve thunks — the CEK evaluator does this automatically\n via trampoline, but the VM must do it explicitly before\n passing args to primitives. *)\n let args = List.map (fun v ->\n match v with\n | Thunk _ -> !Sx_primitives._sx_trampoline_fn v\n | _ -> v) args in\n let result =\n try\n (* Check primitives FIRST (native implementations of map/filter/etc.),\n then globals (which may have ho_via_cek wrappers that route\n through the CEK — these can't call VM closures). *)\n let fn_val = try Sx_primitives.get_primitive name with _ ->\n try Hashtbl.find vm.globals name with Not_found ->\n raise (Eval_error (\"VM: unknown primitive \" ^ name))\n in\n (match fn_val with\n | NativeFn (_, fn) -> fn args\n | VmClosure _ | Lambda _ | Component _ | Island _ ->\n Sx_ref.cek_call fn_val (List args)\n | _ -> Nil)\n with Eval_error msg ->\n raise (Eval_error (Printf.sprintf \"%s (in CALL_PRIM \\\"%s\\\" with %d args)\"\n msg name argc))\n in\n push vm result\n\n (* ---- Collections ---- *)\n | 64 (* OP_LIST *) ->\n let count = read_u16 frame in\n let items = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (List items)\n | 65 (* OP_DICT *) ->\n let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do\n let v = pop vm in\n let k = pop vm in\n let key = match k with String s -> s | Keyword s -> s | _ -> Sx_runtime.value_to_str k in\n Hashtbl.replace d key v\n done;\n push vm (Dict d)\n\n (* ---- String ops ---- *)\n | 144 (* OP_STR_CONCAT *) ->\n let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n let s = String.concat \"\" (List.map Sx_runtime.value_to_str parts) in\n push vm (String s)\n\n (* ---- Define ---- *)\n | 128 (* OP_DEFINE *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with\n | Some f -> f name v | None -> ())\n\n (* ---- Inline primitives ----\n Fast path for common types; fallback to actual primitive\n for edge cases (type coercion, thunks, RawHTML, etc.)\n to guarantee behavioral parity with CALL_PRIM. *)\n | 160 (* OP_ADD *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x +. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"+\") [a; b])\n | 161 (* OP_SUB *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x -. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [a; b])\n | 162 (* OP_MUL *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x *. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"*\") [a; b])\n | 163 (* OP_DIV *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x /. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"/\") [a; b])\n | 164 (* OP_EQ *) ->\n let b = pop vm and a = pop vm in\n let rec norm = function\n | ListRef { contents = l } -> List (List.map norm l)\n | List l -> List (List.map norm l) | v -> v in\n push vm (Bool (norm a = norm b))\n | 165 (* OP_LT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x < y)\n | String x, String y -> Bool (x < y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"<\") [a; b])\n | 166 (* OP_GT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x > y)\n | String x, String y -> Bool (x > y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \">\") [a; b])\n | 167 (* OP_NOT *) ->\n let v = pop vm in\n push vm (Bool (not (sx_truthy v)))\n | 168 (* OP_LEN *) ->\n let v = pop vm in\n push vm (match v with\n | List l | ListRef { contents = l } -> Number (float_of_int (List.length l))\n | String s -> Number (float_of_int (String.length s))\n | Dict d -> Number (float_of_int (Hashtbl.length d))\n | Nil -> Number 0.0\n | _ -> (Hashtbl.find Sx_primitives.primitives \"len\") [v])\n | 169 (* OP_FIRST *) ->\n let v = pop vm in\n push vm (match v with\n | List (x :: _) | ListRef { contents = x :: _ } -> x\n | List [] | ListRef { contents = [] } | Nil -> Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"first\") [v])\n | 170 (* OP_REST *) ->\n let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs\n | List [] | ListRef { contents = [] } | Nil -> List []\n | _ -> (Hashtbl.find Sx_primitives.primitives \"rest\") [v])\n | 171 (* OP_NTH *) ->\n let n = pop vm and coll = pop vm in\n push vm (match coll, n with\n | (List l | ListRef { contents = l }), Number f ->\n (try List.nth l (int_of_float f) with _ -> Nil)\n | String s, Number f ->\n let i = int_of_float f in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"nth\") [coll; n])\n | 172 (* OP_CONS *) ->\n let coll = pop vm and x = pop vm in\n push vm (match coll with\n | List l -> List (x :: l)\n | ListRef { contents = l } -> List (x :: l)\n | Nil -> List [x]\n | _ -> (Hashtbl.find Sx_primitives.primitives \"cons\") [x; coll])\n | 173 (* OP_NEG *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (-.x)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [v])\n | 174 (* OP_INC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x +. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"inc\") [v])\n | 175 (* OP_DEC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x -. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"dec\") [v])\n\n | opcode ->\n raise (Eval_error (Printf.sprintf \"VM: unknown opcode %d at ip=%d\"\n opcode (frame.ip - 1)))\n with Invalid_argument msg ->\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n raise (Eval_error (Printf.sprintf\n \"VM: %s at ip=%d op=%d in %s (base=%d sp=%d bc_len=%d consts=%d)\"\n msg saved_ip op fn_name frame.base vm.sp\n (Array.length bc) (Array.length consts))))\n end\n done\n\n(** Execute a compiled module (top-level bytecode). *)\nlet execute_module code globals =\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"module\"; vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame = { closure = cl; ip = 0; base = 0; local_cells = Hashtbl.create 4 } in\n for _ = 0 to code.vc_locals - 1 do push vm Nil done;\n vm.frames <- [frame];\n run vm;\n pop vm\n\n\n(** {1 Lazy JIT compilation} *)\n\n(** Compile a lambda or component body to bytecode using the SX compiler.\n Invokes [compile] from spec/compiler.sx via the CEK machine.\n Returns a [vm_closure] ready for execution, or [None] on failure\n (safe fallback to CEK interpretation).\n\n The compilation cost is a single CEK evaluation of the compiler —\n microseconds per function. The result is cached in the lambda/component\n record so subsequent calls go straight to the VM. *)\nlet jit_compile_lambda (l : lambda) globals =\n let fn_name = match l.l_name with Some n -> n | None -> \"\" in\n try\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"JIT: compiler not loaded\") in\n (* Reconstruct the (fn (params) body) form so the compiler produces\n a proper closure. l.l_body is the inner body; we need the full\n function form with params so the compiled code binds them. *)\n let param_syms = List (List.map (fun s -> Symbol s) l.l_params) in\n let fn_expr = List [Symbol \"fn\"; param_syms; l.l_body] in\n let quoted = List [Symbol \"quote\"; fn_expr] in\n (* Use Symbol \"compile\" so the CEK resolves it from the env, not\n an embedded VmClosure value — the CEK dispatches VmClosure calls\n differently when the value is resolved from env vs embedded in AST. *)\n ignore compile_fn;\n let compile_env = Sx_types.env_extend (Sx_types.make_env ()) in\n Hashtbl.iter (fun k v -> Hashtbl.replace compile_env.bindings (Sx_types.intern k) v) globals;\n let result = Sx_ref.eval_expr (List [Symbol \"compile\"; quoted]) (Env compile_env) in\n (* Closure vars are accessible via vm_closure_env (set on the VmClosure\n at line ~617). OP_GLOBAL_GET falls back to vm_closure_env when vars\n aren't in globals. No injection into the shared globals table —\n that would break closure isolation for factory functions like\n make-page-fn where multiple closures capture different values\n for the same variable names. *)\n let effective_globals = globals in\n (match result with\n | Dict d when Hashtbl.mem d \"bytecode\" ->\n let outer_code = code_from_value result in\n let bc = outer_code.vc_bytecode in\n if Array.length bc >= 4 && bc.(0) = 51 (* OP_CLOSURE *) then begin\n let idx = bc.(1) lor (bc.(2) lsl 8) in\n if idx < Array.length outer_code.vc_constants then\n let inner_val = outer_code.vc_constants.(idx) in\n let code = code_from_value inner_val in\n Some { vm_code = code; vm_upvalues = [||];\n vm_name = l.l_name; vm_env_ref = effective_globals; vm_closure_env = Some l.l_closure }\n else begin\n Printf.eprintf \"[jit] FAIL %s: closure index %d out of bounds (pool=%d)\\n%!\"\n fn_name idx (Array.length outer_code.vc_constants);\n\n None\n end\n end else begin\n (* Not a closure — constant expression, alias, or simple computation.\n Execute the bytecode as a module to get the value, then wrap\n as a NativeFn if it's callable (so the CEK can dispatch to it). *)\n (try\n let value = execute_module outer_code globals in\n Printf.eprintf \"[jit] RESOLVED %s: %s (bc[0]=%d)\\n%!\"\n fn_name (type_of value) (if Array.length bc > 0 then bc.(0) else -1);\n (* If the resolved value is a NativeFn, we can't wrap it as a\n vm_closure — just let the CEK handle it directly. Return None\n so the lambda falls through to CEK, which will find the\n resolved value in the env on next lookup. *)\n None\n with _ ->\n Printf.eprintf \"[jit] SKIP %s: non-closure execution failed (bc[0]=%d, len=%d)\\n%!\"\n fn_name (if Array.length bc > 0 then bc.(0) else -1) (Array.length bc);\n None)\n end\n | _ ->\n Printf.eprintf \"[jit] FAIL %s: compiler returned %s\\n%!\" fn_name (type_of result);\n None)\n with e ->\n Printf.eprintf \"[jit] FAIL %s: %s\\n%!\" fn_name (Printexc.to_string e);\n None\n\n(* Wire up forward references *)\nlet () = jit_compile_ref := jit_compile_lambda\nlet () = _vm_call_closure_ref := (fun cl args -> call_closure cl args cl.vm_env_ref)\n\n\n(** {1 Debugging / introspection} *)\n\n(** Map opcode integer to human-readable name. *)\nlet opcode_name = function\n | 1 -> \"CONST\" | 2 -> \"NIL\" | 3 -> \"TRUE\" | 4 -> \"FALSE\"\n | 5 -> \"POP\" | 6 -> \"DUP\"\n | 16 -> \"LOCAL_GET\" | 17 -> \"LOCAL_SET\"\n | 18 -> \"UPVALUE_GET\" | 19 -> \"UPVALUE_SET\"\n | 20 -> \"GLOBAL_GET\" | 21 -> \"GLOBAL_SET\"\n | 32 -> \"JUMP\" | 33 -> \"JUMP_IF_FALSE\" | 34 -> \"JUMP_IF_TRUE\"\n | 48 -> \"CALL\" | 49 -> \"TAIL_CALL\" | 50 -> \"RETURN\"\n | 51 -> \"CLOSURE\" | 52 -> \"CALL_PRIM\"\n | 64 -> \"LIST\" | 65 -> \"DICT\"\n | 128 -> \"DEFINE\"\n | 144 -> \"STR_CONCAT\"\n | 160 -> \"ADD\" | 161 -> \"SUB\" | 162 -> \"MUL\" | 163 -> \"DIV\"\n | 164 -> \"EQ\" | 165 -> \"LT\" | 166 -> \"GT\" | 167 -> \"NOT\"\n | 168 -> \"LEN\" | 169 -> \"FIRST\" | 170 -> \"REST\" | 171 -> \"NTH\"\n | 172 -> \"CONS\" | 173 -> \"NEG\" | 174 -> \"INC\" | 175 -> \"DEC\"\n | n -> Printf.sprintf \"UNKNOWN_%d\" n\n\n(** Number of extra operand bytes consumed by each opcode.\n Returns (format, total_bytes) where format describes the operand types. *)\nlet opcode_operand_size = function\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 64 (* LIST *) | 65 (* DICT *) | 128 (* DEFINE *) -> 2 (* u16 *)\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) -> 1 (* u8 *)\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) -> 2 (* i16 *)\n | 51 (* CLOSURE *) -> 2 (* u16 for constant index; upvalue descriptors follow dynamically *)\n | 52 (* CALL_PRIM *) -> 3 (* u16 + u8 *)\n | _ -> 0 (* no operand *)\n\n(** Trace a single execution — compile + run, collecting trace entries.\n Each entry is a dict with :opcode, :stack, :depth. *)\nlet trace_run src globals =\n (* Compile *)\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"trace: compiler not loaded\") in\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with [e] -> e | _ -> List (Symbol \"do\" :: exprs) in\n let quoted = List [Symbol \"quote\"; expr] in\n let code_val = Sx_ref.eval_expr (List [compile_fn; quoted]) (Env (make_env ())) in\n let code = code_from_value code_val in\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"trace\";\n vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame0 = { closure = cl; ip = 0; base = 0; local_cells = Hashtbl.create 4 } in\n for _ = 0 to code.vc_locals - 1 do push vm Nil done;\n vm.frames <- [frame0];\n (* Run with tracing *)\n let trace = ref [] in\n let max_steps = 10000 in\n let steps = ref 0 in\n (try\n while vm.frames <> [] && !steps < max_steps do\n match vm.frames with\n | [] -> ()\n | frame :: _ ->\n let bc = frame.closure.vm_code.vc_bytecode in\n if frame.ip >= Array.length bc then\n vm.frames <- []\n else begin\n let op = bc.(frame.ip) in\n (* Snapshot stack top 5 *)\n let stack_snap = List.init (min 5 vm.sp) (fun i ->\n let v = vm.stack.(vm.sp - 1 - i) in\n String (Sx_types.inspect v)) in\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"opcode\" (String (opcode_name op));\n Hashtbl.replace entry \"stack\" (List stack_snap);\n Hashtbl.replace entry \"depth\" (Number (float_of_int (List.length vm.frames)));\n trace := Dict entry :: !trace;\n incr steps;\n (* Execute one step — use the main run loop for 1 step.\n We do this by saving the state and running the original dispatch. *)\n let saved_ip = frame.ip in\n frame.ip <- frame.ip + 1;\n let rest_frames = List.tl vm.frames in\n (try match op with\n | 1 -> let idx = read_u16 frame in push vm frame.closure.vm_code.vc_constants.(idx)\n | 2 -> push vm Nil\n | 3 -> push vm (Bool true)\n | 4 -> push vm (Bool false)\n | 5 -> ignore (pop vm)\n | 6 -> push vm (peek vm)\n | 16 -> let slot = read_u8 frame in\n let v = match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value\n | None -> vm.stack.(frame.base + slot) in\n push vm v\n | 17 -> let slot = read_u8 frame in let v = peek vm in\n (match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value <- v\n | None -> vm.stack.(frame.base + slot) <- v)\n | 18 -> let idx = read_u8 frame in\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 -> let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n try Sx_primitives.get_primitive name with _ ->\n raise (Eval_error (\"VM undefined: \" ^ name)) in\n push vm v\n | 21 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 32 -> let offset = read_i16 frame in frame.ip <- frame.ip + offset\n | 33 -> let offset = read_i16 frame in let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 -> let offset = read_i16 frame in let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n | 48 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm_call vm f (List.rev (Array.to_list args))\n | 49 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base;\n vm_call vm f (List.rev (Array.to_list args))\n | 50 -> let result = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base; push vm result\n | 51 -> (* CLOSURE — skip for trace, just advance past upvalue descriptors *)\n let idx = read_u16 frame in\n let code_val2 = frame.closure.vm_code.vc_constants.(idx) in\n let uv_count = match code_val2 with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n let upvalues = Array.init uv_count (fun _ ->\n let is_local = read_u8 frame in\n let index = read_u8 frame in\n if is_local = 1 then begin\n let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c; c in\n cell\n end else frame.closure.vm_upvalues.(index)\n ) in\n let inner_code = code_from_value code_val2 in\n let c = { vm_code = inner_code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure c)\n | 52 -> let idx = read_u16 frame in let argc = read_u8 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\n let fn_val = try Sx_primitives.get_primitive name with _ ->\n try Hashtbl.find vm.globals name with Not_found ->\n raise (Eval_error (\"VM: unknown primitive \" ^ name)) in\n (match fn_val with NativeFn (_, fn) -> push vm (fn args) | _ -> push vm Nil)\n | 64 -> let count = read_u16 frame in\n let items = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (List items)\n | 65 -> let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do let v = pop vm in let k = pop vm in\n let key = match k with String s -> s | Keyword s -> s | _ -> Sx_runtime.value_to_str k in\n Hashtbl.replace d key v done;\n push vm (Dict d)\n | 128 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 144 -> let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (String (String.concat \"\" (List.map Sx_runtime.value_to_str parts)))\n | 160 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x +. y) | _ -> Nil)\n | 161 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x -. y) | _ -> Nil)\n | 162 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x *. y) | _ -> Nil)\n | 163 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x /. y) | _ -> Nil)\n | 164 -> let b = pop vm and a = pop vm in push vm (Bool (a = b))\n | 165 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x < y) | _ -> Bool false)\n | 166 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x > y) | _ -> Bool false)\n | 167 -> let v = pop vm in push vm (Bool (not (sx_truthy v)))\n | 168 -> let v = pop vm in\n push vm (match v with\n | List l | ListRef { contents = l } -> Number (float_of_int (List.length l))\n | String s -> Number (float_of_int (String.length s))\n | _ -> Number 0.0)\n | 169 -> let v = pop vm in\n push vm (match v with List (x :: _) | ListRef { contents = x :: _ } -> x | _ -> Nil)\n | 170 -> let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs | _ -> List [])\n | 171 -> let n = pop vm and coll = pop vm in\n push vm (match coll, n with\n | (List l | ListRef { contents = l }), Number f ->\n (try List.nth l (int_of_float f) with _ -> Nil) | _ -> Nil)\n | 172 -> let coll = pop vm and x = pop vm in\n push vm (match coll with List l -> List (x :: l) | _ -> List [x])\n | 173 -> let v = pop vm in\n push vm (match v with Number x -> Number (-.x) | _ -> Nil)\n | 174 -> let v = pop vm in\n push vm (match v with Number x -> Number (x +. 1.0) | _ -> Nil)\n | 175 -> let v = pop vm in\n push vm (match v with Number x -> Number (x -. 1.0) | _ -> Nil)\n | _ -> ()\n with e ->\n let _ = e in\n ignore saved_ip;\n (* On error during trace, just stop *)\n vm.frames <- [])\n end\n done\n with _ -> ());\n List (List.rev !trace)\n\n(** Disassemble a vm_code into a list of instruction dicts. *)\nlet disassemble (code : vm_code) =\n let bc = code.vc_bytecode in\n let len = Array.length bc in\n let consts = code.vc_constants in\n let instrs = ref [] in\n let ip = ref 0 in\n while !ip < len do\n let offset = !ip in\n let op = bc.(!ip) in\n ip := !ip + 1;\n let name = opcode_name op in\n let operands = ref [] in\n (match op with\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 128 (* DEFINE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n let const_str = if idx < Array.length consts\n then Sx_types.inspect consts.(idx) else \"?\" in\n operands := [Number (float_of_int idx); String const_str]\n end\n | 64 (* LIST *) | 65 (* DICT *) | 51 (* CLOSURE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n operands := [Number (float_of_int idx)];\n (* For CLOSURE, skip upvalue descriptors *)\n if op = 51 && idx < Array.length consts then begin\n let uv_count = match consts.(idx) with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n ip := !ip + uv_count * 2\n end\n end\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) ->\n if !ip < len then begin\n let v = bc.(!ip) in ip := !ip + 1;\n operands := [Number (float_of_int v)]\n end\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let raw = lo lor (hi lsl 8) in\n let signed = if raw >= 32768 then raw - 65536 else raw in\n ip := !ip + 2;\n operands := [Number (float_of_int signed)]\n end\n | 52 (* CALL_PRIM *) ->\n if !ip + 2 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n let argc = bc.(!ip + 2) in\n ip := !ip + 3;\n let prim_name = if idx < Array.length consts\n then (match consts.(idx) with String s -> s | _ -> \"?\") else \"?\" in\n operands := [Number (float_of_int idx); String prim_name; Number (float_of_int argc)]\n end\n | _ -> ());\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"offset\" (Number (float_of_int offset));\n Hashtbl.replace entry \"opcode\" (String name);\n Hashtbl.replace entry \"operands\" (List !operands);\n instrs := Dict entry :: !instrs\n done;\n let result = Hashtbl.create 4 in\n Hashtbl.replace result \"arity\" (Number (float_of_int code.vc_arity));\n Hashtbl.replace result \"num_locals\" (Number (float_of_int code.vc_locals));\n Hashtbl.replace result \"constants\" (List (Array.to_list (Array.map (fun v -> String (Sx_types.inspect v)) consts)));\n Hashtbl.replace result \"bytecode\" (List (List.rev !instrs));\n Dict result\n","(* generated code *)"],"names":[],"mappings":"EAu6B0G,IAApB,EAAP,SAAO,aAAoB,K,gBAxExG,KADA,YACA,E,CAAA,0BACA,YAGA,MALA,EAKA,eAEW,uBACT,OADS,kBAEE,SAEX,0B,CAAA,2FA2CE,gBACW,qBAAqB,OAAT,OAAS,SAEnB,OAAX,OAAW,SAFmB,gBAC9B,QADS,gBACT,QAGA,Y,CAAA,+BACc,yCAAY,sCAAkB,U,EACN,QAAlB,YAAkB,IAA8C,sBAJzE,mBAIsD,SAAmB,gBAA9C,MAHtC,KAGsC,c,EAtCxC,gBACW,qBAAqB,OAAT,OAAS,yBAC9B,QADS,gBACT,QAIA,yB,CAAA,+BAHA,OACsC,QAAlB,YAAkB,cAEtC,IACuB,uBAAY,EAAZ,kBAAY,G,CAAA,4BACZ,GAAP,OAAO,eAAkC,K,CAAA,iB,CAAA,4BAC5B,cAAsB,MACxC,GAHwB,EAIjC,wB,EAAA,S,EAAA,S,KAAA,8BAYJ,gBACW,qBAAqB,OAAT,OAAS,yBAC9B,QADS,gBACT,QACA,UAAkC,UAEO,QAArB,YAAqB,cADzC,KACyC,c,EAAA,S,EAAA,qB,CAAA,aArC3C,gBACW,qBAAqB,OAAT,OAAS,yBAC9B,QADS,gBACT,QAEA,Y,CAAA,+BACwB,uCAAY,SAA7B,cAA6B,I,EACE,QAAlB,YAAkB,IAAtC,sBAAsC,MAHtC,KAGsC,c,EAqBxC,aACU,qBAC4B,QAD5B,gBACY,SAAgB,YAqBxC,EAtBwB,KAsBxB,WAAY,QAAZ,OAAY,eACZ,GAA4D,IAArB,YAAqB,WAA5D,cACA,KAD6D,iBAC7D,cACA,KAD4C,iBAC5C,cAAiD,8BAGtC,QAAb,OAAa,eACb,GAAmE,IAAnE,YAAuC,SAA4B,WAAnE,cACA,KAAyE,IADL,OACxB,SAA6B,WAAzE,cACA,KAAkH,IAA1D,KADkB,OAClB,aAAyD,OAAxE,aAAyE,WAAlH,cACA,KAA0D,IAAlB,EAD2E,OAC3E,aAAkB,WAA1D,cAA2D,eAChD,C,UAnOD,6CAAQ,mBAAR,EAC2B,IADnB,gBACR,SAAO,aAAoB,U,EA+CU,gBAAM,C,eAkB1B,qBACH,e,EACZ,SAAqB,cACF,EADE,OACF,eAAwC,QAGrD,WAAqB,UAArB,+BAAqB,SACrB,gBADkD,IAA7B,gBAA6B,MAClD,qBAAyC,cAC7C,EACO,wDAAiC,E,EAAA,I,uBAxGtD,iBAAqB,KAArB,OAAqB,eAA8B,I,AAAA,I,AAAA,G,EAAA,GCzqBrD,iDD0qBsB,2B,EAMpB,IAF8E,cAD9E,eADA,GADY,EAAZ,QAAY,eACZ,K,CAAA,4BAAmC,IAAS,sBAC5C,gBAC8E,oBAAb,IAAjE,QAAiE,aAAa,aAA/D,aACJ,SACX,uBA7nB6B,IAAnB,WAAmB,gBAgoBgC,QAA7D,OAA6D,eAC7D,8BAAmC,cAAW,yBAC9C,QAF6E,oBAE7E,WAEA,I,EAEA,I,EACA,yB,CAAA,aAEI,4BAGE,4BACA,S,CAAA,uCACE,cAES,YADN,YACM,wBAET,UAA2B,IAA3B,cAA2B,aAAV,EAAuB,OAAvB,eAGL,QAAZ,OAAY,eACZ,GAAuD,IAAhB,SAAgB,WAAvD,cACA,KADwD,iBACxD,cACA,KAA4E,IAD7B,cACK,aAAd,SAAsC,WAA5E,cAA6E,c,EAAA,I,EAE7E,S,EAIA,wBACA,cAAkB,eAClB,2C,EAAA,+FA6HE,KADe,WACf,G,CAAA,qBAAmD,IAAnD,OAAyC,oBAAU,QAAQ,KAA3D,QAA+D,GAF/D,KADe,WACf,G,CAAA,qBAAmD,IAAnD,OAAyC,oBAAU,QAAQ,KAA3D,QAA+D,GAF/D,KADe,WACf,G,CAAA,qBAA8C,IAA9C,OAAyC,WAAK,QAAQ,KAAtD,QAA0D,GAHxC,WAAe,WACjC,U,CAAA,qBAAmC,UAAnC,OAAmC,YAAqB,uBAAxD,QAAiE,GALlD,WACf,KADiC,WACjC,G,CAAA,E,EAAA,sB,GAAA,0D,CAAA,qBAEI,OAAK,EAFT,OAEI,SAAK,EAAL,OAAK,aAA2B,I,AAAA,I,AAAA,G,EAAA,IAAW,UAAY,KAF3D,QAE+D,GAL/D,EADe,WACf,U,GACuD,IADvD,wB,GAAA,uD,CAAA,mC,CAAA,WACuD,MADvD,QAC8E,GAH9E,KADe,WACf,G,CAAA,E,EAAA,mB,GAAA,4E,CAAA,iBAAgF,KAAhF,QAAoF,GALpF,EADe,WACf,U,GAAA,EAC8E,IAD9E,wB,GAAA,4DACyC,OAAqB,aAAd,SAA8B,OACvB,IADuB,UAC9D,KAAO,IAAgC,MAFvD,QAGoB,GALK,EAAgC,IAA1C,SAAU,QAAmB,aAAa,YAAhC,QAAkC,GAF5C,WACf,EAD8B,WAC9B,4DAA+C,IAA/C,UAA+C,OAA/C,OAA+C,0BAA/C,QAA8E,GAH/D,WACf,EAD8B,WAC9B,4DAA+C,IAA/C,UAA+C,OAA/C,OAA+C,0BAA/C,QAA8E,GAF/D,WAAyB,EAAqB,IAA/B,SAAwB,IAAO,MAArB,QAAsB,GAF/C,WACf,KAD8B,WAC9B,G,CAAA,0B,CAAA,qBAA8D,IAA9D,OAAsD,OAAtD,OAAsD,WAAQ,UAAQ,KAAtE,QAA0E,GAH3D,WACf,KAD8B,WAC9B,G,CAAA,0B,CAAA,qBAA8D,IAA9D,OAAsD,OAAtD,OAAsD,WAAQ,UAAQ,KAAtE,QAA0E,GAH3D,WACf,KAD8B,WAC9B,G,CAAA,0B,CAAA,qBAA8D,IAA9D,OAAsD,OAAtD,OAAsD,WAAQ,UAAQ,KAAtE,QAA0E,GAH3D,WACf,KAD8B,WAC9B,G,CAAA,0B,CAAA,qBAA8D,IAA9D,OAAsD,OAAtD,OAAsD,WAAQ,UAAQ,KAAtE,QAA0E,GAJvD,SACnB,eAAY,aAAiC,OAAjC,eACZ,EAA2E,IAA3D,GAAhB,QAAkC,EAAlC,OAAkC,aAAwC,OAA1D,aAA2D,IAA3E,QAA4E,GAL3D,WACjB,0BAAiB,oCAAwC,sCAAkB,K,EAC3C,WAAS,OAAzC,IAAyC,OAAzC,iBAAyC,Y,EAAA,6HAPjC,IADU,WAClB,OAAQ,eACR,kBAA8B,WAE5B,EADA,GAD8C,WAC9C,G,CAAA,E,EAAA,iB,GAAA,qBAA6D,wBAC7D,uBAAuB,sBACzB,oBAAgB,GANhB,MAFkB,SAClB,eAAY,aAAiC,OAAjC,aACZ,YAAoB,GATJ,WAA6B,WAC7C,0BAAiB,oCAAwC,sCAAkB,K,EAChE,EAAX,eAAW,aAAgC,OAAhC,eACX,SAAiB,EAAjB,QAAiB,aAAgC,M,AAAA,I,AAAA,G,EAAA,IC1xB7D,gBD2xBkB,EC3xBlB,OD2xBkB,aAA4B,M,AAAA,I,AAAA,G,EAAA,GC3xB9C,WD4xBmE,EC5xBnE,oC,CD4xBmE,E,CAAjC,KAAlB,OAAkB,eAAiC,sBACvD,K,CAAA,qBAAuC,EAAQ,EAA/C,OAA+C,aAAR,QAAiB,IAAQ,cAAW,GA5BjE,WACV,0BAAgB,sBAChB,EADgB,c,GAChB,G,CAAA,4BACqB,GAAP,OAAO,eAAkC,K,CAAA,iB,CAAA,4BAC5B,cAAsB,MACxC,GACM,EAAf,iBAAe,eAef,MAFA,IADiB,E,CAAA,OACjB,mCAEA,YAAqB,GAxBF,WACnB,SAA0B,iBAAqB,YAAc,GAN5C,SACjB,eAAW,eACH,WACR,SAA0B,iBAC1B,IAAuB,EAAvB,OAAuB,aAAoB,OAA9B,aAAb,UAA4C,GAR3B,SACjB,eAAW,eAEX,EADQ,SACe,EAAvB,OAAuB,aAAoB,OAA9B,aAAb,UAA4C,GALzB,WAA0B,SAC7C,QAAG,aAAW,OAAM,qCAHD,WAA0B,SAC7C,QAAO,aAAa,KAAM,uCAFP,WAAkB,qCAHrB,WAChB,0BAAiB,oCAAwC,sCAAkB,K,EAC3C,WAAS,OAAzC,IAAyC,OAAzC,cAAyC,GARzB,WAChB,0BAAiB,sBACjB,gBADiB,cAAwC,sCAAkB,KAC/D,EAAZ,OAAY,aAA4B,M,AAAA,I,AAAA,G,EAAA,GCzuBpD,WD2uB2D,EC3uB3D,oC,CD2uB2D,E,CC3uB3D,SD0uBkB,EC1uBlB,QD0uBkB,aAAgC,M,AAAA,I,AAAA,G,EAAA,IAChB,KAAlB,OAAkB,eAAyB,sBAC/C,YAAS,GAPO,WAC4B,WAAO,kBAAnD,kCAA+B,aAHf,WAChB,kBAAQ,sBAAR,EAAQ,YAA+B,QAAvC,QAAgD,GAL/B,WAAyB,WAC1C,YAAO,EAAP,OAAO,eAAuC,OAEnC,kEAAiC,aAD5B,a,EAPC,WAIjB,EAHA,YAAc,EAAd,OAAc,eAAuC,QAEzC,iEAA4B,UADvB,SAEjB,QAAS,GALJ,EAAQ,SAAR,QAAiB,GADV,UAAQ,GADf,aAAoB,GADpB,aAAmB,GADnB,cAAW,GADD,WAAkB,0BAAQ,sBAAR,EAAQ,YAAR,WAAgD,Q,AAAA,I,AAAA,G,EAAA,IAkIjF,c,GAAA,S,AAAA,I,AAAA,G,EAAA,KAIY,I,EAAtB,OAAK,aAAiB,K,MAjME,0B,CAAA,mCAQF,E,EARE,qCASA,MADF,qCAD8C,6B,CAAA,IALd,MAI5B,MAInB,IAAC,C,QA9BQ,kC,EAAA,+FAeuC,KAAf,KAAf,KAAhB,KADgD,KAAhB,KAAjB,KAAf,KAD0C,KAAd,KAAd,KAAd,KAD6C,KAAf,KAAf,KAAf,KADA,KADA,mB,EAAA,6HADc,KAAf,KADkB,KAAlB,KADmC,KAApB,KAAf,KADuC,KAAxB,KAAf,KADqB,KAArB,KADsB,KAAtB,KADoB,KAApB,KADY,KAAb,KAD0C,KAAd,KAAb,KAAf,OAeA,sCAA6B,C,KAtBW,6BAAkC,C,KArDtD,OAAqC,EAArC,QAAqC,eAAmB,sCAAE,C,EARzC,UAAQ,C,iBAPpD,2CA+DE,EA9DF,gBACuB,KADvB,OACuB,cAA8B,I,AAAA,I,AAAA,G,EAAA,GC7jBvD,WD8jBwB,EC9jBxB,oC,CD8jBwB,E,CAAA,sBAMpB,eADA,eAD+D,IAAzC,GAAtB,mBAAsB,aAAyC,IAC/D,+BACA,kBAMA,MADsC,IAAtC,QAAsC,aAAsB,QAA1C,eAClB,0BAdF,EAuBE,GAT4F,oDAC/E,eAQb,G,CAAA,4BACc,uBAAwB,K,CAAA,EAGpC,KAFiB,WACjB,UACA,E,CAAA,6BAA2B,cAAM,IAAN,OAAM,GACT,YAAZ,YAAY,OAAM,QAAlB,OAAM,QAChB,oB,CAAA,8BACE,UAAgB,qBAEhB,QAFgB,gBACL,OACX,gDAGA,MADG,iB,CAAA,wBACH,KADG,OACH,iBACoD,O,GAI/C,OAKO,E,CAAA,aALP,EAML,S,CAAA,8BACuD,sBAAY,K,EADnE,EACU,EAAyD,QAAzD,aADV,KACyB,OADzB,iBACsE,Y,AAAA,I,AAAA,G,EAAA,IAOtE,S,CAAA,mC,CAAA,8BACuC,sBAAY,KADnD,OACmD,OADnD,iBACwE,SAI5E,EAAiE,EAAjE,QAAiE,aAAjE,GAAiF,OAAjF,iBAAiF,Y,AAAA,I,AAAA,G,EAAA,GAGnF,OAA+C,aAA/C,GAAqE,OAArE,iBAAqE,K,YAnFvE,qCApf6B,IAAnB,WAAmB,gBAsf+B,QAA5D,OAA4D,eAC5D,8BAAmC,cAAW,yBAC9C,QAF4E,oBAE5E,WACA,YAAM,SACA,C,UAxaN,0CACA,aAEA,YArF6B,IAAnB,WAAmB,gBAqF7B,OACA,cAA6B,SACxB,YAAM,I,AAAA,I,AAAA,G,EAAA,KAAW,aAAuB,KAC7C,aACA,SAAM,C,aAaN,K,CAAA,E,EAAA,6DAqCE,gCAEA,EADa,EAAb,mBAAa,aACb,QApCA,EAoCA,UApCA,UAGA,EADa,EAFb,UAEa,aACb,sBAEA,mBAaG,cAayC,EAA/B,EAAR,mBAAQ,aAA+B,QAZpC,0BAGG,EAAN,uBAAM,KAA6B,OAMM,EAA/B,EAAR,mBAAQ,aAA+B,QAJvC,WAIuC,YAJvC,OACA,OAAK,EAAQ,SAAb,OAAa,SAAR,OAA4C,G,AAAA,I,AAAA,G,EAAA,IACE,EAA/B,EAAR,mBAAQ,aAA+B,Q,IAAA,YApBtC,OAAkB,cAG9B,EAAQ,SAHsB,OAGtB,SAAR,OAA4C,G,AAAA,I,AAAA,G,EAAA,IAIP,EAA/B,EAAR,mBAAQ,aAA+B,QAGH,EAA/B,EAAR,mBAAQ,aAA+B,Q,KAsBxB,GAAwB,EAA1C,QAA0C,aAAyB,OAAjD,eAAkD,oBAAC,C,MA8E3D,mBAAI,MAAJ,OAAI,aAA0B,G,AAAA,I,AAAA,G,EAAA,GChR5C,iDDkRgB,0BACM,MADN,QACM,aAAgC,G,AAAA,I,AAAA,G,EAAA,IACR,SAAlB,OAAkB,eAAyB,+BAFzB,K,EAAA,K,GAE0B,C,MAiBxD,cAAG,MAAH,OAAG,aAAyB,OAEvB,gBAAmD,aAArB,MADF,eAAS,OAAvC,QAAuC,OAAvC,cAAuC,IACmB,C,EA0B9B,gBAAM,C,eAiC1B,qBACH,e,EACZ,SAAqB,cAIF,EAJE,OAIF,eAAwC,QAGrD,cAAqB,UAArB,+BAAqB,SACrB,gBADkD,IAA7B,gBAA6B,MAClD,qBAAyC,cAG7C,EAGA,wDAAiC,E,EAAA,I,KAcnC,K,CAAA,qBACa,iCACN,EAAC,C,GA+EK,K,CAAA,E,EAAA,mB,GAAA,mBACuC,IAAjB,GADtB,kBACiB,OAAK,aAAiB,MAClB,IAAjB,GADmC,UACxC,OAAK,aAAiB,OAAQ,EAAC,C,uBA3QrD,yCACE,0CAGE,4BACA,yBACA,S,CAAA,wCAAoC,2C,EAIP,E,CAD3B,OAC2B,E,CAAA,aAD3B,EACoD,sBADpD,E,CAAA,GACoD,OADpD,iBACoD,4BACZ,UAAY,K,EACpD,W,CAAA,GACA,iBACA,OAAwC,EAAd,YAAc,GAGrC,YAEM,YAAT,OAAS,wBACT,wBACA,2C,EAAA,+FAwTE,KADQ,W,CACR,G,CAAA,qBACiC,IADjC,OACuB,oBAAU,QACxB,M,CAAA,4B,CAAA,a,CAAA,YAFT,QAE2D,GAP3D,KADQ,W,CACR,G,CAAA,qBACiC,IADjC,OACuB,oBAAU,QACxB,M,CAAA,4B,CAAA,a,CAAA,YAFT,QAE2D,GAP3D,KADQ,W,CACR,G,CAAA,qBAC4B,IAD5B,OACuB,WAAK,QACnB,M,CAAA,4B,CAAA,a,CAAA,YAFT,QAEyD,GAV9C,WAAe,WAC1B,I,CAAA,MAGW,uB,GAAA,qB,GAAA,mBADqB,UACrB,kBADqB,WADlB,UACkB,UADlB,WAGL,Y,CAAA,gC,CAAA,a,CAAA,aAJT,QAIkE,GAf1D,WACR,KAD0B,WAC1B,G,CAAA,E,EAAA,wB,GAAA,0D,CAAA,sB,CAE+C,EAA3C,OAAK,E,CAFT,OAEI,SAAK,EAAL,OAAK,E,CAAA,WAA2B,I,AAAA,I,AAAA,G,EAAA,IAAW,S,CAAA,G,CAAA,4BAE3C,WACA,aAH2C,UAG3C,aAA4D,eAAM,IAArB,IAAe,aAAf,EAAoB,OAApB,E,CAAA,WAAqB,QAC7D,UACA,Y,CAAA,gC,CAAA,a,CAAA,YAPT,QAOiE,GAbjE,EADQ,W,CACR,U,GAAA,EACuD,IADvD,sB,GAAA,iD,CAAA,mC,CAAA,WACuD,OAE9C,M,CAAA,4B,CAAA,a,CAAA,aAHT,QAG4D,GAT5D,KADQ,W,CACR,G,CAAA,E,EAAA,qB,GAAA,2FAGS,M,CAAA,4B,CAAA,a,CAAA,WAAmD,IADX,KAFjD,QAG6D,GAX7D,EADQ,W,CACR,U,GAAA,IAC8E,IAD9E,wB,GAAA,2CAGsD,IAHtD,UAGc,OAAqB,E,CAAA,WAAd,SAAiC,kBAFb,OAAqB,E,CAAA,WAAd,SAA8B,OACvB,IADuB,UAC9D,KAAO,IAAgC,OAG9C,M,CAAA,4B,CAAA,a,CAAA,aALT,QAK2D,GAR3D,EAAgC,IADxB,SACR,QAAmB,E,CAAA,WAAa,YAAhC,QAAkC,GAP1B,WACR,KADuB,WACvB,G,CAAA,E,EAAA,mB,GAAA,Q,CAAA,sB,CAEsC,MAFtC,iBAE+B,EAAO,S,CAAA,G,CAAA,qBADZ,IACY,UADZ,OACY,OADZ,oBAEjB,Y,CAAA,gC,CAAA,a,CAAA,YAHT,QAG4D,GAVpD,WACR,KADuB,WACvB,G,CAAA,E,EAAA,mB,GAAA,Q,CAAA,sB,CAEsC,MAFtC,iBAE+B,EAAO,S,CAAA,G,CAAA,qBADZ,IACY,UADZ,OACY,OADZ,oBAEjB,Y,CAAA,gC,CAAA,a,CAAA,YAHT,QAG4D,GAVpD,WAAe,WAIC,E,CAAA,SAAxB,EAA+B,IAAhB,SAAD,E,CAAA,EAAiB,MAA/B,QAAgC,GATxB,WACR,KADuB,WACvB,G,CAAA,uB,CAAA,G,CAAA,qBACyC,IADzC,OACiC,OADjC,OACiC,WAAQ,UAChC,Y,CAAA,gC,CAAA,a,CAAA,YAFT,QAE4D,GARpD,WACR,KADuB,WACvB,G,CAAA,uB,CAAA,G,CAAA,qBACyC,IADzC,OACiC,OADjC,OACiC,WAAQ,UAChC,Y,CAAA,gC,CAAA,a,CAAA,YAFT,QAE4D,GARpD,WACR,KADuB,WACvB,G,CAAA,uB,CAAA,G,CAAA,qBACyC,IADzC,OACiC,OADjC,OACiC,WAAQ,UAChC,Y,CAAA,gC,CAAA,a,CAAA,YAFT,QAE4D,GARpD,WACR,KADuB,WACvB,G,CAAA,uB,CAAA,G,CAAA,qBACyC,IADzC,OACiC,OADjC,OACiC,WAAQ,UAChC,Y,CAAA,gC,CAAA,a,CAAA,YAFT,QAE4D,GAtBhD,E,CAAA,OACZ,eAAY,E,CAAA,WAAiC,OAAjC,E,CAAA,aAEZ,MADQ,GAAR,QAAyB,E,CAAzB,OAAyB,E,CAAA,WAAwC,OAAzD,E,CAAA,WACR,YAAkB,GAIR,E,CAAA,SACO,sC,CAAY,sCAAkB,K,EACvC,WACR,Y,CAAA,W,CAAA,YAAiC,yBAEpB,E,CAAA,EAFoB,UAEpB,IAAQ,iB,EAAA,6HAvBb,IADI,E,CAAA,SACZ,OAAQ,E,CAAA,aACR,kBACU,WAER,GADQ,W,CACR,G,CAAA,E,EAAA,iB,GAAA,qBAA6D,E,CAAA,U,CAAA,YAA7D,EACA,E,CAAA,E,CAAA,W,CAAA,YAAuB,sBAEzB,Q,CAAA,YAAgB,GAVhB,MAFY,E,CAAA,OACZ,eAAY,E,CAAA,WAAiC,OAAjC,E,CAAA,WACZ,YAAoB,GAnCV,E,CAAA,SACC,E,CAAA,SACM,sC,CAAY,sCAAkB,K,EAKpC,GAJA,EAAX,eAAW,aAAgC,OAAhC,aAIX,OAAW,eAIX,kBAKqB,E,CALrB,QAKqB,aAAgC,M,AAAA,I,AAAA,G,EAAA,ICxY/D,mBDyYoB,E,CCzYpB,ODyYoB,aAA4B,M,AAAA,I,AAAA,G,EAAA,GCzYhD,WD0YqE,EC1YrE,S,CAAA,a,CAAA,c,CD0YqE,E,CAAjC,K,CAAlB,OAAkB,eAAiC,sBAEvD,Q,CAAA,E,EAAA,6CAGG,Q,CAAA,0BAAkC,GAFd,E,CAEc,UAFd,aAAO,IAGtB,KAJR,EAIQ,I,AAAA,I,AAAA,G,EAAA,KChZtB,sBDmZ8B,ECnZ9B,S,CAAA,a,CAAA,c,CDmZ8B,E,CCnZ9B,UDkZgC,E,CAAA,KAAlB,OAAkB,E,CAAA,gBACF,c,CAAA,OAEpB,I,CAAA,QAAc,GA/DJ,E,CAAA,SACV,c,CAAA,2BACoB,E,CAAlB,O,CAAA,wBAAkB,KAAlB,OAAkB,E,CAAA,gBAA4E,c,CAAA,OACjF,wBA6Bf,MAFA,IA3Be,c,CACJ,OAEX,I,CAAA,G,CAAA,4BACqB,GAAP,OAAO,E,CAAA,aAAkC,K,CAAA,c,CAAA,G,CAAA,4BAC5B,cAAsB,MACxC,GAEM,EAAf,O,CAAA,UAAe,E,CAAA,WAmBf,oCAEA,YAAsB,G,EAtCT,WACb,W,CAAA,GACA,iBACA,YAAc,GAZH,E,CAAA,OACX,eAAW,eACH,WACiB,EAAzB,OAAyB,aAAoB,OAA7B,eAEhB,W,CAAA,GACA,iBACA,I,CAAA,YAAsB,GAdX,E,CAAA,OACX,eAAW,E,CAAA,aAGX,EAFQ,SACiB,E,CAAzB,OAAyB,E,CAAA,WAAoB,OAA7B,E,CAAA,WAChB,UAAsB,GAVT,E,CAAA,SACL,SACR,QAAG,aAAW,OAAM,mCANP,E,CAAA,SACL,SACR,QAAO,aAAa,KAAM,qCALb,E,CAAA,SACb,mCAtBU,E,CAAA,SACO,sC,CAAY,sCAAkB,K,EAE/C,2BAQY,aALR,EADS,E,CAAT,QAAS,aACT,GAIG,IAMuD,EAFpD,WACR,Y,CAAA,W,CAAA,YAAiC,yBACmB,E,CAAA,EADnB,UACmB,IAAQ,GApCpD,E,CAAA,SACO,wBACjB,mBADiB,c,CAAY,sCAAkB,KACnC,E,CAAZ,OAAY,aAA4B,M,AAAA,I,AAAA,G,EAAA,GC5QlD,WDuRwC,ECvRxC,S,CAAA,a,CAAA,c,CDuRwC,E,CATnB,E,CAAT,QAAS,eAQT,oCAGM,E,CAHN,QAGM,aAAgC,M,AAAA,I,AAAA,G,EAAA,IACR,K,CAAlB,OAAkB,E,CAAA,aAAyB,c,CAAA,kBAXvD,E,CAAA,KAQc,GAAc,IAK9B,I,CAAA,QAAS,GArBC,E,CAAA,SACkC,WAAO,kBAAnD,kCAA+B,aARrB,E,CAAA,SACV,8B,CAAA,2BACoB,E,CAAlB,yB,CAAA,wBAAkB,KAAlB,OAAkB,E,CAAA,gBAEyB,c,CAAA,OAC7C,kBAAQ,sBAAR,EAAQ,YAA+B,QAAvC,QAAgD,G,EAZrC,E,CAAA,SACH,WAER,UAAO,E,CAAP,OAAO,E,CAAA,aAAuC,OAEnC,qEAAiC,aAD5B,a,EAhBL,E,CAAA,SAUX,EATA,UAAc,E,CAAd,OAAc,eAAuC,QAGjD,wBACA,2BACoB,EAAlB,cAAkB,GAAlB,OAAkB,E,CAAA,gBAC0D,c,CAAA,OAC9E,iDAAc,UAND,SAQjB,QAAS,GAdW,EAAQ,SAAR,QAAiB,GADV,UAAQ,GADf,aAAoB,GADpB,aAAmB,GADnB,cAAW,GALrB,E,CAAA,SACV,c,CAAA,2BACoB,E,CAAlB,O,CAAA,wBAAkB,KAAlB,OAAkB,E,CAAA,gBACU,c,CAAA,OACtB,wBAAR,EAAQ,YAAR,QAAoB,G,IAsTF,E,CAAlB,kBAAkB,KAAlB,OAAkB,E,CAAA,gBACyB,c,CAAA,Y,AAAA,I,AAAA,G,EAAA,MAnVnD,ECxMF,qB,CAAA,kB,CAAA,kBD6hBU,2C,EC7hBV,YD8hBU,S,CAAA,0BAAkB,E,CAAA,E,CAAA,E,CAAA,EAAlB,6B,CAAA,wBAAkB,SAAlB,OAAkB,kBAGwB,uB,CAAA,G,EAAA,I,KAjbV,K,CAAA,4BAAyB,cAAsB,IAAC,C,KAQpF,K,CAAA,4BACe,uBAAyB,K,CAAA,EAAI,MACrC,EAAK,C,aAdhB,K,CAAA,qBAEmD,GAFnD,S,CAEsB,GAApB,OAAoB,eAA6B,K,CAAA,iB,CAAA,E,EAE/B,GAF+B,sB,GAAA,mDAE7C,OAAc,aAAwE,OAAtF,aAAsF,KACjF,SAHwC,EASjC,GAJkC,GAA9B,E,CAAA,GAApB,OAAoB,eAA8B,K,CAAA,iB,CAAA,E,EAAA,sB,GAAA,mDACF,oBAAe,KACtD,SAET,OAAgB,eAQhB,IAH4C,EAA1B,E,CAAA,GAAlB,OAAkB,eAA0B,K,CAAA,iB,CAAA,4BACrB,cAAsB,GADD,EAG5C,oBACK,gCAAyE,C,EA1B5D,kBAAS,C,WADmC,QAAhE,OAAgE,eAAgB,8BAChF,+BACQ,EAD2B,OAC3B,eAAgB,gDAAgC,cAAW,0BACnE,+BAA+B,C,MAT/B,qEACgD,C,MAHvB,qBAAqB,eAAqB,mBAAkB,C,EANrD,GAAsB,GAAxC,QAA0D,EAA1D,OAA0D,aAAuC,OAAzD,aAAyD,OAA/E,eAAgF,oBAAC,C,EAD3C,IAA5D,GAAV,mCAAmD,OAAzC,aAA4D,OAC4C,C,KAN1G,WACR,eAAmB,YAAe,GAAC,C,WAPnC,8BAAS,UAAT,OAAS,UACT,uBAAS,UAAT,iBAAS,SADA,cACA,kBACT,wBACA,yBAAiB,C,QAPjB,4BAAQ,UAAR,OAAQ,QAAR,EAAQ,cACR,wBAAkB,OAAC,C,OALE,gEAAoB,M,QAHzC,6BACA,gCADA,EACA,YAAgB,M,cAVhB,+B,CAAA,2BAAuC,kBAC5B,UACT,6CAAgC,UAGlC,mCALA,EAKA,cAAqB,iCACH,C,EAVW,IAAnB,WAAmB,cAAgC,C,EAVxC,yBAAwB,C,EAT7B,IAAI,C,+DAM8D,eCtCpF,aDsCoF,+CAAhB,QCtCpE,ODsCoE,aAAgB,c,EAAA,S,EAAA,S,EAAA,gK,EAAA,4F,QCtCpF,4D,QAAA,6E,QAAA,8F,UAAA,mK,EAAA,c,QAAA,8B,EAAA,c,EAAA,c,WAAA","ignoreList":[1]}},{"offset":{"line":0,"column":257351},"map":{"version":3,"sources":["/workspace_root/lib/sx_scope.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Scope stacks — dynamic scope for render-time effects.\n\n Provides scope-push!/pop!/peek, collect!/collected/clear-collected!,\n scope-emit!/emitted/scope-emitted, context, and cookie access.\n\n All functions are registered as primitives so both the CEK evaluator\n and the JIT VM can find them in the same place. *)\n\nopen Sx_types\n\n(** The shared scope stacks hashtable. Each key maps to a stack of values.\n Used by aser for spread/provide/emit patterns, CSSX collect/flush, etc. *)\nlet scope_stacks : (string, value list) Hashtbl.t = Hashtbl.create 8\n\n(** Debug trace for scope operations — enabled from JS *)\nlet _scope_trace = ref false\nlet _scope_log : string list ref = ref []\nlet scope_trace_enable () = _scope_trace := true; _scope_log := []\nlet scope_trace_disable () = _scope_trace := false\nlet scope_trace_drain () =\n let log = List.rev !_scope_log in\n _scope_log := [];\n log\n\n(** Request cookies — set by the Python bridge before each render.\n get-cookie reads from here; set-cookie is a no-op on the server. *)\nlet request_cookies : (string, string) Hashtbl.t = Hashtbl.create 8\n\n(** Clear all scope stacks. Called between requests if needed. *)\nlet clear_all () = Hashtbl.clear scope_stacks\n\nlet () =\n let register = Sx_primitives.register in\n\n (* --- Cookies --- *)\n\n register \"get-cookie\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt request_cookies name with\n | Some v -> String v\n | None -> Nil)\n | _ -> Nil);\n\n register \"set-cookie\" (fun _args -> Nil);\n\n (* --- Core scope stack operations --- *)\n\n register \"scope-push!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"PUSH %s depth=%d->%d\" name (List.length stack) (List.length stack + 1) :: !_scope_log;\n Hashtbl.replace scope_stacks name (value :: stack); Nil\n | _ -> Nil);\n\n register \"scope-pop!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"POP %s depth=%d->%d\" name (List.length stack) (max 0 (List.length stack - 1)) :: !_scope_log;\n (match stack with _ :: rest -> Hashtbl.replace scope_stacks name rest | [] -> ()); Nil\n | _ -> Nil);\n\n register \"scope-peek\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"PEEK %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with v :: _ -> v | [] -> Nil)\n | _ -> Nil);\n\n (* --- Context (scope lookup with optional default) --- *)\n\n register \"context\" (fun args ->\n match args with\n | (String name) :: rest ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"CTX %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with\n | v :: _ -> v\n | [] -> (match rest with default_val :: _ -> default_val | [] -> Nil))\n | _ -> Nil);\n\n register \"context-debug\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n let all_keys = Hashtbl.fold (fun k _ acc -> k :: acc) scope_stacks [] in\n String (Printf.sprintf \"name=%s stack_len=%d all_keys=[%s]\"\n name (List.length stack) (String.concat \",\" all_keys))\n | _ -> String \"bad args\");\n\n (* --- Collect / collected / clear-collected! --- *)\n\n register \"collect!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n if not (List.mem value items) then\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"collected\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"clear-collected!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | _ :: rest -> Hashtbl.replace scope_stacks name (List [] :: rest)\n | [] -> Hashtbl.replace scope_stacks name [List []]);\n Nil\n | _ -> Nil);\n\n (* --- Emit / emitted (for spread attrs in adapter-html.sx) --- *)\n\n register \"scope-emit!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | Nil :: rest ->\n Hashtbl.replace scope_stacks name (List [value] :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"emit!\" (fun args ->\n (* Alias for scope-emit! *)\n match Sx_primitives.get_primitive \"scope-emit!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"emitted\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"scope-emitted\" (fun args ->\n match Sx_primitives.get_primitive \"emitted\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-collected\" (fun args ->\n match Sx_primitives.get_primitive \"collected\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-clear-collected!\" (fun args ->\n match Sx_primitives.get_primitive \"clear-collected!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n (* --- Provide aliases --- *)\n\n register \"provide-push!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-push!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"provide-pop!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-pop!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil)\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":262815},"map":{"version":3,"sources":["/workspace_root/lib/sx_render.ml","/builtin/blackbox.ml"],"sourcesContent":["(** HTML renderer for SX values.\n\n Extracted from run_tests.ml — renders an SX expression tree to an\n HTML string, expanding components and macros along the way.\n\n Depends on [Sx_ref.eval_expr] for evaluating sub-expressions\n during rendering (keyword arg values, conditionals, etc.). *)\n\nopen Sx_types\n\n(* ====================================================================== *)\n(* Tag / attribute registries *)\n(* ====================================================================== *)\n\nlet html_tags = [\n \"html\"; \"head\"; \"body\"; \"title\"; \"meta\"; \"link\"; \"script\"; \"style\"; \"noscript\";\n \"header\"; \"nav\"; \"main\"; \"section\"; \"article\"; \"aside\"; \"footer\";\n \"h1\"; \"h2\"; \"h3\"; \"h4\"; \"h5\"; \"h6\"; \"hgroup\";\n \"div\"; \"p\"; \"blockquote\"; \"pre\"; \"figure\"; \"figcaption\"; \"address\"; \"hr\";\n \"ul\"; \"ol\"; \"li\"; \"dl\"; \"dt\"; \"dd\"; \"menu\";\n \"a\"; \"span\"; \"em\"; \"strong\"; \"small\"; \"b\"; \"i\"; \"u\"; \"s\"; \"sub\"; \"sup\";\n \"mark\"; \"del\"; \"ins\"; \"q\"; \"cite\"; \"dfn\"; \"abbr\"; \"code\"; \"var\"; \"samp\";\n \"kbd\"; \"data\"; \"time\"; \"ruby\"; \"rt\"; \"rp\"; \"bdi\"; \"bdo\"; \"wbr\"; \"br\";\n \"table\"; \"thead\"; \"tbody\"; \"tfoot\"; \"tr\"; \"th\"; \"td\"; \"caption\"; \"colgroup\"; \"col\";\n \"form\"; \"input\"; \"textarea\"; \"select\"; \"option\"; \"optgroup\"; \"button\"; \"label\";\n \"fieldset\"; \"legend\"; \"datalist\"; \"output\"; \"progress\"; \"meter\";\n \"details\"; \"summary\"; \"dialog\";\n \"img\"; \"video\"; \"audio\"; \"source\"; \"picture\"; \"canvas\"; \"iframe\"; \"embed\"; \"object\"; \"param\";\n \"svg\"; \"path\"; \"circle\"; \"rect\"; \"line\"; \"polyline\"; \"polygon\"; \"ellipse\";\n \"g\"; \"defs\"; \"use\"; \"text\"; \"tspan\"; \"clipPath\"; \"mask\"; \"pattern\";\n \"linearGradient\"; \"radialGradient\"; \"stop\"; \"filter\"; \"feBlend\"; \"feFlood\";\n \"feGaussianBlur\"; \"feOffset\"; \"feMerge\"; \"feMergeNode\"; \"feComposite\";\n \"template\"; \"slot\";\n]\n\nlet void_elements = [\n \"area\"; \"base\"; \"br\"; \"col\"; \"embed\"; \"hr\"; \"img\"; \"input\";\n \"link\"; \"meta\"; \"param\"; \"source\"; \"track\"; \"wbr\"\n]\n\nlet boolean_attrs = [\n \"async\"; \"autofocus\"; \"autoplay\"; \"checked\"; \"controls\"; \"default\";\n \"defer\"; \"disabled\"; \"formnovalidate\"; \"hidden\"; \"inert\"; \"ismap\";\n \"loop\"; \"multiple\"; \"muted\"; \"nomodule\"; \"novalidate\"; \"open\";\n \"playsinline\"; \"readonly\"; \"required\"; \"reversed\"; \"selected\"\n]\n\nlet is_html_tag name = List.mem name html_tags\nlet is_void name = List.mem name void_elements\nlet is_boolean_attr name = List.mem name boolean_attrs\n\n\n(* ====================================================================== *)\n(* HTML escaping *)\n(* ====================================================================== *)\n\nlet escape_html s =\n let buf = Buffer.create (String.length s) in\n String.iter (function\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c) s;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* Attribute rendering *)\n(* ====================================================================== *)\n\nlet render_attrs attrs =\n let buf = Buffer.create 64 in\n Hashtbl.iter (fun k v ->\n if is_boolean_attr k then begin\n if sx_truthy v then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k\n end\n end else if not (is_nil v) then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k;\n Buffer.add_string buf \"=\\\"\";\n Buffer.add_string buf (escape_html (value_to_string v));\n Buffer.add_char buf '\"'\n end) attrs;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* HTML renderer *)\n(* ====================================================================== *)\n\n(* Forward ref — resolved at setup time *)\nlet render_to_html_ref : (value -> env -> string) ref =\n ref (fun _expr _env -> \"\")\n\nlet render_to_html expr env = !render_to_html_ref expr env\n\n(** Render via the SX adapter (render-to-html from adapter-html.sx).\n Falls back to the native ref if the SX adapter isn't loaded. *)\nlet sx_render_to_html render_env expr eval_env =\n if env_has render_env \"render-to-html\" then\n let fn = env_get render_env \"render-to-html\" in\n let result = Sx_ref.cek_call fn (List [expr; Env eval_env]) in\n match result with String s -> s | RawHTML s -> s | _ -> Sx_runtime.value_to_str result\n else\n render_to_html expr eval_env\n\nlet render_children children env =\n String.concat \"\" (List.map (fun c -> render_to_html c env) children)\n\n(** Parse keyword attrs and positional children from an element call's args.\n Attrs are evaluated; children are returned UNEVALUATED for render dispatch. *)\nlet parse_element_args args env =\n let attrs = Hashtbl.create 8 in\n let children = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace attrs k v;\n skip := true\n | Spread pairs ->\n List.iter (fun (k, v) -> Hashtbl.replace attrs k v) pairs\n | _ ->\n children := arg :: !children\n ) args;\n (attrs, List.rev !children)\n\nlet render_html_element tag args env =\n let (attrs, children) = parse_element_args args env in\n let attr_str = render_attrs attrs in\n if is_void tag then\n \"<\" ^ tag ^ attr_str ^ \" />\"\n else\n let content = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n \"<\" ^ tag ^ attr_str ^ \">\" ^ content ^ \"\"\n\nlet render_component comp args env =\n match comp with\n | Component c ->\n let kwargs = Hashtbl.create 8 in\n let children_exprs = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace kwargs k v;\n skip := true\n | _ ->\n children_exprs := arg :: !children_exprs\n ) args;\n let children = List.rev !children_exprs in\n let local = env_merge c.c_closure env in\n List.iter (fun p ->\n let v = match Hashtbl.find_opt kwargs p with Some v -> v | None -> Nil in\n ignore (env_bind local p v)\n ) c.c_params;\n if c.c_has_children then begin\n let rendered_children = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n ignore (env_bind local \"children\" (RawHTML rendered_children))\n end;\n render_to_html c.c_body local\n | _ -> \"\"\n\nlet expand_macro (m : macro) args _env =\n let local = env_extend m.m_closure in\n let params = m.m_params in\n let rec bind_params ps as' =\n match ps, as' with\n | [], rest ->\n (match m.m_rest_param with\n | Some rp -> ignore (env_bind local rp (List rest))\n | None -> ())\n | p :: ps_rest, a :: as_rest ->\n ignore (env_bind local p a);\n bind_params ps_rest as_rest\n | _ :: _, [] ->\n List.iter (fun p -> ignore (env_bind local p Nil)) (List.rev ps)\n in\n bind_params params args;\n Sx_ref.eval_expr m.m_body (Env local)\n\nlet rec do_render_to_html (expr : value) (env : env) : string =\n match expr with\n | Nil -> \"\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s -> escape_html s\n | Keyword k -> escape_html k\n | RawHTML s -> s\n | SxExpr s -> s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n do_render_to_html v env\n | List [] | ListRef { contents = [] } -> \"\"\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_to_html head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n do_render_to_html v env\n\nand render_list_to_html head args env =\n match head with\n | Symbol \"<>\" ->\n render_children args env\n | Symbol \"raw!\" ->\n (* Inject pre-rendered HTML without escaping *)\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> s\n | _ -> value_to_string v)\n | Symbol tag when is_html_tag tag ->\n render_html_element tag args env\n | Symbol \"if\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n (if List.length args > 1 then do_render_to_html (List.nth args 1) env else \"\")\n else\n (if List.length args > 2 then do_render_to_html (List.nth args 2) env else \"\")\n | Symbol \"when\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n String.concat \"\" (List.map (fun e -> do_render_to_html e env) (List.tl args))\n else \"\"\n | Symbol \"cond\" ->\n render_cond args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol (\"let\" | \"let*\") ->\n render_let args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> \"\"\n | [last] -> do_render_to_html last env\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env env));\n go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env));\n \"\"\n | Symbol \"map\" ->\n render_map args env false\n | Symbol \"map-indexed\" ->\n render_map args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol \"for-each\" ->\n render_for_each args env\n | Symbol name ->\n (try\n let v = env_get env name in\n (match v with\n | Component c when c.c_affinity = \"client\" -> \"\" (* skip client-only *)\n | Component _ -> render_component v args env\n | Island _i ->\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Printf.sprintf \"%s\" _i.i_name call_sx\n | Macro m ->\n let expanded = expand_macro m args env in\n do_render_to_html expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env)\n with Eval_error _ ->\n (* Primitive or special form — not in env, delegate to CEK *)\n (try\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env\n with Eval_error _ -> \"\"))\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env\n\nand render_cond args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let is_scheme = List.for_all (fun a -> match as_list a with\n | Some items when List.length items = 2 -> true\n | _ -> false) args\n in\n if is_scheme then begin\n let rec go = function\n | [] -> \"\"\n | clause :: rest ->\n (match as_list clause with\n | Some [test; body] ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n | _ -> \"\")\n in go args\n end else begin\n let rec go = function\n | [] -> \"\"\n | [_] -> \"\"\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n in go args\n end\n\nand render_let args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let bindings_expr = List.hd args in\n let body = List.tl args in\n let local = env_extend env in\n let bindings = match as_list bindings_expr with Some l -> l | None -> [] in\n let is_scheme = match bindings with\n | (List _ :: _) | (ListRef _ :: _) -> true\n | _ -> false\n in\n if is_scheme then\n List.iter (fun b ->\n match as_list b with\n | Some [Symbol name; expr] | Some [String name; expr] ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v)\n | _ -> ()\n ) bindings\n else begin\n let rec go = function\n | [] -> ()\n | (Symbol name) :: expr :: rest | (String name) :: expr :: rest ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v);\n go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> \"\"\n | [last] -> do_render_to_html last local\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env local));\n render_body rest\n in render_body body\n\nand render_map args env indexed =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.mapi (fun i item ->\n let call_args = if indexed then [Number (float_of_int i); item] else [item] in\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params call_args;\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n do_render_to_html result env\n ) items)\n\nand render_for_each args env =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.map (fun item ->\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params [item];\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n do_render_to_html result env\n ) items)\n\n\n(* ====================================================================== *)\n(* Buffer-based streaming renderer — zero intermediate string allocation *)\n(* ====================================================================== *)\n\n(** Escape HTML directly into a buffer. *)\nlet escape_html_buf buf s =\n for i = 0 to String.length s - 1 do\n match String.unsafe_get s i with\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c\n done\n\n(** Render attributes directly into a buffer. *)\nlet render_attrs_buf buf attrs =\n Hashtbl.iter (fun k v ->\n if is_boolean_attr k then begin\n if sx_truthy v then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k\n end\n end else if not (is_nil v) then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k;\n Buffer.add_string buf \"=\\\"\";\n escape_html_buf buf (value_to_string v);\n Buffer.add_char buf '\"'\n end) attrs\n\n(** Buffer-based render_to_html — writes directly, no intermediate strings. *)\nlet rec render_to_buf buf (expr : value) (env : env) : unit =\n match expr with\n | Nil -> ()\n | Bool true -> Buffer.add_string buf \"true\"\n | Bool false -> Buffer.add_string buf \"false\"\n | Number n ->\n if Float.is_integer n then Buffer.add_string buf (string_of_int (int_of_float n))\n else Buffer.add_string buf (Printf.sprintf \"%g\" n)\n | String s -> escape_html_buf buf s\n | Keyword k -> escape_html_buf buf k\n | RawHTML s -> Buffer.add_string buf s\n | SxExpr s -> Buffer.add_string buf s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n render_to_buf buf v env\n | List [] | ListRef { contents = [] } -> ()\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_buf buf head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n render_to_buf buf v env\n\nand render_list_buf buf head args env =\n match head with\n | Symbol \"<>\" ->\n List.iter (fun c -> render_to_buf buf c env) args\n | Symbol \"raw!\" ->\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> Buffer.add_string buf s\n | _ -> Buffer.add_string buf (value_to_string v))\n | Symbol tag when is_html_tag tag ->\n render_element_buf buf tag args env\n | Symbol \"if\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n (if List.length args > 1 then render_to_buf buf (List.nth args 1) env)\n else\n (if List.length args > 2 then render_to_buf buf (List.nth args 2) env)\n | Symbol \"when\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n List.iter (fun e -> render_to_buf buf e env) (List.tl args)\n | Symbol \"cond\" ->\n render_cond_buf buf args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol (\"let\" | \"let*\") ->\n render_let_buf buf args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> ()\n | [last] -> render_to_buf buf last env\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env env)); go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env))\n | Symbol \"map\" -> render_map_buf buf args env false\n | Symbol \"map-indexed\" -> render_map_buf buf args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol \"for-each\" -> render_for_each_buf buf args env\n | Symbol name ->\n (try\n let v = env_get env name in\n (match v with\n | Component c when c.c_affinity = \"client\" -> ()\n | Component _ -> render_component_buf buf v args env\n | Island _i ->\n (* Islands are client-rendered — emit placeholder with SX call\n expression so the client can hydrate from source. *)\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Buffer.add_string buf (Printf.sprintf \"%s\"\n _i.i_name call_sx)\n | Macro m ->\n let expanded = expand_macro m args env in\n render_to_buf buf expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env)\n with Eval_error msg ->\n (* Unknown symbol/component — skip silently during SSR.\n The client will render from page-sx. *)\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n | _ ->\n (try\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env\n with Eval_error msg ->\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n\nand render_element_buf buf tag args env =\n let (attrs, children) = parse_element_args args env in\n Buffer.add_char buf '<';\n Buffer.add_string buf tag;\n render_attrs_buf buf attrs;\n if is_void tag then\n Buffer.add_string buf \" />\"\n else begin\n Buffer.add_char buf '>';\n List.iter (fun c -> render_to_buf buf c env) children;\n Buffer.add_string buf \"'\n end\n\nand render_component_buf buf comp args env =\n match comp with\n | Component c ->\n let kwargs = Hashtbl.create 8 in\n let children_exprs = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace kwargs k v;\n skip := true\n | _ -> children_exprs := arg :: !children_exprs\n ) args;\n let children = List.rev !children_exprs in\n let local = env_merge c.c_closure env in\n List.iter (fun p ->\n let v = match Hashtbl.find_opt kwargs p with Some v -> v | None -> Nil in\n ignore (env_bind local p v)\n ) c.c_params;\n if c.c_has_children then begin\n let child_buf = Buffer.create 256 in\n List.iter (fun c -> render_to_buf child_buf c env) children;\n ignore (env_bind local \"children\" (RawHTML (Buffer.contents child_buf)))\n end;\n render_to_buf buf c.c_body local\n | _ -> ()\n\nand render_cond_buf buf args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let is_scheme = List.for_all (fun a -> match as_list a with\n | Some items when List.length items = 2 -> true | _ -> false) args in\n if is_scheme then begin\n let rec go = function\n | [] -> ()\n | clause :: rest ->\n (match as_list clause with\n | Some [test; body] ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n | _ -> ())\n in go args\n end else begin\n let rec go = function\n | [] -> () | [_] -> ()\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n in go args\n end\n\nand render_let_buf buf args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let bindings_expr = List.hd args in\n let body = List.tl args in\n let local = env_extend env in\n let bindings = match as_list bindings_expr with Some l -> l | None -> [] in\n let is_scheme = match bindings with (List _ :: _) | (ListRef _ :: _) -> true | _ -> false in\n if is_scheme then\n List.iter (fun b ->\n match as_list b with\n | Some [Symbol name; expr] | Some [String name; expr] ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v)\n | _ -> ()\n ) bindings\n else begin\n let rec go = function\n | [] -> ()\n | (Symbol name) :: expr :: rest | (String name) :: expr :: rest ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v); go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> ()\n | [last] -> render_to_buf buf last local\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env local)); render_body rest\n in render_body body\n\nand render_map_buf buf args env indexed =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n List.iteri (fun i item ->\n let call_args = if indexed then [Number (float_of_int i); item] else [item] in\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a)) l.l_params call_args;\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n render_to_buf buf result env\n ) items\n\nand render_for_each_buf buf args env =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n List.iter (fun item ->\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a)) l.l_params [item];\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n render_to_buf buf result env\n ) items\n\n(** Public API: render to a pre-allocated buffer. *)\nlet render_to_buffer buf expr env = render_to_buf buf expr env\n\n(** Convenience: render to string using the buffer renderer. *)\nlet render_to_html_streaming expr env =\n let buf = Buffer.create 65536 in\n render_to_buf buf expr env;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* Setup — bind render primitives in an env and wire up the ref *)\n(* ====================================================================== *)\n\nlet setup_render_env env =\n render_to_html_ref := do_render_to_html;\n\n let bind name fn =\n ignore (env_bind env name (NativeFn (name, fn)))\n in\n\n bind \"render-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\");\n\n bind \"render-to-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":280290},"map":{"version":3,"sources":["/workspace_root/lib/sx_compiler.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_compiler.ml — Auto-generated from lib/compiler.sx *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap_compiler.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* The compiler uses cek_call from the evaluator for runtime dispatch *)\nlet cek_call = Sx_ref.cek_call\nlet eval_expr = Sx_ref.eval_expr\nlet trampoline v = match v with\n | Thunk (expr, env) -> Sx_ref.eval_expr expr (Env env)\n | other -> other\n\n(* Bindings for external functions the compiler calls.\n Some shadow OCaml stdlib names — the SX versions operate on values. *)\nlet serialize v = String (Sx_types.inspect v)\nlet sx_parse v = match v with\n | String s -> (match Sx_parser.parse_all s with [e] -> e | es -> List es)\n | v -> v\nlet floor v = prim_call \"floor\" [v]\nlet abs v = prim_call \"abs\" [v]\nlet min a b = prim_call \"min\" [a; b]\nlet max a b = prim_call \"max\" [a; b]\nlet set_nth_b lst idx v = prim_call \"set-nth!\" [lst; idx; v]\nlet init lst = prim_call \"init\" [lst]\nlet last lst = prim_call \"last\" [lst]\n\n(* skip_annotations: strips :keyword value pairs from a list (type annotations) *)\nlet rec skip_annotations items =\n match items with\n | List [] | Nil -> Nil\n | List (Keyword _ :: _ :: rest) -> skip_annotations (List rest)\n | ListRef { contents = [] } -> Nil\n | ListRef { contents = Keyword _ :: _ :: rest } -> skip_annotations (List rest)\n | List (first :: _) -> first\n | ListRef { contents = first :: _ } -> first\n | _ -> Nil\n\n(* compile_match: uses local recursion (letrec) that the transpiler can't handle.\n Falls back to CEK evaluation at runtime. *)\nlet compile_match em args scope tail_p =\n let fn = Sx_ref.eval_expr (Symbol \"compile-match\") (Env (Sx_types.make_env ())) in\n Sx_ref.cek_call fn (List [em; args; scope; tail_p])\n\n\n(* === Transpiled from bytecode compiler === *)\n(* make-pool *)\nlet rec make_pool () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"entries\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Hashtbl.replace _d \"index\" (let _d = Hashtbl.create 1 in Hashtbl.replace _d \"_count\" (Number 0.0); Dict _d); Dict _d)\n\n(* pool-add *)\nand pool_add pool value =\n (let () = ignore ((String \"Add a value to the constant pool, return its index. Deduplicates.\")) in (let key = (serialize (value)) in let idx_map = (get (pool) ((String \"index\"))) in (if sx_truthy ((prim_call \"has-key?\" [idx_map; key])) then (get (idx_map) (key)) else (let idx = (get (idx_map) ((String \"_count\"))) in (let () = ignore ((sx_dict_set_b idx_map key idx)) in (let () = ignore ((sx_dict_set_b idx_map (String \"_count\") (prim_call \"+\" [idx; (Number 1.0)]))) in (let () = ignore ((sx_append_b (get (pool) ((String \"entries\"))) value)) in idx)))))))\n\n(* make-scope *)\nand make_scope parent =\n (let _d = Hashtbl.create 5 in Hashtbl.replace _d \"next-slot\" (Number 0.0); Hashtbl.replace _d \"upvalues\" (List []); Hashtbl.replace _d \"locals\" (List []); Hashtbl.replace _d \"parent\" parent; Hashtbl.replace _d \"is-function\" (Bool false); Dict _d)\n\n(* scope-define-local *)\nand scope_define_local scope name =\n (let () = ignore ((String \"Add a local variable, return its slot index.\\n Idempotent: if name already has a slot, return it.\")) in (let existing = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list (get (scope) ((String \"locals\")))))))) in (if sx_truthy (existing) then (get (existing) ((String \"slot\"))) else (let slot = (get (scope) ((String \"next-slot\"))) in (let () = ignore ((sx_append_b (get (scope) ((String \"locals\"))) (let _d = Hashtbl.create 3 in Hashtbl.replace _d \"mutable\" (Bool false); Hashtbl.replace _d \"slot\" slot; Hashtbl.replace _d \"name\" name; Dict _d))) in (let () = ignore ((sx_dict_set_b scope (String \"next-slot\") (prim_call \"+\" [slot; (Number 1.0)]))) in slot))))))\n\n(* scope-resolve *)\nand scope_resolve scope name =\n (let () = ignore ((String \"Resolve a variable name. Returns {:type \\\"local\\\"|\\\"upvalue\\\"|\\\"global\\\", :index N}.\\n Upvalue captures only happen at function boundaries (is-function=true).\\n Let scopes share the enclosing function's frame — their locals are\\n accessed directly without upvalue indirection.\")) in (if sx_truthy ((is_nil (scope))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let locals = (get (scope) ((String \"locals\"))) in let found = (Bool (List.exists (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))) in (if sx_truthy (found) then (let local = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))))) in (CekFrame { cf_type = \"local\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let upvals = (get (scope) ((String \"upvalues\"))) in let uv_found = (Bool (List.exists (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))) in (if sx_truthy (uv_found) then (let uv = (first ((List (List.filter (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let parent = (get (scope) ((String \"parent\"))) in (if sx_truthy ((is_nil (parent))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let parent_result = (scope_resolve (parent) (name)) in (if sx_truthy ((prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"global\")])) then parent_result else (if sx_truthy ((get (scope) ((String \"is-function\")))) then (let uv_idx = (len ((get (scope) ((String \"upvalues\"))))) in (let () = ignore ((sx_append_b (get (scope) ((String \"upvalues\"))) (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"index\" (get (parent_result) ((String \"index\"))); Hashtbl.replace _d \"is-local\" (prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"local\")]); Hashtbl.replace _d \"uv-index\" uv_idx; Hashtbl.replace _d \"name\" name; Dict _d))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }))) else parent_result)))))))))))\n\n(* make-emitter *)\nand make_emitter () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"pool\" (make_pool ()); Hashtbl.replace _d \"bytecode\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Dict _d)\n\n(* emit-byte *)\nand emit_byte em byte =\n (sx_append_b (get (em) ((String \"bytecode\"))) byte)\n\n(* emit-u16 *)\nand emit_u16 em value =\n (let () = ignore ((emit_byte (em) ((prim_call \"mod\" [value; (Number 256.0)])))) in (emit_byte (em) ((prim_call \"mod\" [(floor ((prim_call \"/\" [value; (Number 256.0)]))); (Number 256.0)]))))\n\n(* emit-i16 *)\nand emit_i16 em value =\n (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in (emit_u16 (em) (v)))\n\n(* emit-op *)\nand emit_op em opcode =\n (emit_byte (em) (opcode))\n\n(* emit-const *)\nand emit_const em value =\n (let idx = (pool_add ((get (em) ((String \"pool\")))) (value)) in (let () = ignore ((emit_op (em) ((Number 1.0)))) in (emit_u16 (em) (idx))))\n\n(* current-offset *)\nand current_offset em =\n (len ((get (em) ((String \"bytecode\")))))\n\n(* patch-i16 *)\nand patch_i16 em offset value =\n (let () = ignore ((String \"Patch a previously emitted i16 at the given bytecode offset.\")) in (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in let bc = (get (em) ((String \"bytecode\"))) in (let () = ignore ((set_nth_b (bc) (offset) ((prim_call \"mod\" [v; (Number 256.0)])))) in (set_nth_b (bc) ((prim_call \"+\" [offset; (Number 1.0)])) ((prim_call \"mod\" [(floor ((prim_call \"/\" [v; (Number 256.0)]))); (Number 256.0)]))))))\n\n(* compile-expr *)\nand compile_expr em expr scope tail_p =\n (let () = ignore ((String \"Compile an expression. tail? indicates tail position for TCO.\")) in (if sx_truthy ((is_nil (expr))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"number\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"string\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"boolean\")])) then (emit_op (em) ((if sx_truthy (expr) then (Number 3.0) else (Number 4.0)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"keyword\")])) then (emit_const (em) ((keyword_name (expr)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"symbol\")])) then (compile_symbol (em) ((symbol_name (expr))) (scope)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])) then (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (compile_list (em) (expr) (scope) (tail_p))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"dict\")])) then (compile_dict (em) (expr) (scope)) else (emit_const (em) (expr)))))))))))\n\n(* compile-symbol *)\nand compile_symbol em name scope =\n (let resolved = (scope_resolve (scope) (name)) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 16.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 18.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (idx)))))))\n\n(* compile-dict *)\nand compile_dict em expr scope =\n (let ks = (prim_call \"keys\" [expr]) in let count = (len (ks)) in (let () = ignore ((List.iter (fun k -> ignore ((let () = ignore ((emit_const (em) (k))) in (compile_expr (em) ((get (expr) (k))) (scope) ((Bool false)))))) (sx_to_list ks); Nil)) in (let () = ignore ((emit_op (em) ((Number 65.0)))) in (emit_u16 (em) (count)))))\n\n(* compile-list *)\nand compile_list em expr scope tail_p =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])))))) then (compile_call (em) (head) (args) (scope) (tail_p)) else (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (compile_if (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (compile_when (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (compile_and (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (compile_or (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (compile_define (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (compile_set (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (compile_quote (em) (args)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (compile_cond (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (compile_case (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (compile_thread (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (compile_defmacro (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defstyle\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defhandler\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defpage\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defquery\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defaction\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defrelation\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"deftype\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defeffect\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (compile_quasiquote (em) ((first (args))) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (compile_letrec (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (compile_match (em) (args) (scope) (tail_p)) else (compile_call (em) (head) (args) (scope) (tail_p))))))))))))))))))))))))))))))))))))\n\n(* compile-if *)\nand compile_if em args scope tail_p =\n (let test = (first (args)) in let then_expr = (nth (args) ((Number 1.0))) in let else_expr = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let else_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (then_expr) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (else_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [else_jump; (Number 2.0)])])))) in (let () = ignore ((if sx_truthy ((is_nil (else_expr))) then (emit_op (em) ((Number 2.0))) else (compile_expr (em) (else_expr) (scope) (tail_p)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-when *)\nand compile_when em args scope tail_p =\n (let test = (first (args)) in let body = (rest (args)) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_begin (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip_jump; (Number 2.0)])])))) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-and *)\nand compile_and em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 3.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_and (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-or *)\nand compile_or em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 4.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 34.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_or (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-begin *)\nand compile_begin em exprs scope tail_p =\n (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (exprs)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\"))))))))))) then (List.iter (fun expr -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (expr)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (expr)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (expr)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (expr)))); (String \"define\")]))))) then (let name_expr = (nth (expr) ((Number 1.0))) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in (scope_define_local (scope) (name))) else Nil))) (sx_to_list exprs); Nil) else Nil)) in (if sx_truthy ((empty_p (exprs))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (exprs)); (Number 1.0)])) then (compile_expr (em) ((first (exprs))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_begin (em) ((rest (exprs))) (scope) (tail_p)))))))\n\n(* compile-let *)\nand compile_let em args scope tail_p =\n (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (let loop_name = (symbol_name ((first (args)))) in let bindings = (nth (args) ((Number 1.0))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in let params = ref ((List [])) in let inits = ref ((List [])) in (let () = ignore ((List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (first (binding)) else (make_symbol ((first (binding))))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil)) in (let lambda_expr = (prim_call \"concat\" [(List [(make_symbol ((String \"fn\"))); !params]); body]) in let letrec_bindings = (List [(List [(make_symbol (loop_name)); lambda_expr])]) in let call_expr = (cons ((make_symbol (loop_name))) (!inits)) in (compile_letrec (em) ((List [letrec_bindings; call_expr])) (scope) (tail_p))))) else (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((List.iter (fun binding -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in let value = (nth (binding) ((Number 1.0))) in let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((compile_expr (em) (value) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list bindings); Nil)) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-letrec *)\nand compile_letrec em args scope tail_p =\n (let () = ignore ((String \"Compile letrec: all names visible during value compilation.\\n 1. Define all local slots (initialized to nil).\\n 2. Compile each value and assign — names are already in scope\\n so mutually recursive functions can reference each other.\")) in (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((let slots = (List (List.map (fun binding -> (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (let () = ignore ((emit_byte (em) (slot))) in slot)))))) (sx_to_list bindings))) in (List.iter (fun pair -> ignore ((let binding = (first (pair)) in let slot = (nth (pair) ((Number 1.0))) in (let () = ignore ((compile_expr (em) ((nth (binding) ((Number 1.0)))) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list (List (List.map (fun i -> (List [(nth (bindings) (i)); (nth (slots) (i))])) (sx_to_list (prim_call \"range\" [(Number 0.0); (len (bindings))]))))); Nil))) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-lambda *)\nand compile_lambda em args scope =\n (let params = (first (args)) in let body = (rest (args)) in let fn_scope = (make_scope (scope)) in let fn_em = (make_emitter ()) in (let () = ignore ((sx_dict_set_b fn_scope (String \"is-function\") (Bool true))) in (let () = ignore ((List.iter (fun p -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (list_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (p)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")])))) then (symbol_name ((first (p)))) else p)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&key\")]))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&rest\")]))))))) then (scope_define_local (fn_scope) (name)) else Nil)))) (sx_to_list params); Nil)) in (let () = ignore ((compile_begin (fn_em) (body) (fn_scope) ((Bool true)))) in (let () = ignore ((emit_op (fn_em) ((Number 50.0)))) in (let upvals = (get (fn_scope) ((String \"upvalues\"))) in let code = (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"upvalue-count\" (len (upvals)); Hashtbl.replace _d \"arity\" (len ((get (fn_scope) ((String \"locals\"))))); Hashtbl.replace _d \"constants\" (get ((get (fn_em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (fn_em) ((String \"bytecode\"))); Dict _d) in let code_idx = (pool_add ((get (em) ((String \"pool\")))) (code)) in (let () = ignore ((emit_op (em) ((Number 51.0)))) in (let () = ignore ((emit_u16 (em) (code_idx))) in (List.iter (fun uv -> ignore ((let () = ignore ((emit_byte (em) ((if sx_truthy ((get (uv) ((String \"is-local\")))) then (Number 1.0) else (Number 0.0))))) in (emit_byte (em) ((get (uv) ((String \"index\")))))))) (sx_to_list upvals); Nil)))))))))\n\n(* compile-define *)\nand compile_define em args scope =\n (let name_expr = (first (args)) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in let value = (let rest_args = (rest (args)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_args)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]))) then (skip_annotations (rest_args)) else (first (rest_args)))) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\")))))))))) then (let slot = (scope_define_local (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))) else (let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 128.0)))) in (emit_u16 (em) (name_idx)))))))\n\n(* compile-set *)\nand compile_set em args scope =\n (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (symbol_name ((first (args)))) else (first (args))) in let value = (nth (args) ((Number 1.0))) in let resolved = (scope_resolve (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 19.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 21.0)))) in (emit_u16 (em) (idx))))))))\n\n(* compile-quote *)\nand compile_quote em args =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (emit_const (em) ((first (args)))))\n\n(* compile-cond *)\nand compile_cond em args scope tail_p =\n (let () = ignore ((String \"Compile (cond test1 body1 test2 body2 ... :else fallback).\")) in (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (emit_op (em) ((Number 2.0))) else (let test = (first (args)) in let body = (nth (args) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (prim_call \"slice\" [args; (Number 2.0)]) else (List [])) in (if sx_truthy ((let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (prim_call \"=\" [test; (Bool true)]))) then (compile_expr (em) (body) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_cond (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))\n\n(* compile-case *)\nand compile_case em args scope tail_p =\n (let () = ignore ((String \"Compile (case expr val1 body1 val2 body2 ... :else fallback).\")) in (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let clauses = (rest (args)) in (compile_case_clauses (em) (clauses) (scope) (tail_p)))))\n\n(* compile-case-clauses *)\nand compile_case_clauses em clauses scope tail_p =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (emit_op (em) ((Number 2.0)))) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (clauses)); (Number 2.0)])) then (prim_call \"slice\" [clauses; (Number 2.0)]) else (List [])) in (if sx_truthy ((let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (prim_call \"=\" [test; (Bool true)]))) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_expr (em) (body) (scope) (tail_p))) else (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"=\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) ((Number 2.0))))))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_case_clauses (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))))\n\n(* compile-thread *)\nand compile_thread em args scope tail_p =\n (let () = ignore ((String \"Compile (-> val (f1 a) (f2 b)) by desugaring to nested calls.\")) in (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let val_expr = (first (args)) in let forms = (rest (args)) in (compile_thread_step (em) (val_expr) (forms) (scope) (tail_p))))))\n\n(* compile-thread-step *)\nand compile_thread_step em val_expr forms scope tail_p =\n (if sx_truthy ((empty_p (forms))) then (compile_expr (em) (val_expr) (scope) (tail_p)) else (let form = (first (forms)) in let rest_forms = (rest (forms)) in let is_tail = (let _and = tail_p in if not (sx_truthy _and) then _and else (empty_p (rest_forms))) in (let call_expr = (if sx_truthy ((list_p (form))) then (prim_call \"concat\" [(List [(first (form)); val_expr]); (rest (form))]) else (List [form; val_expr])) in (if sx_truthy ((empty_p (rest_forms))) then (compile_expr (em) (call_expr) (scope) (is_tail)) else (let () = ignore ((compile_expr (em) (call_expr) (scope) ((Bool false)))) in (compile_thread_step (em) (call_expr) (rest_forms) (scope) (tail_p)))))))\n\n(* compile-defcomp *)\nand compile_defcomp em args scope =\n (let () = ignore ((String \"Compile defcomp/defisland — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defcomp\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defcomp\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-defmacro *)\nand compile_defmacro em args scope =\n (let () = ignore ((String \"Compile defmacro — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defmacro\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defmacro\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-quasiquote *)\nand compile_quasiquote em expr scope =\n (let () = ignore ((String \"Compile quasiquote inline — walks the template at compile time,\\n emitting code that builds the structure at runtime. Unquoted\\n expressions are compiled normally (resolving locals/upvalues),\\n avoiding the qq-expand-runtime env-lookup limitation.\")) in (compile_qq_expr (em) (expr) (scope)))\n\n(* compile-qq-expr *)\nand compile_qq_expr em expr scope =\n (let () = ignore ((String \"Compile a quasiquote sub-expression.\")) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])))))) then (emit_const (em) (expr)) else (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (let head = (first (expr)) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (head)); (String \"unquote\")]))) then (compile_expr (em) ((nth (expr) ((Number 1.0)))) (scope) ((Bool false))) else (compile_qq_list (em) (expr) (scope)))))))\n\n(* compile-qq-list *)\nand compile_qq_list em items scope =\n (let () = ignore ((String \"Compile a quasiquote list. Handles splice-unquote by building\\n segments and concatenating them.\")) in (let has_splice = (Bool (List.exists (fun item -> sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")])))))) (sx_to_list items))) in (if sx_truthy ((Bool (not (sx_truthy (has_splice))))) then (let () = ignore ((List.iter (fun item -> ignore ((compile_qq_expr (em) (item) (scope)))) (sx_to_list items); Nil)) in (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((len (items)))))) else (let segment_count = ref ((Number 0.0)) in let pending = ref ((Number 0.0)) in (let () = ignore ((List.iter (fun item -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")]))))) then (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (let () = ignore ((segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil)) in (pending := (Number 0.0); Nil)))) else Nil)) in (let () = ignore ((compile_expr (em) ((nth (item) ((Number 1.0)))) (scope) ((Bool false)))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else (let () = ignore ((compile_qq_expr (em) (item) (scope))) in (pending := (prim_call \"+\" [!pending; (Number 1.0)]); Nil))))) (sx_to_list items); Nil)) in (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else Nil)) in (if sx_truthy ((prim_call \">\" [!segment_count; (Number 1.0)])) then (let concat_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"concat\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (concat_idx))) in (emit_byte (em) (!segment_count))))) else Nil)))))))\n\n(* compile-call *)\nand compile_call em head args scope tail_p =\n (let is_prim = (let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let name = (symbol_name (head)) in (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"local\")]))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"upvalue\")]))))) in if not (sx_truthy _and) then _and else (is_primitive (name)))))) in (if sx_truthy (is_prim) then (let name = (symbol_name (head)) in let argc = (len (args)) in let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) (argc)))))) else (let () = ignore ((compile_expr (em) (head) (scope) ((Bool false)))) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (if sx_truthy (tail_p) then (let () = ignore ((emit_op (em) ((Number 49.0)))) in (emit_byte (em) ((len (args))))) else (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((len (args))))))))))\n\n(* compile *)\nand compile expr =\n (let () = ignore ((String \"Compile a single SX expression to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d)))))\n\n(* compile-module *)\nand compile_module exprs =\n (let () = ignore ((String \"Compile a list of top-level expressions to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((List.iter (fun expr -> ignore ((let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (emit_op (em) ((Number 5.0)))))) (sx_to_list (init (exprs))); Nil)) in (let () = ignore ((compile_expr (em) ((last (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d))))))\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}}]} diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm deleted file mode 100644 index 3b30fe84..00000000 Binary files a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm and /dev/null differ diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm.map b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm.map deleted file mode 100644 index 7a68aca8..00000000 --- a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sections":[{"offset":{"line":0,"column":93317},"map":{"version":3,"sources":["/workspace_root/lib/sx_types.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Core types for the SX language.\n\n The [value] sum type represents every possible SX runtime value.\n OCaml's algebraic types make the CEK machine's frame dispatch a\n pattern match — exactly what the spec describes. *)\n\n(** {1 Symbol interning} *)\n\n(** Map symbol names to small integers for O(1) env lookups.\n The intern table is populated once per unique symbol name;\n all subsequent env operations use the integer key. *)\n\nlet sym_to_id : (string, int) Hashtbl.t = Hashtbl.create 512\nlet id_to_sym : (int, string) Hashtbl.t = Hashtbl.create 512\nlet sym_next = ref 0\n\nlet intern s =\n match Hashtbl.find_opt sym_to_id s with\n | Some id -> id\n | None ->\n let id = !sym_next in\n incr sym_next;\n Hashtbl.replace sym_to_id s id;\n Hashtbl.replace id_to_sym id s;\n id\n\nlet unintern id =\n match Hashtbl.find_opt id_to_sym id with\n | Some s -> s\n | None -> \"\"\n\n\n(** {1 Environment} *)\n\n(** Lexical scope chain. Each frame holds a mutable binding table\n keyed by interned symbol IDs for fast lookup. *)\ntype env = {\n bindings : (int, value) Hashtbl.t;\n parent : env option;\n}\n\n(** {1 Values} *)\n\nand value =\n | Nil\n | Bool of bool\n | Number of float\n | String of string\n | Symbol of string\n | Keyword of string\n | List of value list\n | Dict of dict\n | Lambda of lambda\n | Component of component\n | Island of island\n | Macro of macro\n | Thunk of value * env\n | Continuation of (value -> value) * dict option\n | NativeFn of string * (value list -> value)\n | Signal of signal\n | RawHTML of string\n | Spread of (string * value) list\n | SxExpr of string (** Opaque SX wire-format string — aser output. *)\n | Env of env (** First-class environment — used by CEK machine state dicts. *)\n | ListRef of value list ref (** Mutable list — JS-style array for append! *)\n | CekState of cek_state (** Optimized CEK machine state — avoids Dict allocation. *)\n | CekFrame of cek_frame (** Optimized CEK continuation frame. *)\n | VmClosure of vm_closure (** VM-compiled closure — callable within the VM without allocating a new VM. *)\n\n(** CEK machine state — record instead of Dict for performance.\n 5 fields × 55K steps/sec = 275K Hashtbl allocations/sec eliminated. *)\nand cek_state = {\n cs_control : value;\n cs_env : value;\n cs_kont : value;\n cs_phase : string;\n cs_value : value;\n}\n\n(** CEK continuation frame — tagged record covering all 29 frame types.\n Fields are named generically; not all are used by every frame type.\n Eliminates ~100K Hashtbl allocations per page render. *)\nand cek_frame = {\n cf_type : string; (* frame type tag: \"if\", \"let\", \"call\", etc. *)\n cf_env : value; (* environment — every frame has this *)\n cf_name : value; (* let/define/set/scope: binding name *)\n cf_body : value; (* when/let: body expr *)\n cf_remaining : value; (* begin/cond/map/etc: remaining exprs *)\n cf_f : value; (* call/map/filter/etc: function *)\n cf_args : value; (* call: raw args; arg: evaled args *)\n cf_results : value; (* map/filter/dict: accumulated results *)\n cf_extra : value; (* extra field: scheme, indexed, value, phase, etc. *)\n cf_extra2 : value; (* second extra: emitted, etc. *)\n}\n\n(** Mutable string-keyed table (SX dicts support [dict-set!]). *)\nand dict = (string, value) Hashtbl.t\n\nand lambda = {\n l_params : string list;\n l_body : value;\n l_closure : env;\n mutable l_name : string option;\n mutable l_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand component = {\n c_name : string;\n c_params : string list;\n c_has_children : bool;\n c_body : value;\n c_closure : env;\n c_affinity : string; (** \"auto\" | \"client\" | \"server\" *)\n mutable c_file : string option; (** Source file path *)\n mutable c_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand island = {\n i_name : string;\n i_params : string list;\n i_has_children : bool;\n i_body : value;\n i_closure : env;\n mutable i_file : string option; (** Source file path *)\n}\n\nand macro = {\n m_params : string list;\n m_rest_param : string option;\n m_body : value;\n m_closure : env;\n m_name : string option;\n}\n\nand signal = {\n mutable s_value : value;\n mutable s_subscribers : (unit -> unit) list;\n mutable s_deps : signal list;\n}\n\n(** {1 Bytecode VM types}\n\n Defined here (not in sx_vm.ml) because [vm_code.constants] references\n [value] and [lambda.l_compiled] references [vm_closure] — mutual\n recursion requires all types in one [and] chain. *)\n\n(** Compiled function body — bytecode + constant pool. *)\nand vm_code = {\n vc_arity : int;\n vc_locals : int;\n vc_bytecode : int array;\n vc_constants : value array;\n}\n\n(** Upvalue cell — shared mutable reference to a captured variable. *)\nand vm_upvalue_cell = {\n mutable uv_value : value;\n}\n\n(** Closure — compiled code + captured upvalues + live env reference. *)\nand vm_closure = {\n vm_code : vm_code;\n vm_upvalues : vm_upvalue_cell array;\n vm_name : string option;\n vm_env_ref : (string, value) Hashtbl.t;\n vm_closure_env : env option; (** Original closure env for inner functions *)\n}\n\n\n(** {1 Forward ref for calling VM closures from outside the VM} *)\n\nlet _vm_call_closure_ref : (vm_closure -> value list -> value) ref =\n ref (fun _ _ -> raise (Failure \"VM call_closure not initialized\"))\n\n\n(** {1 Errors} *)\n\nexception Eval_error of string\nexception Parse_error of string\n\n\n(** {1 Environment operations} *)\n\nlet make_env () =\n { bindings = Hashtbl.create 16; parent = None }\n\nlet env_extend parent =\n { bindings = Hashtbl.create 16; parent = Some parent }\n\n(* Optional hook: called after every env_bind with (env, name, value).\n Used by browser kernel to sync VM globals table. *)\nlet _env_bind_hook : (env -> string -> value -> unit) option ref = ref None\n\n(* Optional hook: called after VM GLOBAL_SET writes to vm.globals.\n Used by browser kernel to sync mutations back to global_env. *)\nlet _vm_global_set_hook : (string -> value -> unit) option ref = ref None\n\nlet env_bind env name v =\n Hashtbl.replace env.bindings (intern name) v;\n (match !_env_bind_hook with Some f -> f env name v | None -> ());\n Nil\n\n(* Internal: scope-chain lookup with pre-interned ID *)\nlet rec env_has_id env id =\n Hashtbl.mem env.bindings id ||\n match env.parent with Some p -> env_has_id p id | None -> false\n\nlet env_has env name = env_has_id env (intern name)\n\nlet rec env_get_id env id name =\n match Hashtbl.find_opt env.bindings id with\n | Some v -> v\n | None ->\n match env.parent with\n | Some p -> env_get_id p id name\n | None ->\n raise (Eval_error (\"Undefined symbol: \" ^ name))\n\nlet env_get env name = env_get_id env (intern name) name\n\nlet rec env_set_id env id v =\n if Hashtbl.mem env.bindings id then begin\n Hashtbl.replace env.bindings id v;\n (match !_env_bind_hook with Some f -> f env (unintern id) v | None -> ());\n Nil\n end else\n match env.parent with\n | Some p -> env_set_id p id v\n | None -> Hashtbl.replace env.bindings id v; Nil\n\nlet env_set env name v = env_set_id env (intern name) v\n\nlet env_merge base overlay =\n if base == overlay then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let rec is_descendant e depth =\n if depth > 100 then false\n else if e == base then true\n else match e.parent with Some p -> is_descendant p (depth + 1) | None -> false\n in\n if is_descendant overlay 0 then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let e = { bindings = Hashtbl.create 16; parent = Some base } in\n Hashtbl.iter (fun id v ->\n if not (env_has_id base id) then Hashtbl.replace e.bindings id v\n ) overlay.bindings;\n e\n end\n end\n\n\n(** {1 Value extraction helpers} *)\n\nlet value_to_string = function\n | String s -> s | Symbol s -> s | Keyword k -> k\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Bool true -> \"true\" | Bool false -> \"false\"\n | Nil -> \"\" | _ -> \"\"\n\nlet value_to_string_list = function\n | List items | ListRef { contents = items } -> List.map value_to_string items\n | _ -> []\n\nlet value_to_bool = function\n | Bool b -> b | Nil -> false | _ -> true\n\nlet value_to_string_opt = function\n | String s -> Some s | Symbol s -> Some s | Nil -> None | _ -> None\n\n\n(** {1 Constructors — accept [value] args from transpiled code} *)\n\nlet unwrap_env_val = function\n | Env e -> e\n | _ -> raise (Eval_error \"make_lambda: expected env for closure\")\n\nlet make_lambda params body closure =\n let ps = match params with\n | List items -> List.map value_to_string items\n | _ -> value_to_string_list params\n in\n Lambda { l_params = ps; l_body = body; l_closure = unwrap_env_val closure; l_name = None; l_compiled = None }\n\nlet make_component name params has_children body closure affinity =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n let aff = match affinity with String s -> s | _ -> \"auto\" in\n Component {\n c_name = n; c_params = ps; c_has_children = hc;\n c_body = body; c_closure = unwrap_env_val closure; c_affinity = aff;\n c_file = None; c_compiled = None;\n }\n\nlet make_island name params has_children body closure =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n Island {\n i_name = n; i_params = ps; i_has_children = hc;\n i_body = body; i_closure = unwrap_env_val closure;\n i_file = None;\n }\n\nlet make_macro params rest_param body closure name =\n let ps = value_to_string_list params in\n let rp = value_to_string_opt rest_param in\n let n = value_to_string_opt name in\n Macro {\n m_params = ps; m_rest_param = rp;\n m_body = body; m_closure = unwrap_env_val closure; m_name = n;\n }\n\nlet make_thunk expr env = Thunk (expr, unwrap_env_val env)\n\nlet make_symbol name = Symbol (value_to_string name)\nlet make_keyword name = Keyword (value_to_string name)\n\n\n(** {1 Type inspection} *)\n\nlet type_of = function\n | Nil -> \"nil\"\n | Bool _ -> \"boolean\"\n | Number _ -> \"number\"\n | String _ -> \"string\"\n | Symbol _ -> \"symbol\"\n | Keyword _ -> \"keyword\"\n | List _ | ListRef _ -> \"list\"\n | Dict _ -> \"dict\"\n | Lambda _ -> \"lambda\"\n | Component _ -> \"component\"\n | Island _ -> \"island\"\n | Macro _ -> \"macro\"\n | Thunk _ -> \"thunk\"\n | Continuation (_, _) -> \"continuation\"\n | NativeFn _ -> \"function\"\n | Signal _ -> \"signal\"\n | RawHTML _ -> \"raw-html\"\n | Spread _ -> \"spread\"\n | SxExpr _ -> \"sx-expr\"\n | Env _ -> \"env\"\n | CekState _ -> \"dict\" (* CEK state behaves as a dict for type checks *)\n | CekFrame _ -> \"dict\"\n | VmClosure _ -> \"function\"\n\nlet is_nil = function Nil -> true | _ -> false\nlet is_lambda = function Lambda _ -> true | _ -> false\nlet is_component = function Component _ -> true | _ -> false\nlet is_island = function Island _ -> true | _ -> false\nlet is_macro = function Macro _ -> true | _ -> false\nlet is_thunk = function Thunk _ -> true | _ -> false\nlet is_signal = function\n | Signal _ -> true\n | Dict d -> Hashtbl.mem d \"__signal\"\n | _ -> false\n\nlet is_callable = function\n | Lambda _ | NativeFn _ | Continuation (_, _) | VmClosure _ -> true\n | _ -> false\n\n\n(** {1 Truthiness} *)\n\n(** SX truthiness: everything is truthy except [Nil] and [Bool false]. *)\nlet sx_truthy = function\n | Nil | Bool false -> false\n | _ -> true\n\n\n(** {1 Accessors} *)\n\nlet symbol_name = function\n | Symbol s -> String s\n | v -> raise (Eval_error (\"Expected symbol, got \" ^ type_of v))\n\nlet keyword_name = function\n | Keyword k -> String k\n | v -> raise (Eval_error (\"Expected keyword, got \" ^ type_of v))\n\nlet lambda_params = function\n | Lambda l -> List (List.map (fun s -> String s) l.l_params)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_body = function\n | Lambda l -> l.l_body\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_closure = function\n | Lambda l -> Env l.l_closure\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_name = function\n | Lambda l -> (match l.l_name with Some n -> String n | None -> Nil)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet set_lambda_name l n = match l with\n | Lambda l -> l.l_name <- Some n; Nil\n | _ -> raise (Eval_error \"set-lambda-name!: not a lambda\")\n\nlet component_name = function\n | Component c -> String c.c_name\n | Island i -> String i.i_name\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_file = function\n | Component c -> (match c.c_file with Some f -> String f | None -> Nil)\n | Island i -> (match i.i_file with Some f -> String f | None -> Nil)\n | _ -> Nil\n\nlet component_set_file v f =\n (match v, f with\n | Component c, String s -> c.c_file <- Some s\n | Island i, String s -> i.i_file <- Some s\n | _ -> ()); Nil\n\nlet component_set_file_b = component_set_file\n\nlet component_params = function\n | Component c -> List (List.map (fun s -> String s) c.c_params)\n | Island i -> List (List.map (fun s -> String s) i.i_params)\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_body = function\n | Component c -> c.c_body\n | Island i -> i.i_body\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_closure = function\n | Component c -> Env c.c_closure\n | Island i -> Env i.i_closure\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_has_children = function\n | Component c -> Bool c.c_has_children\n | Island i -> Bool i.i_has_children\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_affinity = function\n | Component c -> String c.c_affinity\n | Island _ -> String \"client\"\n | _ -> String \"auto\"\n\nlet macro_params = function\n | Macro m -> List (List.map (fun s -> String s) m.m_params)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_rest_param = function\n | Macro m -> (match m.m_rest_param with Some s -> String s | None -> Nil)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_body = function\n | Macro m -> m.m_body\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_closure = function\n | Macro m -> Env m.m_closure\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet thunk_expr = function\n | Thunk (e, _) -> e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\nlet thunk_env = function\n | Thunk (_, e) -> Env e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\n\n(** {1 Dict operations} *)\n\nlet make_dict () : dict = Hashtbl.create 8\n\nlet dict_get (d : dict) key =\n match Hashtbl.find_opt d key with Some v -> v | None -> Nil\n\nlet dict_has (d : dict) key = Hashtbl.mem d key\n\nlet dict_set (d : dict) key v = Hashtbl.replace d key v\n\nlet dict_delete (d : dict) key = Hashtbl.remove d key\n\nlet dict_keys (d : dict) =\n Hashtbl.fold (fun k _ acc -> String k :: acc) d []\n\nlet dict_vals (d : dict) =\n Hashtbl.fold (fun _ v acc -> v :: acc) d []\n\n\n(** {1 Value display} *)\n\nlet rec inspect = function\n | Nil -> \"nil\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then Printf.sprintf \"%d\" (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s ->\n let buf = Buffer.create (String.length s + 2) in\n Buffer.add_char buf '\"';\n String.iter (function\n | '\"' -> Buffer.add_string buf \"\\\\\\\"\"\n | '\\\\' -> Buffer.add_string buf \"\\\\\\\\\"\n | '\\n' -> Buffer.add_string buf \"\\\\n\"\n | '\\r' -> Buffer.add_string buf \"\\\\r\"\n | '\\t' -> Buffer.add_string buf \"\\\\t\"\n | c -> Buffer.add_char buf c) s;\n Buffer.add_char buf '\"';\n Buffer.contents buf\n | Symbol s -> s\n | Keyword k -> \":\" ^ k\n | List items | ListRef { contents = items } ->\n \"(\" ^ String.concat \" \" (List.map inspect items) ^ \")\"\n | Dict d ->\n let pairs = Hashtbl.fold (fun k v acc ->\n (Printf.sprintf \":%s %s\" k (inspect v)) :: acc) d [] in\n \"{\" ^ String.concat \" \" pairs ^ \"}\"\n | Lambda l ->\n let tag = match l.l_name with Some n -> n | None -> \"lambda\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" l.l_params)\n | Component c ->\n Printf.sprintf \"\" c.c_name (String.concat \", \" c.c_params)\n | Island i ->\n Printf.sprintf \"\" i.i_name (String.concat \", \" i.i_params)\n | Macro m ->\n let tag = match m.m_name with Some n -> n | None -> \"macro\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" m.m_params)\n | Thunk _ -> \"\"\n | Continuation (_, _) -> \"\"\n | NativeFn (name, _) -> Printf.sprintf \"\" name\n | Signal _ -> \"\"\n | RawHTML s -> Printf.sprintf \"\" (String.length s)\n | Spread _ -> \"\"\n | SxExpr s -> Printf.sprintf \"\" (String.length s)\n | Env _ -> \"\"\n | CekState _ -> \"\"\n | CekFrame f -> Printf.sprintf \"\" f.cf_type\n | VmClosure cl -> Printf.sprintf \"\" (match cl.vm_name with Some n -> n | None -> \"anon\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":102024},"map":{"version":3,"sources":["/workspace_root/lib/sx_parser.ml","/builtin/blackbox.ml"],"sourcesContent":["(** S-expression parser.\n\n Recursive descent over a string, producing [Sx_types.value list].\n Supports: lists, dicts, symbols, keywords, strings (with escapes),\n numbers, booleans, nil, comments, quote/quasiquote/unquote sugar. *)\n\nopen Sx_types\n\ntype state = {\n src : string;\n len : int;\n mutable pos : int;\n}\n\nlet make_state src = { src; len = String.length src; pos = 0 }\n\nlet peek s = if s.pos < s.len then Some s.src.[s.pos] else None\nlet advance s = s.pos <- s.pos + 1\nlet at_end s = s.pos >= s.len\n\nlet skip_whitespace_and_comments s =\n let rec go () =\n if at_end s then ()\n else match s.src.[s.pos] with\n | ' ' | '\\t' | '\\n' | '\\r' -> advance s; go ()\n | ';' ->\n while s.pos < s.len && s.src.[s.pos] <> '\\n' do advance s done;\n if s.pos < s.len then advance s;\n go ()\n | _ -> ()\n in go ()\n\n(* Character classification — matches spec/parser.sx ident-start/ident-char.\n ident-start: a-z A-Z _ ~ * + - > < = / ! ? &\n ident-char: ident-start plus 0-9 . : / # , *)\nlet is_ident_start = function\n | 'a'..'z' | 'A'..'Z' | '_' | '~' | '*' | '+' | '-'\n | '>' | '<' | '=' | '/' | '!' | '?' | '&' -> true\n | _ -> false\n\nlet is_ident_char = function\n | c when is_ident_start c -> true\n | '0'..'9' | '.' | ':' | '#' | ',' -> true\n | _ -> false\n\n(* Symbol reading uses ident_char; first char must be ident_start or digit/colon *)\nlet is_symbol_char = is_ident_char\n\nlet read_string s =\n (* s.pos is on the opening quote *)\n advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '\"' then Buffer.contents buf\n else if c = '\\\\' then begin\n if at_end s then raise (Parse_error \"Unterminated string escape\");\n let esc = s.src.[s.pos] in\n advance s;\n (match esc with\n | 'n' -> Buffer.add_char buf '\\n'\n | 't' -> Buffer.add_char buf '\\t'\n | 'r' -> Buffer.add_char buf '\\r'\n | '\"' -> Buffer.add_char buf '\"'\n | '\\\\' -> Buffer.add_char buf '\\\\'\n | 'u' ->\n (* \\uXXXX — read 4 hex digits, encode as UTF-8 *)\n if s.pos + 4 > s.len then raise (Parse_error \"Incomplete \\\\u escape\");\n let hex = String.sub s.src s.pos 4 in\n s.pos <- s.pos + 4;\n let code = int_of_string (\"0x\" ^ hex) in\n let ubuf = Buffer.create 4 in\n Buffer.add_utf_8_uchar ubuf (Uchar.of_int code);\n Buffer.add_string buf (Buffer.contents ubuf)\n | '`' -> Buffer.add_char buf '`'\n | _ -> Buffer.add_char buf '\\\\'; Buffer.add_char buf esc);\n go ()\n end else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n\nlet read_symbol s =\n let start = s.pos in\n while s.pos < s.len && is_symbol_char s.src.[s.pos] do advance s done;\n String.sub s.src start (s.pos - start)\n\nlet try_number str =\n match float_of_string_opt str with\n | Some n -> Some (Number n)\n | None -> None\n\nlet rec read_value s : value =\n skip_whitespace_and_comments s;\n if at_end s then begin\n let line = ref 1 in\n String.iter (fun c -> if c = '\\n' then incr line) s.src;\n raise (Parse_error (Printf.sprintf \"Unexpected end of input at line %d (pos %d)\" !line s.pos))\n end;\n match s.src.[s.pos] with\n | '(' -> read_list s ')'\n | '[' -> read_list s ']'\n | '{' -> read_dict s\n | '\"' -> String (read_string s)\n | '\\'' -> advance s; List [Symbol \"quote\"; read_value s]\n | '`' -> advance s; List [Symbol \"quasiquote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = ';' ->\n (* Datum comment: #; discards next expression *)\n advance s; advance s;\n ignore (read_value s);\n read_value s\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '\\'' ->\n (* Quote shorthand: #'expr -> (quote expr) *)\n advance s; advance s;\n List [Symbol \"quote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '|' ->\n (* Raw string: #|...| — ends at next | *)\n advance s; advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated raw string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '|' then\n String (Buffer.contents buf)\n else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n | ',' ->\n (* Unquote / splice-unquote — matches spec: , always triggers unquote *)\n advance s;\n if s.pos < s.len && s.src.[s.pos] = '@' then begin\n advance s;\n List [Symbol \"splice-unquote\"; read_value s]\n end else\n List [Symbol \"unquote\"; read_value s]\n | _ ->\n begin\n (* Symbol, keyword, number, or boolean *)\n let token = read_symbol s in\n if token = \"\" then begin\n let line = ref 1 and col = ref 1 in\n for i = 0 to s.pos - 1 do\n if s.src.[i] = '\\n' then (incr line; col := 1) else incr col\n done;\n raise (Parse_error (Printf.sprintf \"Unexpected char: %c at line %d col %d (pos %d)\"\n s.src.[s.pos] !line !col s.pos))\n end;\n match token with\n | \"true\" -> Bool true\n | \"false\" -> Bool false\n | \"nil\" -> Nil\n | _ when token.[0] = ':' ->\n Keyword (String.sub token 1 (String.length token - 1))\n | _ ->\n match try_number token with\n | Some n -> n\n | None -> Symbol token\n end\n\nand read_list s close_char =\n advance s; (* skip opening paren/bracket *)\n let items = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated list\");\n if s.src.[s.pos] = close_char then begin\n advance s;\n List (List.rev !items)\n end else begin\n items := read_value s :: !items;\n go ()\n end\n in go ()\n\nand read_dict s =\n advance s; (* skip { *)\n let d = make_dict () in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated dict\");\n if s.src.[s.pos] = '}' then begin\n advance s;\n Dict d\n end else begin\n let key = read_value s in\n let key_str = match key with\n | Keyword k -> k\n | String k -> k\n | Symbol k -> k\n | _ -> raise (Parse_error \"Dict key must be keyword, string, or symbol\")\n in\n let v = read_value s in\n dict_set d key_str v;\n go ()\n end\n in go ()\n\n\n(** Parse a string into a list of SX values. *)\nlet parse_all src =\n let s = make_state src in\n let results = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then List.rev !results\n else begin\n results := read_value s :: !results;\n go ()\n end\n in go ()\n\n(** Parse a file into a list of SX values. *)\nlet parse_file path =\n let ic = open_in path in\n let n = in_channel_length ic in\n let src = really_input_string ic n in\n close_in ic;\n parse_all src\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":106788},"map":{"version":3,"sources":["/workspace_root/lib/sx_primitives.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Built-in primitive functions (~80 pure functions).\n\n Registered in a global table; the evaluator checks this table\n when a symbol isn't found in the lexical environment. *)\n\nopen Sx_types\n\nlet primitives : (string, value list -> value) Hashtbl.t = Hashtbl.create 128\n\n(** Forward refs for calling SX functions from primitives (breaks cycle). *)\nlet _sx_call_fn : (value -> value list -> value) ref =\n ref (fun _ _ -> raise (Eval_error \"sx_call not initialized\"))\nlet _sx_trampoline_fn : (value -> value) ref =\n ref (fun v -> v)\nlet _is_client : bool ref = ref false\n\nlet register name fn = Hashtbl.replace primitives name fn\n\nlet is_primitive name = Hashtbl.mem primitives name\n\nlet get_primitive name =\n match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(* --- Helpers --- *)\n\n(* Trampoline hook — set by sx_ref after initialization to break circular dep *)\nlet trampoline_hook : (value -> value) ref = ref (fun v -> v)\n\nlet rec as_number = function\n | Number n -> n\n | Bool true -> 1.0\n | Bool false -> 0.0\n | Nil -> 0.0\n | String s -> (match float_of_string_opt s with Some n -> n | None -> Float.nan)\n | Thunk _ as t ->\n (* Trampoline thunks — they shouldn't leak but sometimes do *)\n as_number (!trampoline_hook t)\n | v -> raise (Eval_error (\"Expected number, got \" ^ type_of v ^ \": \" ^ (match v with Dict d -> (match Hashtbl.find_opt d \"__signal\" with Some _ -> \"signal{value=\" ^ (match Hashtbl.find_opt d \"value\" with Some v' -> value_to_string v' | None -> \"?\") ^ \"}\" | None -> \"dict\") | _ -> \"\")))\n\nlet as_string = function\n | String s -> s\n | v -> raise (Eval_error (\"Expected string, got \" ^ type_of v))\n\nlet rec as_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | Thunk _ as t -> as_list (!_sx_trampoline_fn t)\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\nlet as_bool = function\n | Bool b -> b\n | v -> sx_truthy v\n\nlet rec to_string = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | Thunk _ as t -> to_string (!trampoline_hook t)\n | v -> inspect v\n\nlet () =\n (* === Arithmetic === *)\n register \"+\" (fun args ->\n Number (List.fold_left (fun acc a -> acc +. as_number a) 0.0 args));\n register \"-\" (fun args ->\n match args with\n | [] -> Number 0.0\n | [a] -> Number (-. (as_number a))\n | a :: rest -> Number (List.fold_left (fun acc x -> acc -. as_number x) (as_number a) rest));\n register \"*\" (fun args ->\n Number (List.fold_left (fun acc a -> acc *. as_number a) 1.0 args));\n register \"/\" (fun args ->\n match args with\n | [a; b] -> Number (as_number a /. as_number b)\n | _ -> raise (Eval_error \"/: expected 2 args\"));\n register \"mod\" (fun args ->\n match args with\n | [a; b] -> Number (Float.rem (as_number a) (as_number b))\n | _ -> raise (Eval_error \"mod: expected 2 args\"));\n register \"inc\" (fun args ->\n match args with [a] -> Number (as_number a +. 1.0) | _ -> raise (Eval_error \"inc: 1 arg\"));\n register \"dec\" (fun args ->\n match args with [a] -> Number (as_number a -. 1.0) | _ -> raise (Eval_error \"dec: 1 arg\"));\n register \"abs\" (fun args ->\n match args with [a] -> Number (Float.abs (as_number a)) | _ -> raise (Eval_error \"abs: 1 arg\"));\n register \"floor\" (fun args ->\n match args with [a] -> Number (floor (as_number a))\n | _ -> raise (Eval_error \"floor: 1 arg\"));\n register \"ceil\" (fun args ->\n match args with [a] -> Number (ceil (as_number a))\n | _ -> raise (Eval_error \"ceil: 1 arg\"));\n register \"round\" (fun args ->\n match args with\n | [a] -> Number (Float.round (as_number a))\n | [a; b] ->\n let n = as_number a and places = int_of_float (as_number b) in\n let factor = 10.0 ** float_of_int places in\n Number (Float.round (n *. factor) /. factor)\n | _ -> raise (Eval_error \"round: 1-2 args\"));\n register \"min\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"min: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.min acc (as_number a)) Float.infinity args));\n register \"max\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"max: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.max acc (as_number a)) Float.neg_infinity args));\n register \"sqrt\" (fun args ->\n match args with [a] -> Number (Float.sqrt (as_number a)) | _ -> raise (Eval_error \"sqrt: 1 arg\"));\n register \"pow\" (fun args ->\n match args with [a; b] -> Number (as_number a ** as_number b)\n | _ -> raise (Eval_error \"pow: 2 args\"));\n register \"clamp\" (fun args ->\n match args with\n | [x; lo; hi] ->\n let x = as_number x and lo = as_number lo and hi = as_number hi in\n Number (Float.max lo (Float.min hi x))\n | _ -> raise (Eval_error \"clamp: 3 args\"));\n register \"parse-int\" (fun args ->\n match args with\n | [String s] -> (match int_of_string_opt s with Some n -> Number (float_of_int n) | None -> Nil)\n | [String s; default_val] ->\n (match int_of_string_opt s with Some n -> Number (float_of_int n) | None -> default_val)\n | [Number n] | [Number n; _] -> Number (float_of_int (int_of_float n))\n | [_; default_val] -> default_val\n | _ -> Nil);\n register \"parse-float\" (fun args ->\n match args with\n | [String s] -> (match float_of_string_opt s with Some n -> Number n | None -> Nil)\n | [Number n] -> Number n\n | _ -> Nil);\n\n (* === Comparison === *)\n (* Safe equality: physical equality for potentially-circular types\n (Dict, Lambda, Component, Island, Signal, NativeFn),\n structural equality for acyclic types (Number, String, Bool, etc.).\n Lists are compared element-wise recursively with the same safety. *)\n let rec safe_eq a b =\n if a == b then true (* physical equality fast path *)\n else match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | (List la | ListRef { contents = la }),\n (List lb | ListRef { contents = lb }) ->\n List.length la = List.length lb &&\n List.for_all2 safe_eq la lb\n (* Dict: check __host_handle for DOM node identity *)\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n (* Lambda/Component/Island/Signal/NativeFn: physical only *)\n | _ -> false\n in\n register \"=\" (fun args ->\n match args with\n | [a; b] -> Bool (safe_eq a b)\n | _ -> raise (Eval_error \"=: 2 args\"));\n register \"!=\" (fun args ->\n match args with\n | [a; b] -> Bool (not (safe_eq a b))\n | _ -> raise (Eval_error \"!=: 2 args\"));\n register \"<\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a < b)\n | [a; b] -> Bool (as_number a < as_number b)\n | _ -> raise (Eval_error \"<: 2 args\"));\n register \">\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a > b)\n | [a; b] -> Bool (as_number a > as_number b)\n | _ -> raise (Eval_error \">: 2 args\"));\n register \"<=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a <= b)\n | [a; b] -> Bool (as_number a <= as_number b)\n | _ -> raise (Eval_error \"<=: 2 args\"));\n register \">=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a >= b)\n | [a; b] -> Bool (as_number a >= as_number b)\n | _ -> raise (Eval_error \">=: 2 args\"));\n\n (* === Logic === *)\n register \"not\" (fun args ->\n match args with [a] -> Bool (not (sx_truthy a)) | _ -> raise (Eval_error \"not: 1 arg\"));\n\n (* === Predicates === *)\n register \"nil?\" (fun args ->\n match args with [a] -> Bool (is_nil a) | _ -> raise (Eval_error \"nil?: 1 arg\"));\n register \"number?\" (fun args ->\n match args with [Number _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"number?: 1 arg\"));\n register \"string?\" (fun args ->\n match args with [String _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"string?: 1 arg\"));\n register \"boolean?\" (fun args ->\n match args with [Bool _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"boolean?: 1 arg\"));\n register \"list?\" (fun args ->\n match args with [List _] | [ListRef _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"list?: 1 arg\"));\n register \"dict?\" (fun args ->\n match args with [Dict _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"dict?: 1 arg\"));\n register \"symbol?\" (fun args ->\n match args with [Symbol _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"symbol?: 1 arg\"));\n register \"keyword?\" (fun args ->\n match args with [Keyword _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"keyword?: 1 arg\"));\n register \"empty?\" (fun args ->\n match args with\n | [List []] | [ListRef { contents = [] }] -> Bool true\n | [List _] | [ListRef _] -> Bool false\n | [String \"\"] -> Bool true | [String _] -> Bool false\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | [Nil] -> Bool true\n | [_] -> Bool false\n | _ -> raise (Eval_error \"empty?: 1 arg\"));\n register \"odd?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 <> 0) | _ -> raise (Eval_error \"odd?: 1 arg\"));\n register \"even?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 = 0) | _ -> raise (Eval_error \"even?: 1 arg\"));\n register \"zero?\" (fun args ->\n match args with [a] -> Bool (as_number a = 0.0) | _ -> raise (Eval_error \"zero?: 1 arg\"));\n\n (* === Strings === *)\n register \"str\" (fun args -> String (String.concat \"\" (List.map to_string args)));\n register \"upper\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upper: 1 arg\"));\n register \"upcase\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upcase: 1 arg\"));\n register \"lower\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"lower: 1 arg\"));\n register \"downcase\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"downcase: 1 arg\"));\n register \"trim\" (fun args ->\n match args with [a] -> String (String.trim (as_string a)) | _ -> raise (Eval_error \"trim: 1 arg\"));\n register \"string-length\" (fun args ->\n match args with [a] -> Number (float_of_int (String.length (as_string a)))\n | _ -> raise (Eval_error \"string-length: 1 arg\"));\n register \"string-contains?\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let rec find i =\n if i + String.length needle > String.length haystack then false\n else if String.sub haystack i (String.length needle) = needle then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"string-contains?: 2 string args\"));\n register \"starts-with?\" (fun args ->\n match args with\n | [String s; String prefix] ->\n Bool (String.length s >= String.length prefix &&\n String.sub s 0 (String.length prefix) = prefix)\n | _ -> raise (Eval_error \"starts-with?: 2 string args\"));\n register \"ends-with?\" (fun args ->\n match args with\n | [String s; String suffix] ->\n let sl = String.length s and xl = String.length suffix in\n Bool (sl >= xl && String.sub s (sl - xl) xl = suffix)\n | _ -> raise (Eval_error \"ends-with?: 2 string args\"));\n register \"index-of\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let nl = String.length needle and hl = String.length haystack in\n let rec find i =\n if i + nl > hl then Number (-1.0)\n else if String.sub haystack i nl = needle then Number (float_of_int i)\n else find (i + 1)\n in find 0\n | _ -> raise (Eval_error \"index-of: 2 string args\"));\n register \"substring\" (fun args ->\n match args with\n | [String s; Number start; Number end_] ->\n let i = int_of_float start and j = int_of_float end_ in\n let len = String.length s in\n let i = max 0 (min i len) and j = max 0 (min j len) in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"substring: 3 args\"));\n register \"substr\" (fun args ->\n match args with\n | [String s; Number start; Number len] ->\n let i = int_of_float start and n = int_of_float len in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n let n = max 0 (min n (sl - i)) in\n String (String.sub s i n)\n | [String s; Number start] ->\n let i = int_of_float start in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n String (String.sub s i (sl - i))\n | _ -> raise (Eval_error \"substr: 2-3 args\"));\n register \"split\" (fun args ->\n match args with\n | [String s; String sep] ->\n List (List.map (fun p -> String p) (String.split_on_char sep.[0] s))\n | _ -> raise (Eval_error \"split: 2 args\"));\n register \"join\" (fun args ->\n match args with\n | [String sep; (List items | ListRef { contents = items })] ->\n String (String.concat sep (List.map to_string items))\n | _ -> raise (Eval_error \"join: 2 args\"));\n register \"replace\" (fun args ->\n let to_str = function\n | String s -> s | SxExpr s -> s | RawHTML s -> s\n | Keyword k -> k | Symbol s -> s\n | Nil -> \"\" | Bool true -> \"true\" | Bool false -> \"false\"\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Thunk _ as t -> (match !_sx_trampoline_fn t with String s -> s | v -> to_string v)\n | v -> to_string v\n in\n match args with\n | [s; old_s; new_s] ->\n let s = to_str s and old_s = to_str old_s and new_s = to_str new_s in\n let ol = String.length old_s in\n if ol = 0 then String s\n else begin\n let buf = Buffer.create (String.length s) in\n let rec go i =\n if i >= String.length s then ()\n else if i + ol <= String.length s && String.sub s i ol = old_s then begin\n Buffer.add_string buf new_s;\n go (i + ol)\n end else begin\n Buffer.add_char buf s.[i];\n go (i + 1)\n end\n in go 0;\n String (Buffer.contents buf)\n end\n | _ -> raise (Eval_error \"replace: 3 string args\"));\n register \"char-from-code\" (fun args ->\n match args with\n | [Number n] ->\n let buf = Buffer.create 4 in\n Buffer.add_utf_8_uchar buf (Uchar.of_int (int_of_float n));\n String (Buffer.contents buf)\n | _ -> raise (Eval_error \"char-from-code: 1 arg\"));\n\n (* === Collections === *)\n register \"list\" (fun args -> ListRef (ref args));\n register \"len\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> Number (float_of_int (List.length l))\n | [String s] -> Number (float_of_int (String.length s))\n | [Dict d] -> Number (float_of_int (Hashtbl.length d))\n | [Nil] | [Bool false] -> Number 0.0\n | [Bool true] -> Number 1.0\n | [Number _] -> Number 1.0\n | [RawHTML s] -> Number (float_of_int (String.length s))\n | [SxExpr s] -> Number (float_of_int (String.length s))\n | [Spread pairs] -> Number (float_of_int (List.length pairs))\n | [Component _] | [Island _] | [Lambda _] | [NativeFn _]\n | [Macro _] | [Thunk _] | [Keyword _] | [Symbol _] -> Number 0.0\n | _ -> raise (Eval_error (Printf.sprintf \"len: %d args\"\n (List.length args))));\n register \"length\" (Hashtbl.find primitives \"len\");\n register \"first\" (fun args ->\n match args with\n | [List (x :: _)] | [ListRef { contents = x :: _ }] -> x\n | [List []] | [ListRef { contents = [] }] -> Nil | [Nil] -> Nil\n | [x] -> raise (Eval_error (\"first: expected list, got \" ^ inspect x))\n | _ -> raise (Eval_error \"first: 1 list arg\"));\n register \"rest\" (fun args ->\n match args with\n | [List (_ :: xs)] | [ListRef { contents = _ :: xs }] -> List xs\n | [List []] | [ListRef { contents = [] }] -> List [] | [Nil] -> List []\n | _ -> raise (Eval_error \"rest: 1 list arg\"));\n register \"last\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with x :: _ -> x | [] -> Nil)\n | _ -> raise (Eval_error \"last: 1 list arg\"));\n register \"init\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with _ :: rest -> List (List.rev rest) | [] -> List [])\n | _ -> raise (Eval_error \"init: 1 list arg\"));\n register \"nth\" (fun args ->\n match args with\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [String s; Number n] ->\n let i = int_of_float n in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> raise (Eval_error \"nth: list/string and number\"));\n register \"cons\" (fun args ->\n match args with\n | [x; List l] | [x; ListRef { contents = l }] -> List (x :: l)\n | [x; Nil] -> List [x]\n | _ -> raise (Eval_error \"cons: value and list\"));\n register \"append\" (fun args ->\n match args with\n | [List la | ListRef { contents = la }; List lb | ListRef { contents = lb }] ->\n List (la @ lb)\n | [List la | ListRef { contents = la }; Nil] -> List la\n | [Nil; List lb | ListRef { contents = lb }] -> List lb\n | [List la | ListRef { contents = la }; v] -> List (la @ [v])\n | [v; List lb | ListRef { contents = lb }] -> List ([v] @ lb)\n | _ ->\n let all = List.concat_map as_list args in\n List all);\n register \"reverse\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.rev l)\n | _ -> raise (Eval_error \"reverse: 1 list\"));\n register \"flatten\" (fun args ->\n let rec flat = function\n | List items | ListRef { contents = items } -> List.concat_map flat items\n | x -> [x]\n in\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.concat_map flat l)\n | _ -> raise (Eval_error \"flatten: 1 list\"));\n register \"concat\" (fun args -> List (List.concat_map as_list args));\n register \"contains?\" (fun args ->\n match args with\n | [List l; item] | [ListRef { contents = l }; item] ->\n (* Physical equality first (handles signals/dicts/closures safely),\n structural fallback only for acyclic types (string/number/bool/nil/symbol/keyword) *)\n let safe_eq a b =\n a == b ||\n (match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n | _ -> false)\n in\n Bool (List.exists (fun x -> safe_eq x item) l)\n | [String s; String sub] ->\n let rec find i =\n if i + String.length sub > String.length s then false\n else if String.sub s i (String.length sub) = sub then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"contains?: 2 args\"));\n register \"range\" (fun args ->\n match args with\n | [Number stop] ->\n let n = int_of_float stop in\n List (List.init (max 0 n) (fun i -> Number (float_of_int i)))\n | [Number start; Number stop] ->\n let s = int_of_float start and e = int_of_float stop in\n let len = max 0 (e - s) in\n List (List.init len (fun i -> Number (float_of_int (s + i))))\n | [Number start; Number stop; Number step] ->\n let s = start and e = stop and st = step in\n if st = 0.0 then List []\n else\n let items = ref [] in\n let i = ref s in\n if st > 0.0 then\n (while !i < e do items := Number !i :: !items; i := !i +. st done)\n else\n (while !i > e do items := Number !i :: !items; i := !i +. st done);\n List (List.rev !items)\n | _ -> raise (Eval_error \"range: 1-3 args\"));\n register \"slice\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number start] ->\n let i = max 0 (int_of_float start) in\n let rec drop n = function _ :: xs when n > 0 -> drop (n-1) xs | l -> l in\n List (drop i l)\n | [(List l | ListRef { contents = l }); Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let len = List.length l in\n let j = min j len in\n let rec take_range idx = function\n | [] -> []\n | x :: xs ->\n if idx >= j then []\n else if idx >= i then x :: take_range (idx+1) xs\n else take_range (idx+1) xs\n in List (take_range 0 l)\n | [String s; Number start] ->\n let i = max 0 (int_of_float start) in\n String (String.sub s i (max 0 (String.length s - i)))\n | [String s; Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let sl = String.length s in\n let j = min j sl in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"slice: 2-3 args\"));\n register \"sort\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.sort compare l)\n | _ -> raise (Eval_error \"sort: 1 list\"));\n register \"zip\" (fun args ->\n match args with\n | [a; b] ->\n let la = as_list a and lb = as_list b in\n let rec go l1 l2 acc = match l1, l2 with\n | x :: xs, y :: ys -> go xs ys (List [x; y] :: acc)\n | _ -> List.rev acc\n in List (go la lb [])\n | _ -> raise (Eval_error \"zip: 2 lists\"));\n register \"zip-pairs\" (fun args ->\n match args with\n | [v] ->\n let l = as_list v in\n let rec go = function\n | a :: b :: rest -> List [a; b] :: go rest\n | _ -> []\n in List (go l)\n | _ -> raise (Eval_error \"zip-pairs: 1 list\"));\n register \"take\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in List (take_n (int_of_float n) l)\n | _ -> raise (Eval_error \"take: list and number\"));\n register \"drop\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in List (drop_n (int_of_float n) l)\n | _ -> raise (Eval_error \"drop: list and number\"));\n register \"chunk-every\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let size = int_of_float n in\n let rec go = function\n | [] -> []\n | l ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in\n List (take_n size l) :: go (drop_n size l)\n in List (go l)\n | _ -> raise (Eval_error \"chunk-every: list and number\"));\n register \"unique\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l })] ->\n let seen = Hashtbl.create 16 in\n let result = List.filter (fun x ->\n let key = inspect x in\n if Hashtbl.mem seen key then false\n else (Hashtbl.replace seen key true; true)\n ) l in\n List result\n | _ -> raise (Eval_error \"unique: 1 list\"));\n\n (* === Dict === *)\n register \"dict\" (fun args ->\n let d = make_dict () in\n let rec go = function\n | [] -> Dict d\n | Keyword k :: v :: rest -> dict_set d k v; go rest\n | String k :: v :: rest -> dict_set d k v; go rest\n | _ -> raise (Eval_error \"dict: pairs of key value\")\n in go args);\n register \"get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [Nil; _] -> Nil (* nil.anything → nil *)\n | [_; _] -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n | _ -> Nil);\n register \"has-key?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | [Dict d; Keyword k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"has-key?: dict and key\"));\n register \"assoc\" (fun args ->\n match args with\n | Dict d :: rest ->\n let d2 = Hashtbl.copy d in\n let rec go = function\n | [] -> Dict d2\n | String k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | Keyword k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | _ -> raise (Eval_error \"assoc: pairs\")\n in go rest\n | _ -> raise (Eval_error \"assoc: dict + pairs\"));\n register \"dissoc\" (fun args ->\n match args with\n | Dict d :: keys ->\n let d2 = Hashtbl.copy d in\n List.iter (fun k -> Hashtbl.remove d2 (to_string k)) keys;\n Dict d2\n | _ -> raise (Eval_error \"dissoc: dict + keys\"));\n register \"merge\" (fun args ->\n let d = make_dict () in\n List.iter (function\n | Dict src -> Hashtbl.iter (fun k v -> Hashtbl.replace d k v) src\n | _ -> raise (Eval_error \"merge: all args must be dicts\")\n ) args;\n Dict d);\n register \"keys\" (fun args ->\n match args with [Dict d] -> List (dict_keys d) | _ -> raise (Eval_error \"keys: 1 dict\"));\n register \"vals\" (fun args ->\n match args with [Dict d] -> List (dict_vals d) | _ -> raise (Eval_error \"vals: 1 dict\"));\n register \"mutable-list\" (fun _args -> ListRef (ref []));\n register \"set-nth!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n let l = !r in\n r := List.mapi (fun j x -> if j = i then v else x) l;\n Nil\n | [List _; _; _] ->\n raise (Eval_error \"set-nth!: list is immutable, use ListRef\")\n | _ -> raise (Eval_error \"set-nth!: expected (list idx val)\"));\n register \"dict-set!\" (fun args ->\n match args with\n | [Dict d; String k; v] -> dict_set d k v; v\n | [Dict d; Keyword k; v] -> dict_set d k v; v\n | _ -> raise (Eval_error \"dict-set!: dict key val\"));\n register \"dict-get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | _ -> raise (Eval_error \"dict-get: dict and key\"));\n register \"dict-has?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"dict-has?: dict and key\"));\n register \"dict-delete!\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_delete d k; Nil\n | _ -> raise (Eval_error \"dict-delete!: dict and key\"));\n\n (* === Misc === *)\n register \"type-of\" (fun args ->\n match args with [a] -> String (type_of a) | _ -> raise (Eval_error \"type-of: 1 arg\"));\n register \"inspect\" (fun args ->\n match args with [a] -> String (inspect a) | _ -> raise (Eval_error \"inspect: 1 arg\"));\n register \"serialize\" (fun args ->\n match args with\n | [a] -> String (inspect a) (* used for dedup keys in compiler *)\n | _ -> raise (Eval_error \"serialize: 1 arg\"));\n register \"make-symbol\" (fun args ->\n match args with\n | [String s] -> Symbol s\n | _ -> raise (Eval_error \"make-symbol: expected string\"));\n register \"error\" (fun args ->\n match args with [String msg] -> raise (Eval_error msg)\n | [a] -> raise (Eval_error (to_string a))\n | _ -> raise (Eval_error \"error: 1 arg\"));\n register \"try-catch\" (fun args ->\n match args with\n | [try_fn; catch_fn] ->\n (try !_sx_trampoline_fn (!_sx_call_fn try_fn [])\n with Eval_error msg ->\n !_sx_trampoline_fn (!_sx_call_fn catch_fn [String msg]))\n | _ -> raise (Eval_error \"try-catch: expected (try-fn catch-fn)\"));\n (* client? — false by default (server); sx_browser.ml sets _is_client := true *)\n register \"client?\" (fun _args -> Bool !_is_client);\n (* Named stores — global mutable registry, bypasses env scoping issues *)\n let store_registry : (string, value) Hashtbl.t = Hashtbl.create 16 in\n register \"def-store\" (fun args ->\n match args with\n | [String name; init_fn] ->\n if not (Hashtbl.mem store_registry name) then begin\n let store = !_sx_trampoline_fn (!_sx_call_fn init_fn []) in\n Hashtbl.replace store_registry name store\n end;\n (match Hashtbl.find_opt store_registry name with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"def-store: expected (name init-fn)\"));\n register \"use-store\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt store_registry name with\n | Some v -> v\n | None -> raise (Eval_error (\"Store not found: \" ^ name)))\n | _ -> raise (Eval_error \"use-store: expected (name)\"));\n register \"clear-stores\" (fun _args -> Hashtbl.clear store_registry; Nil);\n (* SSR stubs — resource returns loading state on server.\n NOTE: effect and register-in-scope must NOT be registered as primitives\n here — the bytecode compiler uses primitive? to decide CALL_PRIM vs\n GLOBAL_GET+CALL. If effect is a primitive, bytecoded modules emit\n CALL_PRIM which returns Nil instead of calling the real effect function\n from core-signals.sx. The server overrides effect in sx_server.ml via\n env_bind AFTER compilation. *)\n (* register \"effect\" — REMOVED: see note above *)\n (* register \"register-in-scope\" — REMOVED: see note above *)\n (* resource — SSR stub: return signal with {loading: true}, client hydrates real fetch *)\n register \"resource\" (fun _args ->\n let state = Hashtbl.create 8 in\n Hashtbl.replace state \"loading\" (Bool true);\n Hashtbl.replace state \"data\" Nil;\n Hashtbl.replace state \"error\" Nil;\n let sig_d = Hashtbl.create 8 in\n Hashtbl.replace sig_d \"__signal\" (Bool true);\n Hashtbl.replace sig_d \"value\" (Dict state);\n Hashtbl.replace sig_d \"subscribers\" (List []);\n Hashtbl.replace sig_d \"deps\" (List []);\n Dict sig_d);\n register \"apply\" (fun args ->\n let call f a =\n match f with\n | NativeFn (_, fn) -> fn a\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f a)\n in\n match args with\n | [f; (List a | ListRef { contents = a })] -> call f a\n | [f; Nil] -> call f []\n | _ -> raise (Eval_error \"apply: function and list\"));\n register \"identical?\" (fun args ->\n match args with [a; b] -> Bool (a == b) | _ -> raise (Eval_error \"identical?: 2 args\"));\n register \"make-spread\" (fun args ->\n match args with\n | [Dict d] ->\n let pairs = Hashtbl.fold (fun k v acc -> (k, v) :: acc) d [] in\n Spread pairs\n | _ -> raise (Eval_error \"make-spread: 1 dict\"));\n register \"spread?\" (fun args ->\n match args with [Spread _] -> Bool true | [_] -> Bool false\n | _ -> raise (Eval_error \"spread?: 1 arg\"));\n register \"spread-attrs\" (fun args ->\n match args with\n | [Spread pairs] ->\n let d = make_dict () in\n List.iter (fun (k, v) -> dict_set d k v) pairs;\n Dict d\n | _ -> raise (Eval_error \"spread-attrs: 1 spread\"));\n\n (* Higher-order forms as callable primitives — used by the VM.\n The CEK machine handles these as special forms with dedicated frames;\n the VM needs them as plain callable values. *)\n (* Call any SX callable — handles NativeFn, Lambda (via trampoline), VM closures *)\n let call_any f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f args)\n in\n register \"map\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.map (fun x -> call_any f [x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map: expected (fn list)\"));\n register \"map-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.mapi (fun i x -> call_any f [Number (float_of_int i); x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map-indexed: expected (fn list)\"));\n register \"filter\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.filter (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"filter: expected (fn list)\"));\n register \"for-each\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iter (fun x -> ignore (call_any f [x])) items; Nil\n | [_; Nil] -> Nil (* nil collection = no-op *)\n | _ ->\n let types = String.concat \", \" (List.map (fun v -> type_of v) args) in\n raise (Eval_error (Printf.sprintf \"for-each: expected (fn list), got (%s) %d args\" types (List.length args))));\n register \"reduce\" (fun args ->\n match args with\n | [f; init; (List items | ListRef { contents = items })] ->\n List.fold_left (fun acc x -> call_any f [acc; x]) init items\n | _ -> raise (Eval_error \"reduce: expected (fn init list)\"));\n register \"some\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n let rec find = function\n | [] -> Bool false\n | x :: rest ->\n let result = call_any f [x] in\n if sx_truthy result then result else find rest\n in find items\n | [_; Nil] -> Bool false\n | _ -> raise (Eval_error \"some: expected (fn list)\"));\n register \"every?\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n Bool (List.for_all (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> Bool true\n | _ -> raise (Eval_error \"every?: expected (fn list)\"));\n\n (* ---- VM stack primitives (vm.sx platform interface) ---- *)\n register \"make-vm-stack\" (fun args ->\n match args with\n | [Number n] -> ListRef (ref (List.init (int_of_float n) (fun _ -> Nil)))\n | _ -> raise (Eval_error \"make-vm-stack: expected (size)\"));\n register \"vm-stack-get\" (fun args ->\n match args with\n | [ListRef r; Number n] -> List.nth !r (int_of_float n)\n | _ -> raise (Eval_error \"vm-stack-get: expected (stack idx)\"));\n register \"vm-stack-set!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n r := List.mapi (fun j x -> if j = i then v else x) !r; Nil\n | _ -> raise (Eval_error \"vm-stack-set!: expected (stack idx val)\"));\n register \"vm-stack-length\" (fun args ->\n match args with\n | [ListRef r] -> Number (float_of_int (List.length !r))\n | _ -> raise (Eval_error \"vm-stack-length: expected (stack)\"));\n register \"vm-stack-copy!\" (fun args ->\n match args with\n | [ListRef src; ListRef dst; Number n] ->\n let count = int_of_float n in\n let src_items = !src in\n dst := List.mapi (fun i x -> if i < count then List.nth src_items i else x) !dst; Nil\n | _ -> raise (Eval_error \"vm-stack-copy!: expected (src dst count)\"));\n register \"primitive?\" (fun args ->\n match args with\n | [String name] -> Bool (Hashtbl.mem primitives name)\n | _ -> Bool false);\n\n (* Scope stack primitives are registered by sx_server.ml / run_tests.ml\n because they use a shared scope stacks table with collect!/collected. *)\n\n (* ---- Predicates needed by adapter-html.sx ---- *)\n register \"lambda?\" (fun args ->\n match args with [Lambda _] -> Bool true | _ -> Bool false);\n register \"island?\" (fun args ->\n match args with [Island _] -> Bool true | _ -> Bool false);\n register \"is-else-clause?\" (fun args ->\n match args with\n | [Keyword \"else\"] -> Bool true\n | [Bool true] -> Bool true\n | _ -> Bool false);\n register \"cond-scheme?\" (fun args ->\n match args with\n | [List clauses] ->\n Bool (List.for_all (fun c ->\n match c with\n | List l -> List.length l = 2\n | _ -> false) clauses)\n | _ -> Bool false);\n register \"component?\" (fun args ->\n match args with [Component _] -> Bool true | [Island _] -> Bool true | _ -> Bool false);\n register \"lambda-closure\" (fun args ->\n match args with [Lambda l] -> Env l.l_closure | _ -> Nil);\n register \"component-closure\" (fun args ->\n match args with\n | [Component c] -> Env c.c_closure\n | [Island i] -> Env i.i_closure\n | _ -> Nil);\n register \"component-has-children?\" (fun args ->\n match args with\n | [Component c] -> Bool c.c_has_children\n | [Island i] -> Bool i.i_has_children\n | _ -> Bool false);\n register \"component-name\" (fun args ->\n match args with\n | [Component c] -> String c.c_name\n | [Island i] -> String i.i_name\n | _ -> Nil);\n register \"component-params\" (fun args ->\n match args with\n | [Component c] -> List (List.map (fun s -> String s) c.c_params)\n | [Island i] -> List (List.map (fun s -> String s) i.i_params)\n | _ -> List []);\n register \"component-body\" (fun args ->\n match args with\n | [Component c] -> c.c_body\n | [Island i] -> i.i_body\n | _ -> Nil);\n register \"component-file\" (fun args ->\n match args with [v] -> component_file v | _ -> Nil);\n register \"component-set-file!\" (fun args ->\n match args with [v; f] -> component_set_file v f | _ -> Nil);\n register \"macro?\" (fun args ->\n match args with [Macro _] -> Bool true | _ -> Bool false);\n register \"for-each-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iteri (fun i x -> ignore (call_any f [Number (float_of_int i); x])) items; Nil\n | _ -> raise (Eval_error \"for-each-indexed: expected (fn list)\"));\n register \"lambda-params\" (fun args ->\n match args with\n | [Lambda l] -> List (List.map (fun s -> String s) l.l_params)\n | _ -> List []);\n register \"lambda-body\" (fun args ->\n match args with [Lambda l] -> l.l_body | _ -> Nil);\n (* expand-macro is registered later by run_tests.ml / sx_server.ml\n because it needs eval_expr which creates a dependency cycle *);\n register \"empty-dict?\" (fun args ->\n match args with\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | _ -> Bool true);\n register \"make-raw-html\" (fun args ->\n match args with [String s] -> RawHTML s | _ -> Nil);\n register \"raw-html-content\" (fun args ->\n match args with [RawHTML s] -> String s | _ -> String \"\");\n register \"get-primitive\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"get-primitive: expected (name)\"));\n register \"call-primitive\" (fun args ->\n match args with\n | [String name; (List a | ListRef { contents = a })] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn a\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | [String name; Nil] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn []\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"call-primitive: expected (name args-list)\"));\n ()\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":144640},"map":{"version":3,"sources":["/workspace_root/lib/sx_runtime.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Runtime helpers for transpiled code.\n\n These bridge the gap between the transpiler's output and the\n foundation types/primitives. The transpiled evaluator calls these\n functions directly. *)\n\nopen Sx_types\n\n(** Call a registered primitive by name. *)\nlet prim_call name args =\n match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f args\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(** Convert any SX value to an OCaml string (internal). *)\nlet value_to_str = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | v -> inspect v\n\n(** sx_to_string returns a value (String) for transpiled code. *)\nlet sx_to_string v = String (value_to_str v)\n\n(** String concatenation helper — [sx_str] takes a list of values. *)\nlet sx_str args =\n String.concat \"\" (List.map value_to_str args)\n\n(** Convert a value to a list. *)\nlet sx_to_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\n(** Call an SX callable (lambda, native fn, continuation). *)\nlet sx_call f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | VmClosure cl -> !Sx_types._vm_call_closure_ref cl args\n | Lambda l ->\n let local = Sx_types.env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (Sx_types.env_bind local p a)) l.l_params args;\n Thunk (l.l_body, local)\n | Continuation (k, _) ->\n k (match args with x :: _ -> x | [] -> Nil)\n | _ ->\n let nargs = List.length args in\n let args_preview = if nargs = 0 then \"\" else\n let s = String.concat \", \" (List.map (fun a -> let s = inspect a in if String.length s > 40 then String.sub s 0 40 ^ \"..\" else s) args) in\n \" with args=[\" ^ s ^ \"]\" in\n raise (Eval_error (\"Not callable: \" ^ inspect f ^ args_preview))\n\n(* Initialize forward ref so primitives can call SX functions *)\nlet () = Sx_primitives._sx_call_fn := sx_call\n(* Trampoline ref is set by sx_ref.ml after it's loaded *)\n\n(** Apply a function to a list of args. *)\nlet sx_apply f args_list =\n sx_call f (sx_to_list args_list)\n\n(** Mutable append — add item to a list ref or accumulator.\n In transpiled code, lists that get appended to are mutable refs. *)\nlet sx_append_b lst item =\n match lst with\n | List items -> List (items @ [item])\n | ListRef r -> r := !r @ [item]; lst (* mutate in place, return same ref *)\n | _ -> raise (Eval_error (\"append!: expected list, got \" ^ type_of lst))\n\n(** Mutable dict-set — set key in dict, return value. *)\nlet sx_dict_set_b d k v =\n match d, k with\n | Dict tbl, String key -> Hashtbl.replace tbl key v; v\n | Dict tbl, Keyword key -> Hashtbl.replace tbl key v; v\n | _ -> raise (Eval_error \"dict-set!: expected dict and string key\")\n\n(** Get from dict or list. *)\nlet get_val container key =\n match container, key with\n | CekState s, String k ->\n (match k with\n | \"control\" -> s.cs_control | \"env\" -> s.cs_env\n | \"kont\" -> s.cs_kont | \"phase\" -> String s.cs_phase\n | \"value\" -> s.cs_value | _ -> Nil)\n | CekFrame f, String k ->\n (match k with\n | \"type\" -> String f.cf_type | \"env\" -> f.cf_env\n | \"name\" -> f.cf_name | \"body\" -> f.cf_body\n | \"remaining\" -> f.cf_remaining | \"f\" -> f.cf_f\n | \"args\" -> f.cf_args | \"evaled\" -> f.cf_args\n | \"results\" -> f.cf_results | \"raw-args\" -> f.cf_results\n | \"then\" -> f.cf_body | \"else\" -> f.cf_name\n | \"ho-type\" -> f.cf_extra | \"scheme\" -> f.cf_extra\n | \"indexed\" -> f.cf_extra | \"value\" -> f.cf_extra\n | \"phase\" -> f.cf_extra | \"has-effects\" -> f.cf_extra\n | \"match-val\" -> f.cf_extra | \"current-item\" -> f.cf_extra\n | \"update-fn\" -> f.cf_extra | \"head-name\" -> f.cf_extra\n | \"emitted\" -> f.cf_extra2 | \"effect-list\" -> f.cf_extra2\n | \"first-render\" -> f.cf_extra2 | \"file\" -> f.cf_env\n | _ -> Nil)\n | Dict d, String k -> dict_get d k\n | Dict d, Keyword k -> dict_get d k\n | (List l | ListRef { contents = l }), Number n ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | Nil, _ -> Nil (* nil.anything → nil *)\n | _, _ -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n\n(** Register get as a primitive override — transpiled code calls (get d k). *)\nlet () =\n Sx_primitives.register \"get\" (fun args ->\n match args with\n | [c; k] -> get_val c k\n | [c; k; default] ->\n (try\n let v = get_val c k in\n if v = Nil then default else v\n with _ -> default)\n | _ -> raise (Eval_error \"get: 2-3 args\"))\n\n\n(* ====================================================================== *)\n(* Primitive aliases — top-level functions called by transpiled code *)\n(* ====================================================================== *)\n\n(** The transpiled evaluator calls primitives directly by their mangled\n OCaml name. These aliases delegate to the primitives table so the\n transpiled code compiles without needing [prim_call] everywhere. *)\n\nlet _prim name = match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f | None -> (fun _ -> raise (Eval_error (\"Missing prim: \" ^ name)))\n\n(* Collection ops *)\nlet first args = _prim \"first\" [args]\nlet rest args = _prim \"rest\" [args]\nlet last args = _prim \"last\" [args]\nlet nth coll i = _prim \"nth\" [coll; i]\nlet cons x l = _prim \"cons\" [x; l]\nlet append a b = _prim \"append\" [a; b]\nlet reverse l = _prim \"reverse\" [l]\nlet flatten l = _prim \"flatten\" [l]\nlet concat a b = _prim \"concat\" [a; b]\nlet slice a b = _prim \"slice\" [a; b]\nlet len a = _prim \"len\" [a]\nlet get a b = get_val a b\nlet sort' a = _prim \"sort\" [a]\nlet range' a = _prim \"range\" [a]\nlet unique a = _prim \"unique\" [a]\nlet zip a b = _prim \"zip\" [a; b]\nlet zip_pairs a = _prim \"zip-pairs\" [a]\nlet take a b = _prim \"take\" [a; b]\nlet drop a b = _prim \"drop\" [a; b]\nlet chunk_every a b = _prim \"chunk-every\" [a; b]\n\n(* Predicates *)\nlet empty_p a = _prim \"empty?\" [a]\nlet nil_p a = _prim \"nil?\" [a]\nlet number_p a = _prim \"number?\" [a]\nlet string_p a = _prim \"string?\" [a]\nlet boolean_p a = _prim \"boolean?\" [a]\nlet list_p a = _prim \"list?\" [a]\nlet dict_p a = _prim \"dict?\" [a]\nlet symbol_p a = _prim \"symbol?\" [a]\nlet keyword_p a = _prim \"keyword?\" [a]\nlet contains_p a b = _prim \"contains?\" [a; b]\nlet has_key_p a b = _prim \"has-key?\" [a; b]\nlet starts_with_p a b = _prim \"starts-with?\" [a; b]\nlet ends_with_p a b = _prim \"ends-with?\" [a; b]\nlet string_contains_p a b = _prim \"string-contains?\" [a; b]\nlet odd_p a = _prim \"odd?\" [a]\nlet even_p a = _prim \"even?\" [a]\nlet zero_p a = _prim \"zero?\" [a]\n\n(* String ops *)\nlet str' args = String (sx_str args)\nlet upper a = _prim \"upper\" [a]\nlet upcase a = _prim \"upcase\" [a]\nlet lower a = _prim \"lower\" [a]\nlet downcase a = _prim \"downcase\" [a]\nlet trim a = _prim \"trim\" [a]\nlet split a b = _prim \"split\" [a; b]\nlet join a b = _prim \"join\" [a; b]\nlet replace a b c = _prim \"replace\" [a; b; c]\nlet index_of a b = _prim \"index-of\" [a; b]\nlet substring a b c = _prim \"substring\" [a; b; c]\nlet string_length a = _prim \"string-length\" [a]\nlet char_from_code a = _prim \"char-from-code\" [a]\n\n(* Dict ops *)\nlet assoc d k v = _prim \"assoc\" [d; k; v]\nlet dissoc d k = _prim \"dissoc\" [d; k]\nlet merge' a b = _prim \"merge\" [a; b]\nlet keys a = _prim \"keys\" [a]\nlet vals a = _prim \"vals\" [a]\nlet dict_set a b c = _prim \"dict-set!\" [a; b; c]\nlet dict_get a b = _prim \"dict-get\" [a; b]\nlet dict_has_p a b = _prim \"dict-has?\" [a; b]\nlet dict_delete a b = _prim \"dict-delete!\" [a; b]\n\n(* Math *)\nlet abs' a = _prim \"abs\" [a]\nlet sqrt' a = _prim \"sqrt\" [a]\nlet pow' a b = _prim \"pow\" [a; b]\nlet floor' a = _prim \"floor\" [a]\nlet ceil' a = _prim \"ceil\" [a]\nlet round' a = _prim \"round\" [a]\nlet min' a b = _prim \"min\" [a; b]\nlet max' a b = _prim \"max\" [a; b]\nlet clamp a b c = _prim \"clamp\" [a; b; c]\nlet parse_int a = _prim \"parse-int\" [a]\nlet parse_float a = _prim \"parse-float\" [a]\n\n(* Misc *)\nlet error msg = raise (Eval_error (value_to_str msg))\n\n(* inspect wrapper — returns String value instead of OCaml string *)\nlet inspect v = String (Sx_types.inspect v)\nlet apply' f args = sx_apply f args\nlet identical_p a b = _prim \"identical?\" [a; b]\nlet _is_spread_prim a = _prim \"spread?\" [a]\nlet spread_attrs a = _prim \"spread-attrs\" [a]\nlet make_spread a = _prim \"make-spread\" [a]\n\n(* Scope primitives — delegate to sx_ref.py's shared scope stacks *)\nlet sx_collect a b = prim_call \"collect!\" [a; b]\nlet sx_collected a = prim_call \"collected\" [a]\nlet sx_clear_collected a = prim_call \"clear-collected!\" [a]\nlet sx_emit a b = prim_call \"emit!\" [a; b]\nlet sx_emitted a = prim_call \"emitted\" [a]\nlet sx_context a b = prim_call \"context\" [a; b]\n\n(* Trampoline — forward-declared in sx_ref.ml, delegates to CEK eval_expr *)\n(* This is a stub; the real trampoline is wired up in sx_ref.ml after eval_expr is defined *)\nlet trampoline v = v\n\n(* Value-returning type predicates — the transpiled code passes these through\n sx_truthy, so they need to return Bool, not OCaml bool. *)\n(* type_of returns value, not string *)\nlet type_of v = String (Sx_types.type_of v)\n\n(* Env operations — accept Env-wrapped values and value keys.\n The transpiled CEK machine stores envs in dicts as Env values. *)\nlet unwrap_env = function\n | Env e -> e\n | Dict d ->\n (* Dict used as env — wrap it. Needed by adapter-html.sx which\n passes dicts as env args (e.g. empty {} as caller env). *)\n let e = Sx_types.make_env () in\n Hashtbl.iter (fun k v -> ignore (Sx_types.env_bind e k v)) d;\n e\n | Nil ->\n Sx_types.make_env ()\n | v -> raise (Eval_error (\"Expected env, got \" ^ Sx_types.type_of v))\n\nlet env_has e name = Bool (Sx_types.env_has (unwrap_env e) (value_to_str name))\nlet env_get e name = Sx_types.env_get (unwrap_env e) (value_to_str name)\nlet env_bind e name v = Sx_types.env_bind (unwrap_env e) (value_to_str name) v\nlet env_set e name v = Sx_types.env_set (unwrap_env e) (value_to_str name) v\n\nlet make_env () = Env (Sx_types.make_env ())\nlet env_extend e = Env (Sx_types.env_extend (unwrap_env e))\nlet env_merge a b = Env (Sx_types.env_merge (unwrap_env a) (unwrap_env b))\n\n(* set_lambda_name wrapper — accepts value, extracts string *)\nlet set_lambda_name l n = Sx_types.set_lambda_name l (value_to_str n)\n\nlet is_nil v = Bool (Sx_types.is_nil v)\nlet is_thunk v = Bool (Sx_types.is_thunk v)\nlet is_lambda v = Bool (Sx_types.is_lambda v)\nlet is_component v = Bool (Sx_types.is_component v)\nlet is_island v = Bool (Sx_types.is_island v)\nlet is_macro v = Bool (Sx_types.is_macro v)\nlet is_signal v = Bool (Sx_types.is_signal v)\nlet is_callable v = Bool (Sx_types.is_callable v)\nlet is_identical a b = Bool (a == b)\nlet is_primitive name = Bool (Sx_primitives.is_primitive (value_to_str name))\nlet get_primitive name = Sx_primitives.get_primitive (value_to_str name)\nlet is_spread v = match v with Spread _ -> Bool true | _ -> Bool false\n\n(* Stubs for functions defined in sx_ref.ml — resolved at link time *)\n(* These are forward-declared here; sx_ref.ml defines the actual implementations *)\n\n(* strip-prefix *)\n(* Stubs for evaluator functions — defined in sx_ref.ml but\n sometimes referenced before their definition via forward calls.\n These get overridden by the actual transpiled definitions. *)\n\nlet map_indexed fn coll =\n List (List.mapi (fun i x -> sx_call fn [Number (float_of_int i); x]) (sx_to_list coll))\n\nlet map_dict fn d =\n match d with\n | Dict tbl ->\n let result = Hashtbl.create (Hashtbl.length tbl) in\n Hashtbl.iter (fun k v -> Hashtbl.replace result k (sx_call fn [String k; v])) tbl;\n Dict result\n | _ -> raise (Eval_error \"map-dict: expected dict\")\n\nlet for_each fn coll =\n List.iter (fun x -> ignore (sx_call fn [x])) (sx_to_list coll);\n Nil\n\nlet for_each_indexed fn coll =\n List.iteri (fun i x -> ignore (sx_call fn [Number (float_of_int i); x])) (sx_to_list coll);\n Nil\n\n(* Continuation support *)\nlet continuation_p v = match v with Continuation (_, _) -> Bool true | _ -> Bool false\n\nlet make_cek_continuation captured rest_kont =\n let data = Hashtbl.create 2 in\n Hashtbl.replace data \"captured\" captured;\n Hashtbl.replace data \"rest-kont\" rest_kont;\n Continuation ((fun v -> v), Some data)\n\nlet continuation_data v = match v with\n | Continuation (_, Some d) -> Dict d\n | Continuation (_, None) -> Dict (Hashtbl.create 0)\n | _ -> raise (Eval_error \"not a continuation\")\n\n(* Dynamic wind — simplified for OCaml (no async) *)\nlet dynamic_wind_call before body after _env =\n ignore (sx_call before []);\n let result = sx_call body [] in\n ignore (sx_call after []);\n result\n\n(* Scope stack — all delegated to primitives registered in sx_server.ml *)\nlet scope_push name value = prim_call \"scope-push!\" [name; value]\nlet scope_pop name = prim_call \"scope-pop!\" [name]\nlet scope_peek name = prim_call \"scope-peek\" [name]\nlet scope_emit name value = prim_call \"scope-emit!\" [name; value]\nlet provide_push name value = prim_call \"scope-push!\" [name; value]\nlet provide_pop name = prim_call \"scope-pop!\" [name]\n\n(* Custom special forms registry — mutable dict *)\nlet custom_special_forms = Dict (Hashtbl.create 4)\n\n(* register-special-form! — add a handler to the custom registry *)\nlet register_special_form name handler =\n (match custom_special_forms with\n | Dict tbl -> Hashtbl.replace tbl (value_to_str name) handler; handler\n | _ -> raise (Eval_error \"custom_special_forms not a dict\"))\n\n(* Render check/fn hooks — nil by default, set by platform if needed *)\nlet render_check = Nil\nlet render_fn = Nil\n\n(* is-else-clause? — check if a cond/case test is an else marker *)\nlet is_else_clause v =\n match v with\n | Keyword k -> Bool (k = \"else\" || k = \"default\")\n | Symbol s -> Bool (s = \"else\" || s = \"default\")\n | Bool true -> Bool true\n | _ -> Bool false\n\n(* Signal accessors *)\nlet signal_value s = match s with\n | Signal sig' -> sig'.s_value\n | Dict d -> (match Hashtbl.find_opt d \"value\" with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"not a signal\")\nlet signal_set_value s v = match s with Signal sig' -> sig'.s_value <- v; v | _ -> raise (Eval_error \"not a signal\")\nlet signal_subscribers s = match s with Signal sig' -> List (List.map (fun _ -> Nil) sig'.s_subscribers) | _ -> List []\nlet signal_add_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := !r @ [f]; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (ListRef (ref (items @ [f]))); Nil\n | _ -> Hashtbl.replace d \"subscribers\" (ListRef (ref [f])); Nil)\n | _ -> Nil\n\nlet signal_remove_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := List.filter (fun x -> x != f) !r; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (List (List.filter (fun x -> x != f) items)); Nil\n | _ -> Nil)\n | _ -> Nil\n\nlet signal_deps s =\n match s with\n | Dict d -> (match Hashtbl.find_opt d \"deps\" with Some v -> v | None -> List [])\n | _ -> List []\n\nlet signal_set_deps s d =\n match s with\n | Dict tbl -> Hashtbl.replace tbl \"deps\" d; Nil\n | _ -> Nil\n\nlet notify_subscribers s =\n let subs = match s with\n | Dict d -> (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef { contents = items }) | Some (List items) -> items\n | _ -> [])\n | _ -> []\n in\n List.iter (fun f -> ignore (sx_call f [])) subs;\n Nil\n\nlet flush_subscribers _s = Nil\nlet dispose_computed _s = Nil\n\n(* Island scope stubs — accept both bare OCaml fns and NativeFn values\n from transpiled code (NativeFn wrapping for value-storable lambdas). *)\nlet with_island_scope _register_fn body_fn =\n match body_fn with\n | NativeFn (_, f) -> f []\n | _ -> Nil\nlet register_in_scope _dispose_fn = Nil\n\n(* Component type annotation stub *)\nlet component_set_param_types_b _comp _types = Nil\n\n(* Parse keyword args from a call — this is defined in evaluator.sx,\n the transpiled version will override this stub. *)\n(* Forward-reference stubs for evaluator functions used before definition *)\nlet parse_comp_params _params = List [List []; Nil; Bool false]\nlet parse_macro_params _params = List [List []; Nil]\n\nlet parse_keyword_args _raw_args _env =\n (* Stub — the real implementation is transpiled from evaluator.sx *)\n List [Dict (Hashtbl.create 0); List []]\n\n(* Make handler/query/action/page def stubs *)\nlet make_handler_def name params body _env = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"handler\"); Hashtbl.replace d \"name\" name; Hashtbl.replace d \"params\" params; Hashtbl.replace d \"body\" body; d)\nlet make_query_def name params body _env = make_handler_def name params body _env\nlet make_action_def name params body _env = make_handler_def name params body _env\nlet make_page_def name _opts = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"page\"); Hashtbl.replace d \"name\" name; d)\n\n(* sf-def* stubs — platform-specific def-forms, not in the SX spec *)\nlet sf_defhandler args env =\n let name = first args in let rest_args = rest args in\n make_handler_def name (first rest_args) (nth rest_args (Number 1.0)) env\nlet sf_defquery args env = sf_defhandler args env\nlet sf_defaction args env = sf_defhandler args env\nlet sf_defpage args _env =\n let name = first args in make_page_def name (rest args)\n\nlet strip_prefix s prefix =\n match s, prefix with\n | String s, String p ->\n let pl = String.length p in\n if String.length s >= pl && String.sub s 0 pl = p\n then String (String.sub s pl (String.length s - pl))\n else String s\n | _ -> s\n\n(* debug_log — no-op in production, used by CEK evaluator for component warnings *)\nlet debug_log _ _ = Nil\n\n(* mutable_list — mutable list for bytecode compiler pool entries *)\nlet mutable_list () = ListRef (ref [])\n\n","(* generated code *)"],"names":[],"mappings":"EA0csB,Q,EAAA,OAAgB,C,EAHlB,IAAG,C,WATrB,K,CAAA,0B,CAAA,4BAEE,SAFF,SAGE,UAA4B,UAA5B,OAA4B,iBAAqB,K,CAAA,EACG,IAAxC,MAAP,OAAO,EAAP,OAAO,aAAwC,OAC/C,eACA,EAAC,C,EATG,SAAiC,SAAW,Q,EAF7B,WAAsB,C,KAHrC,WAA8B,WACD,YAAD,EAAjB,SAAiB,WAAiC,C,EAL7B,QAAd,OAAc,eAAoB,2BAA0C,OAAF,OAAE,cAA6B,UAAI,C,EADhG,eAAsC,C,GAFvB,QAAd,OAAc,eAAoB,2BAA6C,OAAF,OAAE,cAA+B,OAAF,OAAE,cAAmC,OAAF,OAAE,cAA6B,UAAI,C,EAHhM,YAAlB,QAAX,OAAW,aAAkB,eAAU,C,EAJR,GAAmB,C,EADpB,GAA+B,C,EAR3B,IAAG,C,KAHrC,K,CAAA,qBACqB,IADrB,OACqB,eACd,IAAG,C,EAXiB,cAAc,K,MAAzC,GANA,Q,CAAA,4BACqB,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,uDAEzC,QACH,KAET,qBAA+C,IAC5C,C,KAZH,K,CAAA,4BACc,0BAA4B,OACnC,IAAG,C,KAPV,K,CAAA,4BACmB,GAAP,OAAO,eAAyB,OAA4B,eAAZ,E,GACrD,GAAO,C,EAPyE,kDAAM,C,MAJ7F,K,CAAA,8BAES,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,mBAChB,QADgB,UAChB,iBAAK,eAAgC,SAAE,MACtC,KAA2E,IAA3E,QADsC,UACtC,OAAsC,aAAqC,WAA3E,cAA4E,QAC5F,OACH,IAAG,C,MAfV,K,CAAA,8BAES,GAAP,OAAO,eAAgC,K,CAAA,iB,CAAA,E,EAAA,mB,GAAA,6BAChB,+BAAK,eAAQ,SAAE,MACd,KAA2D,QAD7C,UACd,qBAA8C,aAAa,eAA3D,cAA6D,QAC7E,wDAAmD,OACtD,IAAG,C,KARe,K,CAAA,qBAA6E,IAA5C,GAAjC,OAA4B,eAAK,aAA4C,OAAQ,GAAO,C,KAD5F,K,CAAA,4BAA4B,UAAmB,KAAS,qBAAiC,C,GAJ/F,K,CAAA,E,EAAA,mB,GAAA,uBACF,oBACE,GAAP,OAAO,eAA0B,OAA4B,gBAAZ,E,GACtD,qBAAiC,C,GAVxC,K,CAAA,E,EAAA,0CACqB,OAAU,OAAI,OAAa,2BAC5B,OAAU,OAAI,OAAa,8B,CAAA,EAChC,OACR,GAAU,C,KAdjB,mCACmC,SAApB,EAAuC,OAAvC,cAA+C,GACtD,sBAAqD,C,EATxC,wBAA6B,C,EADtB,kCAAqC,C,EADvC,kCAAqC,C,EAD3C,wBAA6B,C,EAD9B,wBAA6B,C,EADtB,kCAAqC,C,EANxD,cACM,eACN,cACP,EAAM,C,MAVkB,K,CAAA,sCAE2B,IAAlB,QAAL,OAAK,aAAkB,KADrB,IACqB,UADrB,QAEvB,qBAAuC,C,EALtB,EAAC,C,EAHd,QAAX,OAAW,eACX,0BACA,OADwC,OACxC,cAA0C,qBACJ,C,EANjB,K,CAAA,mBAAoC,MAAiB,GAAU,C,EAJ7D,KAAO,IAAoC,QAAhB,WAAgB,IAA3C,cAA2C,IAApC,QAAyC,K,EAAmB,WAAjB,SAAiB,OAA1F,cAA0F,IACvF,C,EALiB,KAAO,IAAP,cAAO,QAAgB,K,EAAmB,QAAjB,SAAiB,OAA9D,cAA8D,IAC3D,C,MANwB,QAAyB,IAAzB,gCAAyB,SAA0B,+B,MAH9E,K,CAAA,qBAGE,QADa,IAFf,SAEE,OAA4B,aAAoB,OAAnC,eACb,0BAAiF,aAE5E,qBAA4C,C,EARvB,KAAmC,YAAhB,WAAgB,IAAnC,cAAmC,WAAI,C,EAAoB,IAAD,WAAjB,SAAiB,OAAjF,aAAkF,K,EAXvE,K,CAAA,mBAAyB,MAAiB,GAAU,C,EADjB,SAAmB,sB,EADK,IAApB,SAAmB,QAA/C,aAAgD,K,EADtD,8CAAa,C,EADa,IAAxB,EAAL,QAAK,aAAwB,K,EADJ,IAAtB,EAAL,QAAK,aAAsB,K,EADF,IAArB,EAAL,QAAK,aAAqB,K,EADE,IAAtB,EAAL,QAAK,aAAsB,K,EADM,IAAzB,EAAL,QAAK,aAAyB,K,EADN,IAAtB,EAAL,QAAK,aAAsB,K,EADF,IAArB,EAAL,QAAK,aAAqB,K,EADJ,IAAnB,EAAL,QAAK,aAAmB,K,EAF8B,EAAhB,SAAgB,sB,EAHV,WAAe,IAA9B,SAApB,EAAkC,QAAlC,aAAkD,K,EADf,IAAf,SAAc,QAAnC,aAAoC,K,EADf,IAAtB,IAAJ,QAAI,aAAsB,K,EAFW,WAAf,SAAc,yBAAsB,C,EADnB,WAAf,SAAc,yBAAsB,C,EADzB,WAAf,SAAc,uBAAoB,C,EADb,WAAoB,IAAnC,SAAlB,EAAgC,QAAhC,aAAqD,K,EANlD,KAAO,QAAP,QAAO,cAAyB,K,GAN5C,OASb,+C,GAAA,2BARS,cAKT,MADQ,IAAR,QAAQ,eACR,0BAA4D,IAIrC,GAAwB,EAA1C,QAA0C,aAAkB,OAA1C,eAA2C,qB,CAAC,C,EAd5B,IAApB,EAAP,QAAO,aAAoB,K,EATtB,kCAA0B,C,EAD5B,wBAAuB,C,EADxB,kCAAwB,C,EADf,wBAAgC,C,EADtC,wBAAyB,C,EADzB,kCAA2B,C,EAH5B,qCAAuB,C,EADtB,qCAAwB,C,EADrB,qCAAmB,C,EADrB,+CAAyB,C,EAD3B,WAAe,C,EADQ,IAApB,EAAP,SAAO,aAAoB,K,EAHT,WAAkB,oBAAC,C,EAHjC,qCAAuB,C,EADzB,qCAAqB,C,EADrB,yDAAuB,C,EAD1B,+CAAkB,C,EADlB,+CAAkB,C,EADlB,qCAAiB,C,EADlB,qCAAgB,C,EADf,qCAAiB,C,EADjB,+CAAkB,C,EADnB,qCAAgB,C,EADjB,qCAAe,C,EAHN,+CAA2B,C,EAD5B,+CAAwB,C,EAD1B,+CAAuB,C,EADrB,yDAA2B,C,EADnC,qCAAgB,C,EADhB,qCAAgB,C,EADZ,+CAAoB,C,EADpB,+CAAqB,C,EADpB,yDAAuB,C,EAHlB,qCAA0B,C,EAD3B,qCAAyB,C,EADzB,yDAA2B,C,EAD9B,+CAAuB,C,EADtB,yDAAyB,C,EAD9B,+CAAmB,C,EADlB,+CAAoB,C,EADvB,qCAAgB,C,EADZ,qCAAoB,C,EADvB,qCAAiB,C,EADhB,qCAAkB,C,EADnB,qCAAiB,C,EADK,IAAb,SAAa,K,EAHrB,qCAAiB,C,EADjB,qCAAiB,C,EADlB,qCAAgB,C,EADF,+CAA+B,C,EADrC,+CAAyB,C,EADvB,+CAA2B,C,EAD/B,+CAAuB,C,EADtB,+CAAwB,C,EAD3B,qCAAoB,C,EADrB,qCAAmB,C,EADrB,qCAAiB,C,EADjB,qCAAiB,C,EADd,qCAAoB,C,EADrB,qCAAmB,C,EADnB,qCAAmB,C,EADtB,qCAAgB,C,EADd,qCAAkB,C,EAHZ,+CAA0B,C,EADjC,+CAAmB,C,EADnB,+CAAmB,C,EADhB,qCAAqB,C,EADzB,+CAAkB,C,EADjB,qCAAkB,C,EADlB,qCAAiB,C,EADlB,qCAAgB,C,EADhB,WAAW,C,EADb,qCAAe,C,EADX,+CAAoB,C,EADnB,+CAAqB,C,EADtB,qCAAmB,C,EADnB,qCAAmB,C,EADlB,+CAAqB,C,EADvB,+CAAmB,C,EADjB,+CAAqB,C,EADtB,qCAAmB,C,EADnB,qCAAmB,C,EADlB,qCAAoB,C,EAHiB,GAAlB,KAAkB,IAAlB,OAAkB,eAAyB,oBAAC,C,EAD/D,QAAM,EAAN,OAAM,eAA8C,QAC3C,oBAAuD,C,SAnB7E,O,CAAA,qB,CAAA,yCACY,wCAEV,OAEE,IADQ,aACR,a,AAAA,I,AAAA,G,EAAA,IACQ,OACL,qBAAkC,C,SAvC3C,QA0BY,mC,GAAA,6C,CALF,EAKE,qBAnBV,oEAOyC,0BAD5B,0BALA,kCAUK,0BAHsB,iBAHxB,2BAGA,0BAEE,0BARL,0BAOC,0BAJ+B,0BAF3B,mBAIF,uDAHqB,0BADK,0BAUG,0BAAxB,0BAJuB,0BAEE,kBAVL,2BAG5B,0BAFsB,0BAQc,0BAEF,0BANZ,0BAMnB,mBAER,8B,CAhBwB,EAgBxB,qBAnBR,YACgB,0BAAwB,0BAC3B,0BAAuB,kCACtB,YAAkB,M,UAAA,yD,GAAA,qDAqBtB,EArBsB,K,CAAA,qBAoBhC,OAAK,EApB2B,OAoBhC,SAAK,EAAL,OAAK,aAA2B,G,AAAA,I,AAAA,G,EAAA,IAAW,QAEnC,KAAG,C,MAlCb,K,CAAA,0B,CAAA,E,EAAA,0B,GAAA,iDAGO,qBAA4D,C,MAVnE,K,CAAA,E,EAAA,mB,GAAA,+BAEe,+BAAK,eAAW,SAAE,IADI,IACJ,UADjB,qBAAK,aAAgB,OAEZ,GAAkC,EAApD,QAAoD,aAAW,OAA7C,eAA8C,oBAAC,C,EARxC,EAAtB,SAAsB,Q,KAV2B,EAAR,SAAQ,eAAa,aAA6B,8BAAiB,wBAAa,GAAC,C,MAZpI,K,CAAA,E,EAAA,2DAEkB,sBADI,EACJ,UADI,cAOpB,UAAuC,gBAPnB,UAOS,cAH7B,MAG6B,UAJ7B,kBAAY,eACZ,iCAA4E,oBAM5E,IADY,EAAZ,OAAY,aACZ,QAEE,GADQ,GAAmB,KAA3B,OAA2B,aAA4G,OAA/H,aACS,GAAjB,OAAiB,aAAO,OAAxB,c,EACgB,GAAoB,EAAtC,SAAsC,eAAS,OAAT,aAAwB,OAA5C,eAA6C,oBAAC,C,GAtBnD,QAGN,0B,GAAA,6BADM,oBADH,EAGa,GAAyB,EAA3C,QAA2C,aAAS,OAAlC,eAAmC,qBAAC,C,EAPhB,GAA5B,KAAjB,OAAiB,aAA4B,qB,EAJH,IAAhB,SAAgB,K,GAbzB,QAOR,4DAJP,OAAG,aAAkB,OAChB,uCADsB,kC,EAGb,GADD,GAFc,mBAEd,EAKR,yBAAS,C,EAfhB,QAAM,EAAN,OAAM,eAA8C,OAExB,KAAlB,OAAkB,eAA8B,qBAD9C,EAC8C,UAD9C,c,CAC+C,C,SCZ7D,mBDmHE,MCnHF,QDmHE,cAkOgD,iZAAlB,QA1Nc,OA0Nd,aAAkB,0H,QCrVlD,4D,EAAA,c,QAAA,8B,EAAA,c,EAAA,c,WAAA,0C,EAAA,c,EAAA,e,EAAA,e,iBAAA","ignoreList":[1]}},{"offset":{"line":0,"column":156967},"map":{"version":3,"sources":["/workspace_root/lib/sx_ref.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_ref.ml — Auto-generated from SX spec by hosts/ocaml/bootstrap.py *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* Trampoline — forward ref, resolved after eval_expr is defined. *)\nlet trampoline_fn : (value -> value) ref = ref (fun v -> v)\nlet trampoline v = !trampoline_fn v\n\n\n\n(* === Mutable state for strict mode === *)\n(* These are defined as top-level refs because the transpiler cannot handle\n global set! mutation (it creates local refs that shadow the global). *)\nlet _strict_ref = ref (Bool false)\nlet _prim_param_types_ref = ref Nil\n\n(* JIT call hook — cek_call checks this before CEK dispatch for named\n lambdas. Registered by sx_server.ml after compiler loads. Tests\n run with hook = None (pure CEK, no compilation dependency). *)\nlet jit_call_hook : (value -> value list -> value option) option ref = ref None\n\n(* Component trace — captures kont from last CEK error for diagnostics *)\nlet _last_error_kont : value ref = ref Nil\n\n\n\n(* === Transpiled from evaluator (frames + eval + CEK) === *)\n\n(* make-cek-state *)\nlet rec make_cek_state control env kont =\n (CekState { cs_control = control; cs_env = env; cs_kont = kont; cs_phase = \"eval\"; cs_value = Nil })\n\n(* make-cek-value *)\nand make_cek_value value env kont =\n (CekState { cs_control = Nil; cs_env = env; cs_kont = kont; cs_phase = \"continue\"; cs_value = value })\n\n(* cek-terminal? *)\nand cek_terminal_p state =\n (let _and = (prim_call \"=\" [(get (state) ((String \"phase\"))); (String \"continue\")]) in if not (sx_truthy _and) then _and else (empty_p ((get (state) ((String \"kont\"))))))\n\n(* cek-control *)\nand cek_control s =\n (get (s) ((String \"control\")))\n\n(* cek-env *)\nand cek_env s =\n (get (s) ((String \"env\")))\n\n(* cek-kont *)\nand cek_kont s =\n (get (s) ((String \"kont\")))\n\n(* cek-phase *)\nand cek_phase s =\n (get (s) ((String \"phase\")))\n\n(* cek-value *)\nand cek_value s =\n (get (s) ((String \"value\")))\n\n(* make-if-frame *)\nand make_if_frame then_expr else_expr env =\n (CekFrame { cf_type = \"if\"; cf_env = env; cf_name = else_expr; cf_body = then_expr; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-when-frame *)\nand make_when_frame body_exprs env =\n (CekFrame { cf_type = \"when\"; cf_env = env; cf_name = Nil; cf_body = body_exprs; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-begin-frame *)\nand make_begin_frame remaining env =\n (CekFrame { cf_type = \"begin\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-let-frame *)\nand make_let_frame name remaining body local =\n (CekFrame { cf_type = \"let\"; cf_env = local; cf_name = name; cf_body = body; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-define-frame *)\nand make_define_frame name env has_effects effect_list =\n (CekFrame { cf_type = \"define\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = has_effects; cf_extra2 = effect_list })\n\n(* make-set-frame *)\nand make_set_frame name env =\n (CekFrame { cf_type = \"set\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-arg-frame *)\nand make_arg_frame f evaled remaining env raw_args head_name =\n (CekFrame { cf_type = \"arg\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = evaled; cf_results = raw_args; cf_extra = (let _or = head_name in if sx_truthy _or then _or else Nil); cf_extra2 = Nil })\n\n(* make-call-frame *)\nand make_call_frame f args env =\n (CekFrame { cf_type = \"call\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = f; cf_args = args; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-cond-frame *)\nand make_cond_frame remaining env scheme_p =\n (CekFrame { cf_type = \"cond\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = scheme_p; cf_extra2 = Nil })\n\n(* make-case-frame *)\nand make_case_frame match_val remaining env =\n (CekFrame { cf_type = \"case\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = match_val; cf_extra2 = Nil })\n\n(* make-thread-frame *)\nand make_thread_frame remaining env =\n (CekFrame { cf_type = \"thread\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-map-frame *)\nand make_map_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool false); cf_extra2 = Nil })\n\n(* make-map-indexed-frame *)\nand make_map_indexed_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool true); cf_extra2 = Nil })\n\n(* make-filter-frame *)\nand make_filter_frame f remaining results current_item env =\n (CekFrame { cf_type = \"filter\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = current_item; cf_extra2 = Nil })\n\n(* make-reduce-frame *)\nand make_reduce_frame f remaining env =\n (CekFrame { cf_type = \"reduce\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-for-each-frame *)\nand make_for_each_frame f remaining env =\n (CekFrame { cf_type = \"for-each\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-some-frame *)\nand make_some_frame f remaining env =\n (CekFrame { cf_type = \"some\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-every-frame *)\nand make_every_frame f remaining env =\n (CekFrame { cf_type = \"every\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-scope-frame *)\nand make_scope_frame name remaining env =\n (CekFrame { cf_type = \"scope\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-provide-frame *)\nand make_provide_frame name value remaining env =\n (CekFrame { cf_type = \"provide\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = value; cf_extra2 = Nil })\n\n(* make-scope-acc-frame *)\nand make_scope_acc_frame name value remaining env =\n (CekFrame { cf_type = \"scope-acc\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = (let _or = value in if sx_truthy _or then _or else Nil); cf_extra2 = (List []) })\n\n(* make-reset-frame *)\nand make_reset_frame env =\n (CekFrame { cf_type = \"reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dict-frame *)\nand make_dict_frame remaining results env =\n (CekFrame { cf_type = \"dict\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = results; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-and-frame *)\nand make_and_frame remaining env =\n (CekFrame { cf_type = \"and\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-or-frame *)\nand make_or_frame remaining env =\n (CekFrame { cf_type = \"or\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dynamic-wind-frame *)\nand make_dynamic_wind_frame phase body_thunk after_thunk env =\n (CekFrame { cf_type = \"dynamic-wind\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = phase; cf_extra2 = Nil })\n\n(* make-reactive-reset-frame *)\nand make_reactive_reset_frame env update_fn first_render_p =\n (CekFrame { cf_type = \"reactive-reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = update_fn; cf_extra2 = first_render_p })\n\n(* make-deref-frame *)\nand make_deref_frame env =\n (CekFrame { cf_type = \"deref\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-ho-setup-frame *)\nand make_ho_setup_frame ho_type remaining_args evaled_args env =\n (CekFrame { cf_type = \"ho-setup\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining_args; cf_f = Nil; cf_args = evaled_args; cf_results = Nil; cf_extra = ho_type; cf_extra2 = Nil })\n\n(* make-comp-trace-frame *)\nand make_comp_trace_frame name file =\n (CekFrame { cf_type = \"comp-trace\"; cf_env = file; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* kont-collect-comp-trace *)\nand kont_collect_comp_trace kont =\n (if sx_truthy ((empty_p (kont))) then (List []) else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"comp-trace\")])) then (cons ((let _d = Hashtbl.create 2 in Hashtbl.replace _d \"file\" (get (frame) ((String \"file\"))); Hashtbl.replace _d \"name\" (get (frame) ((String \"name\"))); Dict _d)) ((kont_collect_comp_trace ((rest (kont)))))) else (kont_collect_comp_trace ((rest (kont)))))))\n\n(* make-handler-frame *)\nand make_handler_frame handlers remaining env =\n (CekFrame { cf_type = \"handler\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = handlers; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-restart-frame *)\nand make_restart_frame restarts remaining env =\n (CekFrame { cf_type = \"restart\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = restarts; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-signal-return-frame *)\nand make_signal_return_frame env saved_kont =\n (CekFrame { cf_type = \"signal-return\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = saved_kont; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* find-matching-handler *)\nand find_matching_handler handlers condition =\n (if sx_truthy ((empty_p (handlers))) then Nil else (let pair = (first (handlers)) in (let pred = (first (pair)) in let handler_fn = (nth (pair) ((Number 1.0))) in (if sx_truthy ((cek_call (pred) ((List [condition])))) then handler_fn else (find_matching_handler ((rest (handlers))) (condition))))))\n\n(* kont-find-handler *)\nand kont_find_handler kont condition =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"handler\")])) then (let match' = (find_matching_handler ((get (frame) ((String \"f\")))) (condition)) in (if sx_truthy ((is_nil (match'))) then (kont_find_handler ((rest (kont))) (condition)) else match')) else (kont_find_handler ((rest (kont))) (condition)))))\n\n(* find-named-restart *)\nand find_named_restart restarts name =\n (if sx_truthy ((empty_p (restarts))) then Nil else (let entry = (first (restarts)) in (if sx_truthy ((prim_call \"=\" [(first (entry)); name])) then entry else (find_named_restart ((rest (restarts))) (name)))))\n\n(* kont-find-restart *)\nand kont_find_restart kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"restart\")])) then (let match' = (find_named_restart ((get (frame) ((String \"f\")))) (name)) in (if sx_truthy ((is_nil (match'))) then (kont_find_restart ((rest (kont))) (name)) else (List [match'; frame; (rest (kont))]))) else (kont_find_restart ((rest (kont))) (name)))))\n\n(* frame-type *)\nand frame_type f =\n (get (f) ((String \"type\")))\n\n(* kont-push *)\nand kont_push frame kont =\n (cons (frame) (kont))\n\n(* kont-top *)\nand kont_top kont =\n (first (kont))\n\n(* kont-pop *)\nand kont_pop kont =\n (rest (kont))\n\n(* kont-empty? *)\nand kont_empty_p kont =\n (empty_p (kont))\n\n(* kont-capture-to-reset *)\nand kont_capture_to_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"shift without enclosing reset\")))) else (let frame = (first (k)) in (if sx_truthy ((let _or = (prim_call \"=\" [(frame_type (frame)); (String \"reset\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")]))) then (List [captured; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* kont-find-provide *)\nand kont_find_provide kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"provide\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_provide ((rest (kont))) (name)))))\n\n(* kont-find-scope-acc *)\nand kont_find_scope_acc kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"scope-acc\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_scope_acc ((rest (kont))) (name)))))\n\n(* has-reactive-reset-frame? *)\nand has_reactive_reset_frame_p kont =\n (if sx_truthy ((empty_p (kont))) then (Bool false) else (if sx_truthy ((prim_call \"=\" [(frame_type ((first (kont)))); (String \"reactive-reset\")])) then (Bool true) else (has_reactive_reset_frame_p ((rest (kont))))))\n\n(* kont-capture-to-reactive-reset *)\nand kont_capture_to_reactive_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"reactive deref without enclosing reactive-reset\")))) else (let frame = (first (k)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")])) then (List [captured; frame; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* *custom-special-forms* *)\nand custom_special_forms =\n (Dict (Hashtbl.create 0))\n\n(* register-special-form! *)\nand register_special_form name handler =\n (sx_dict_set_b custom_special_forms name handler)\n\n(* *render-check* *)\nand render_check =\n Nil\n\n(* *render-fn* *)\nand render_fn =\n Nil\n\n(* *strict* *)\nand _strict_ = !_strict_ref\n\n(* set-strict! *)\nand set_strict_b val' =\n _strict_ref := val'; Nil\n\n(* *prim-param-types* *)\nand _prim_param_types_ = !_prim_param_types_ref\n\n(* set-prim-param-types! *)\nand set_prim_param_types_b types =\n _prim_param_types_ref := types; Nil\n\n(* value-matches-type? *)\nand value_matches_type_p val' expected_type =\n (if sx_truthy ((prim_call \"=\" [expected_type; (String \"any\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"number\")])) then (number_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"string\")])) then (string_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"boolean\")])) then (boolean_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"nil\")])) then (is_nil (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"list\")])) then (list_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"dict\")])) then (dict_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"lambda\")])) then (is_lambda (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"symbol\")])) then (prim_call \"=\" [(type_of (val')); (String \"symbol\")]) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"keyword\")])) then (prim_call \"=\" [(type_of (val')); (String \"keyword\")]) else (if sx_truthy ((let _and = (string_p (expected_type)) in if not (sx_truthy _and) then _and else (prim_call \"ends-with?\" [expected_type; (String \"?\")]))) then (let _or = (is_nil (val')) in if sx_truthy _or then _or else (value_matches_type_p (val') ((prim_call \"slice\" [expected_type; (Number 0.0); (prim_call \"-\" [(prim_call \"string-length\" [expected_type]); (Number 1.0)])])))) else (Bool true))))))))))))\n\n(* strict-check-args *)\nand strict_check_args name args =\n (if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else !_prim_param_types_ref)) then (let spec = (get (!_prim_param_types_ref) (name)) in (if sx_truthy (spec) then (let positional = (get (spec) ((String \"positional\"))) in let rest_type = (get (spec) ((String \"rest-type\"))) in (let () = ignore ((if sx_truthy (positional) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let param = (nth (pair) ((Number 1.0))) in let p_name = (first (param)) in let p_type = (nth (param) ((Number 1.0))) in (if sx_truthy ((prim_call \"<\" [idx; (len (args))])) then (let val' = (nth (args) (idx)) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (p_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); p_type; (String \" for param \"); p_name; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [i; p])) (sx_to_list positional)))); Nil) else Nil)) in (if sx_truthy ((let _and = rest_type in if not (sx_truthy _and) then _and else (prim_call \">\" [(len (args)); (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let val' = (nth (pair) ((Number 1.0))) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (rest_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); rest_type; (String \" for rest arg \"); idx; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)))) (sx_to_list (List (List.mapi (fun i v -> let i = Number (float_of_int i) in (List [i; v])) (sx_to_list (prim_call \"slice\" [args; (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))))); Nil) else Nil))) else Nil)) else Nil)\n\n(* call-lambda *)\nand call_lambda f args caller_env =\n (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (caller_env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (make_thunk ((lambda_body (f))) (local))))))\n\n(* call-component *)\nand call_component comp raw_args env =\n (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (comp))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (comp))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (comp))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_thunk ((component_body (comp))) (local)))))\n\n(* parse-keyword-args *)\nand parse_keyword_args raw_args env =\n (let kwargs = (Dict (Hashtbl.create 0)) in let children = ref ((List [])) in let i = (Number 0.0) in (let () = ignore ((List.fold_left (fun state arg -> (let idx = (get (state) ((String \"i\"))) in let skip = (get (state) ((String \"skip\"))) in (if sx_truthy (skip) then (prim_call \"assoc\" [state; (String \"skip\"); (Bool false); (String \"i\"); (prim_call \"inc\" [idx])]) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (arg)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"inc\" [idx]); (len (raw_args))]))) then (let () = ignore ((sx_dict_set_b kwargs (keyword_name (arg)) (trampoline ((eval_expr ((nth (raw_args) ((prim_call \"inc\" [idx])))) (env)))))) in (prim_call \"assoc\" [state; (String \"skip\"); (Bool true); (String \"i\"); (prim_call \"inc\" [idx])])) else (let () = ignore ((children := sx_append_b !children (trampoline ((eval_expr (arg) (env)))); Nil)) in (prim_call \"assoc\" [state; (String \"i\"); (prim_call \"inc\" [idx])])))))) (let _d = Hashtbl.create 2 in Hashtbl.replace _d (value_to_str (String \"i\")) (Number 0.0); Hashtbl.replace _d (value_to_str (String \"skip\")) (Bool false); Dict _d) (sx_to_list raw_args))) in (List [kwargs; !children])))\n\n(* cond-scheme? *)\nand cond_scheme_p clauses =\n (Bool (List.for_all (fun c -> sx_truthy ((let _and = (prim_call \"=\" [(type_of (c)); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len (c)); (Number 2.0)])))) (sx_to_list clauses)))\n\n(* is-else-clause? *)\nand is_else_clause test =\n (let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (let _and = (prim_call \"=\" [(type_of (test)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _or = (prim_call \"=\" [(symbol_name (test)); (String \"else\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(symbol_name (test)); (String \":else\")]))))\n\n(* sf-named-let *)\nand sf_named_let args env =\n (let loop_name = (symbol_name ((first (args)))) in let bindings = (nth (args) ((Number 1.0))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in let params = ref ((List [])) in let inits = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))); Nil)) in (inits := sx_append_b !inits (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))); Nil))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let loop_body = (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (first (body)) else (cons ((make_symbol ((String \"begin\")))) (body))) in let loop_fn = (make_lambda (!params) (loop_body) (env)) in (let () = ignore ((set_lambda_name loop_fn (sx_to_string loop_name))) in (let () = ignore ((env_bind (lambda_closure (loop_fn)) (sx_to_string loop_name) loop_fn)) in (let init_vals = (List (List.map (fun e -> (trampoline ((eval_expr (e) (env))))) (sx_to_list !inits))) in (trampoline (call_lambda (loop_fn) (init_vals) (env)))))))))\n\n(* sf-lambda *)\nand sf_lambda args env =\n (let params_expr = (first (args)) in let body_exprs = (rest (args)) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (cons ((make_symbol ((String \"begin\")))) (body_exprs))) in let param_names = (List (List.map (fun p -> (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")]))))) then (symbol_name ((first (p)))) else p))) (sx_to_list params_expr))) in (make_lambda (param_names) (body) (env)))\n\n(* sf-defcomp *)\nand sf_defcomp args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (last (args)) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in let param_types = (nth (parsed) ((Number 2.0))) in let affinity = (defcomp_kwarg (args) ((String \"affinity\")) ((String \"auto\"))) in (let comp = (make_component (comp_name) (params) (has_children) (body) (env) (affinity)) in let effects = (defcomp_kwarg (args) ((String \"effects\")) (Nil)) in (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((is_nil (param_types)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((empty_p ((prim_call \"keys\" [param_types]))))))))) then (component_set_param_types_b (comp) (param_types)) else Nil)) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((is_nil (effects))))))) then (let effect_list = (if sx_truthy ((prim_call \"=\" [(type_of (effects)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effects))) else (List [(String (sx_str [effects]))])) in let effect_anns = (if sx_truthy ((env_has (env) ((String \"*effect-annotations*\")))) then (env_get (env) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns (symbol_name (name_sym)) effect_list)) in (env_bind env (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (let () = ignore ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (comp) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) comp)) in comp))))))\n\n(* defcomp-kwarg *)\nand defcomp_kwarg args key default =\n (let end' = (prim_call \"-\" [(len (args)); (Number 1.0)]) in let result' = ref (default) in (let () = ignore ((List.iter (fun i -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((nth (args) (i)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(keyword_name ((nth (args) (i)))); key]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"+\" [i; (Number 1.0)]); end'])))) then (let val' = (nth (args) ((prim_call \"+\" [i; (Number 1.0)]))) in (result' := (if sx_truthy ((prim_call \"=\" [(type_of (val')); (String \"keyword\")])) then (keyword_name (val')) else val'); Nil)) else Nil))) (sx_to_list (prim_call \"range\" [(Number 2.0); end'; (Number 1.0)])); Nil)) in !result'))\n\n(* parse-comp-params *)\nand parse_comp_params params_expr =\n (let params = ref ((List [])) in let param_types = (Dict (Hashtbl.create 0)) in let has_children = ref ((Bool false)) in let in_key = ref ((Bool false)) in (let () = ignore ((List.iter (fun p -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")])))))) then (let name = (symbol_name ((first (p)))) in let ptype = (nth (p) ((Number 2.0))) in (let type_val = (if sx_truthy ((prim_call \"=\" [(type_of (ptype)); (String \"symbol\")])) then (symbol_name (ptype)) else ptype) in (if sx_truthy ((Bool (not (sx_truthy (!has_children))))) then (let () = ignore ((params := sx_append_b !params name; Nil)) in (sx_dict_set_b param_types name type_val)) else Nil))) else (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (let name = (symbol_name (p)) in (if sx_truthy ((prim_call \"=\" [name; (String \"&key\")])) then (in_key := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&rest\")])) then (has_children := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&children\")])) then (has_children := (Bool true); Nil) else (if sx_truthy (!has_children) then Nil else (if sx_truthy (!in_key) then (params := sx_append_b !params name; Nil) else (params := sx_append_b !params name; Nil))))))) else Nil)))) (sx_to_list params_expr); Nil)) in (List [!params; !has_children; param_types])))\n\n(* sf-defisland *)\nand sf_defisland args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (cons ((make_symbol ((String \"begin\")))) (body_exprs))) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in (let island = (make_island (comp_name) (params) (has_children) (body) (env)) in (let () = ignore ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (island) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) island)) in island))))\n\n(* sf-defmacro *)\nand sf_defmacro args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (nth (args) ((Number 2.0))) in let parsed = (parse_macro_params (params_raw)) in let params = (first (parsed)) in let rest_param = (nth (parsed) ((Number 1.0))) in (let mac = (make_macro (params) (rest_param) (body) (env) ((symbol_name (name_sym)))) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) mac)) in mac)))\n\n(* parse-macro-params *)\nand parse_macro_params params_expr =\n (let params = ref ((List [])) in let rest_param = ref (Nil) in (let () = ignore ((List.fold_left (fun state p -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (p)); (String \"&rest\")]))) then (prim_call \"assoc\" [state; (String \"in-rest\"); (Bool true)]) else (if sx_truthy ((get (state) ((String \"in-rest\")))) then (let () = ignore ((rest_param := (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state) else (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state)))) (let _d = Hashtbl.create 1 in Hashtbl.replace _d (value_to_str (String \"in-rest\")) (Bool false); Dict _d) (sx_to_list params_expr))) in (List [!params; !rest_param])))\n\n(* qq-expand *)\nand qq_expand template env =\n (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (template)); (String \"list\")])))))) then template else (if sx_truthy ((empty_p (template))) then (List []) else (let head = (first (template)) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (head)); (String \"unquote\")]))) then (trampoline ((eval_expr ((nth (template) ((Number 1.0)))) (env)))) else (List.fold_left (fun result' item -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")]))))) then (let spliced = (trampoline ((eval_expr ((nth (item) ((Number 1.0)))) (env)))) in (if sx_truthy ((prim_call \"=\" [(type_of (spliced)); (String \"list\")])) then (prim_call \"concat\" [result'; spliced]) else (if sx_truthy ((is_nil (spliced))) then result' else (prim_call \"concat\" [result'; (List [spliced])])))) else (prim_call \"concat\" [result'; (List [(qq_expand (item) (env))])]))) (List []) (sx_to_list template))))))\n\n(* sf-letrec *)\nand sf_letrec args env =\n (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in let names = ref ((List [])) in let val_exprs = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs (nth (binding) ((Number 1.0))); Nil)) in (env_bind local (sx_to_string vname) Nil)))))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))) in let val_expr = (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs val_expr; Nil)) in (env_bind local (sx_to_string vname) Nil))))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let () = ignore ((let values = (List (List.map (fun e -> (trampoline ((eval_expr (e) (local))))) (sx_to_list !val_exprs))) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [!names; values])); Nil)) in (List.iter (fun val' -> ignore ((if sx_truthy ((is_lambda (val'))) then (List.iter (fun n -> ignore ((env_bind (lambda_closure (val')) (sx_to_string n) (env_get (local) (n))))) (sx_to_list !names); Nil) else Nil))) (sx_to_list values); Nil)))) in (let () = ignore ((List.iter (fun e -> ignore ((trampoline ((eval_expr (e) (local)))))) (sx_to_list (prim_call \"slice\" [body; (Number 0.0); (prim_call \"dec\" [(len (body))])])); Nil)) in (make_thunk ((last (body))) (local))))))\n\n(* step-sf-letrec *)\nand step_sf_letrec args env kont =\n (let thk = (sf_letrec (args) (env)) in (make_cek_state ((thunk_expr (thk))) ((thunk_env (thk))) (kont)))\n\n(* sf-dynamic-wind *)\nand sf_dynamic_wind args env =\n (let before = (trampoline ((eval_expr ((first (args))) (env)))) in let body = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let after = (trampoline ((eval_expr ((nth (args) ((Number 2.0)))) (env)))) in (dynamic_wind_call (before) (body) (after) (env)))\n\n(* sf-scope *)\nand sf_scope args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body_exprs = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest) ((Number 1.0)))) (env)))); Nil)) in (body_exprs := (prim_call \"slice\" [rest; (Number 2.0)]); Nil)) else (body_exprs := rest; Nil))) in (let () = ignore ((scope_push (name) (!val'))) in (let result' = ref (Nil) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list !body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))))\n\n(* sf-provide *)\nand sf_provide args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) in let result' = ref (Nil) in (let () = ignore ((scope_push (name) (val'))) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))\n\n(* expand-macro *)\nand expand_macro mac raw_args env =\n (let local = (env_merge ((macro_closure (mac))) (env)) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (if sx_truthy ((prim_call \"<\" [(nth (pair) ((Number 1.0))); (len (raw_args))])) then (nth (raw_args) ((nth (pair) ((Number 1.0))))) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [p; i])) (sx_to_list (macro_params (mac)))))); Nil)) in (let () = ignore ((if sx_truthy ((macro_rest_param (mac))) then (env_bind local (sx_to_string (macro_rest_param (mac))) (prim_call \"slice\" [raw_args; (len ((macro_params (mac))))])) else Nil)) in (trampoline ((eval_expr ((macro_body (mac))) (local)))))))\n\n(* cek-run — iterative to avoid OCaml/WASM stack overflow *)\nand cek_run state =\n let s = ref state in\n (try\n while not (sx_truthy (cek_terminal_p !s)) do\n s := cek_step !s\n done;\n cek_value !s\n with Eval_error msg ->\n (if !_last_error_kont = Nil then _last_error_kont := cek_kont !s);\n raise (Eval_error msg))\n\n(* cek-step *)\nand cek_step state =\n (if sx_truthy ((prim_call \"=\" [(cek_phase (state)); (String \"eval\")])) then (step_eval (state)) else (step_continue (state)))\n\n(* step-eval *)\nand step_eval state =\n (let expr = (cek_control (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (let _match_val = (type_of (expr)) in (if _match_val = (String \"number\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"string\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"boolean\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"nil\") then (make_cek_value (Nil) (env) (kont)) else (if _match_val = (String \"symbol\") then (let name = (symbol_name (expr)) in (let val' = (if sx_truthy ((env_has (env) (name))) then (env_get (env) (name)) else (if sx_truthy ((is_primitive (name))) then (get_primitive (name)) else (if sx_truthy ((prim_call \"=\" [name; (String \"true\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [name; (String \"false\")])) then (Bool false) else (if sx_truthy ((prim_call \"=\" [name; (String \"nil\")])) then Nil else (raise (Eval_error (value_to_str (String (sx_str [(String \"Undefined symbol: \"); name])))))))))) in (let () = ignore ((if sx_truthy ((let _and = (is_nil (val')) in if not (sx_truthy _and) then _and else (prim_call \"starts-with?\" [name; (String \"~\")]))) then (debug_log ((String \"Component not found:\")) (name)) else Nil)) in (make_cek_value (val') (env) (kont))))) else (if _match_val = (String \"keyword\") then (make_cek_value ((keyword_name (expr))) (env) (kont)) else (if _match_val = (String \"dict\") then (let ks = (prim_call \"keys\" [expr]) in (if sx_truthy ((empty_p (ks))) then (make_cek_value ((Dict (Hashtbl.create 0))) (env) (kont)) else (let first_key = (first (ks)) in let remaining_entries = ref ((List [])) in (let () = ignore ((List.iter (fun k -> ignore ((remaining_entries := sx_append_b !remaining_entries (List [k; (get (expr) (k))]); Nil))) (sx_to_list (rest (ks))); Nil)) in (make_cek_state ((get (expr) (first_key))) (env) ((kont_push ((make_dict_frame (!remaining_entries) ((List [(List [first_key])])) (env))) (kont)))))))) else (if _match_val = (String \"list\") then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (step_eval_list (expr) (env) (kont))) else (make_cek_value (expr) (env) (kont))))))))))))\n\n(* step-eval-list *)\nand step_eval_list expr env kont =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((let _or = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [(type_of (head)); (String \"lambda\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(type_of (head)); (String \"list\")])))))))) then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (make_cek_state ((first (expr))) (env) ((kont_push ((make_map_frame (Nil) ((rest (expr))) ((List [])) (env))) (kont))))) else (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (step_sf_if (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (step_sf_when (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (step_sf_cond (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (step_sf_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (step_sf_and (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (step_sf_or (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (make_cek_value ((sf_defcomp (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (make_cek_value ((sf_defisland (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (make_cek_value ((sf_defmacro (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (make_cek_value ((if sx_truthy ((empty_p (args))) then Nil else (first (args)))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (make_cek_value ((qq_expand ((first (args))) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (step_sf_thread_first (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (step_sf_set_b (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (step_sf_letrec (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reset\")])) then (step_sf_reset (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"shift\")])) then (step_sf_shift (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"deref\")])) then (step_sf_deref (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"scope\")])) then (step_sf_scope (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"provide\")])) then (step_sf_provide (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"context\")])) then (step_sf_context (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emit!\")])) then (step_sf_emit (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emitted\")])) then (step_sf_emitted (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"handler-bind\")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"restart-case\")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"signal-condition\")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"invoke-restart\")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (step_sf_match (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"dynamic-wind\")])) then (make_cek_value ((sf_dynamic_wind (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map\")])) then (step_ho_map (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map-indexed\")])) then (step_ho_map_indexed (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"filter\")])) then (step_ho_filter (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reduce\")])) then (step_ho_reduce (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"some\")])) then (step_ho_some (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"every?\")])) then (step_ho_every (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"for-each\")])) then (step_ho_for_each (args) (env) (kont)) else (if sx_truthy ((prim_call \"has-key?\" [custom_special_forms; name])) then (make_cek_value ((cek_call ((get (custom_special_forms) (name))) (List [args; env]))) (env) (kont)) else (if sx_truthy ((let _and = (env_has (env) (name)) in if not (sx_truthy _and) then _and else (is_macro ((env_get (env) (name)))))) then (let mac = (env_get (env) (name)) in (make_cek_state ((expand_macro (mac) (args) (env))) (env) (kont))) else (if sx_truthy ((let _and = render_check in if not (sx_truthy _and) then _and else (cek_call (render_check) (List [expr; env])))) then (make_cek_value ((cek_call (render_fn) (List [expr; env]))) (env) (kont)) else (step_eval_call (head) (args) (env) (kont)))))))))))))))))))))))))))))))))))))))))))))))) else (step_eval_call (head) (args) (env) (kont)))))\n\n(* match-find-clause *)\nand match_find_clause val' clauses env =\n (if sx_truthy ((empty_p (clauses))) then Nil else (let clause = (first (clauses)) in let pattern = (first (clause)) in let body = (nth (clause) ((Number 1.0))) in let local = (env_extend (env)) in (if sx_truthy ((match_pattern (pattern) (val') (local))) then (List [local; body]) else (match_find_clause (val') ((rest (clauses))) (env)))))\n\n(* match-pattern *)\nand match_pattern pattern value env =\n (if sx_truthy ((prim_call \"=\" [pattern; (Symbol \"_\")])) then (Bool true) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (pattern)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"?\")])))) then (let pred = (trampoline ((eval_expr ((nth (pattern) ((Number 1.0)))) (env)))) in (cek_call (pred) ((List [value])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"quote\")])))) then (prim_call \"=\" [value; (nth (pattern) ((Number 1.0)))]) else (if sx_truthy ((symbol_p (pattern))) then (let () = ignore ((env_bind env (sx_to_string (symbol_name (pattern))) value)) in (Bool true)) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (list_p (value)))) then (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(len (pattern)); (len (value))])))))) then (Bool false) else (let pairs = (prim_call \"zip\" [pattern; value]) in (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list pairs))))) else (prim_call \"=\" [pattern; value]))))))\n\n(* step-sf-match *)\nand step_sf_match args env kont =\n (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"match: no clause matched \"); (inspect (val'))]))))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))\n\n(* step-sf-handler-bind *)\nand step_sf_handler_bind args env kont =\n (let handler_specs = (first (args)) in let body = (rest (args)) in let handlers = (List (List.map (fun spec -> (List [(trampoline ((eval_expr ((first (spec))) (env)))); (trampoline ((eval_expr ((nth (spec) ((Number 1.0)))) (env))))])) (sx_to_list handler_specs))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_handler_frame (handlers) ((rest (body))) (env))) (kont))))))\n\n(* step-sf-restart-case *)\nand step_sf_restart_case args env kont =\n (let body = (first (args)) in let restart_specs = (rest (args)) in let restarts = (List (List.map (fun spec -> (List [(if sx_truthy ((symbol_p ((first (spec))))) then (symbol_name ((first (spec)))) else (first (spec))); (nth (spec) ((Number 1.0))); (nth (spec) ((Number 2.0)))])) (sx_to_list restart_specs))) in (make_cek_state (body) (env) ((kont_push ((make_restart_frame (restarts) ((List [])) (env))) (kont)))))\n\n(* step-sf-signal *)\nand step_sf_signal args env kont =\n (let condition = (trampoline ((eval_expr ((first (args))) (env)))) in let handler_fn = (kont_find_handler (kont) (condition)) in (if sx_truthy ((is_nil (handler_fn))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Unhandled condition: \"); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (env) ((List [condition])) ((kont_push ((make_signal_return_frame (env) (kont))) (kont))))))\n\n(* step-sf-invoke-restart *)\nand step_sf_invoke_restart args env kont =\n (let restart_name = (let rn = (if sx_truthy ((symbol_p ((first (args))))) then (symbol_name ((first (args)))) else (trampoline ((eval_expr ((first (args))) (env))))) in (if sx_truthy ((symbol_p (rn))) then (symbol_name (rn)) else rn)) in let restart_arg = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let found = (kont_find_restart (kont) (restart_name)) in (if sx_truthy ((is_nil (found))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"No restart named: \"); (inspect (restart_name))]))))) else (let entry = (first (found)) in let restart_frame = (nth (found) ((Number 1.0))) in let rest_kont = (nth (found) ((Number 2.0))) in (let params = (nth (entry) ((Number 1.0))) in let body = (nth (entry) ((Number 2.0))) in let restart_env = (env_extend ((get (restart_frame) ((String \"env\"))))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((empty_p (params))))))) then (env_bind restart_env (sx_to_string (first (params))) restart_arg) else Nil)) in (make_cek_state (body) (restart_env) (rest_kont)))))))\n\n(* step-sf-if *)\nand step_sf_if args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_if_frame ((nth (args) ((Number 1.0)))) ((if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil)) (env))) (kont))))\n\n(* step-sf-when *)\nand step_sf_when args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_when_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-begin *)\nand step_sf_begin args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (make_cek_state ((first (args))) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_begin_frame ((rest (args))) (env))) (kont))))))\n\n(* step-sf-let *)\nand step_sf_let args env kont =\n let pairs = ref Nil in (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (make_cek_value ((sf_named_let (args) (env))) (env) (kont)) else (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in (if sx_truthy ((empty_p (bindings))) then (step_sf_begin (body) (local) (kont)) else (let first_binding = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (first (bindings)) else (List [(first (bindings)); (nth (bindings) ((Number 1.0)))])) in let rest_bindings = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (rest (bindings)) else (let pairs = ref ((List [])) in (let () = ignore ((List.fold_left (fun _acc i -> (pairs := sx_append_b !pairs (List [(nth (bindings) ((prim_call \"*\" [i; (Number 2.0)]))); (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [i; (Number 2.0)])])))]); Nil)) Nil (sx_to_list (prim_call \"range\" [(Number 1.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])])))) in !pairs))) in (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (first_binding)))); (String \"symbol\")])) then (symbol_name ((first (first_binding)))) else (first (first_binding))) in (make_cek_state ((nth (first_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) (rest_bindings) (body) (local))) (kont)))))))))\n\n(* step-sf-define *)\nand step_sf_define args env kont =\n (let name_sym = (first (args)) in let has_effects = (let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")]))) in let val_idx = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (Number 3.0) else (Number 1.0)) in let effect_list = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (nth (args) ((Number 2.0))) else Nil) in (make_cek_state ((nth (args) (val_idx))) (env) ((kont_push ((make_define_frame ((symbol_name (name_sym))) (env) (has_effects) (effect_list))) (kont)))))\n\n(* step-sf-set! *)\nand step_sf_set_b args env kont =\n (make_cek_state ((nth (args) ((Number 1.0)))) (env) ((kont_push ((make_set_frame ((symbol_name ((first (args))))) (env))) (kont))))\n\n(* step-sf-and *)\nand step_sf_and args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool true)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_and_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-or *)\nand step_sf_or args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool false)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_or_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-cond *)\nand step_sf_cond args env kont =\n (let scheme_p = (cond_scheme_p (args)) in (if sx_truthy (scheme_p) then (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (let clause = (first (args)) in let test = (first (clause)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (clause) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool true)))) (kont))))))) else (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (args)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (args) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool false)))) (kont)))))))))\n\n(* step-sf-case *)\nand step_sf_case args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_case_frame (Nil) ((rest (args))) (env))) (kont))))\n\n(* step-sf-thread-first *)\nand step_sf_thread_first args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_thread_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-lambda *)\nand step_sf_lambda args env kont =\n (make_cek_value ((sf_lambda (args) (env))) (env) (kont))\n\n(* step-sf-scope *)\nand step_sf_scope args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest_args = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest_args)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest_args)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest_args) ((Number 1.0)))) (env)))); Nil)) in (body := (prim_call \"slice\" [rest_args; (Number 2.0)]); Nil)) else (body := rest_args; Nil))) in (if sx_truthy ((empty_p (!body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (!body))) (env) ((kont_push ((make_scope_acc_frame (name) (!val') ((rest (!body))) (env))) (kont)))))))\n\n(* step-sf-provide *)\nand step_sf_provide args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_provide_frame (name) (val') ((rest (body))) (env))) (kont))))))\n\n(* step-sf-context — check kont provide frames first, then fall back to scope_stacks *)\nand step_sf_context args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let default_val = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let frame = (kont_find_provide (kont) (name)) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil (frame))))))) then (make_cek_value ((get (frame) ((String \"value\")))) (env) (kont)) else (let scope_val = (sx_context (name) (Nil)) in (make_cek_value ((if sx_truthy ((is_nil (scope_val))) then default_val else scope_val)) (env) (kont)))))\n\n(* step-sf-emit *)\nand step_sf_emit args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (let () = ignore ((if sx_truthy (frame) then (sx_dict_set_b frame (String \"emitted\") (prim_call \"append\" [(get (frame) ((String \"emitted\"))); (List [val'])])) else Nil)) in (make_cek_value (Nil) (env) (kont))))\n\n(* step-sf-emitted *)\nand step_sf_emitted args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (make_cek_value ((if sx_truthy ((is_nil (frame))) then (List []) else (get (frame) ((String \"emitted\"))))) (env) (kont)))\n\n(* step-sf-reset *)\nand step_sf_reset args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_reset_frame (env))) (kont))))\n\n(* step-sf-shift *)\nand step_sf_shift args env kont =\n (let k_name = (symbol_name ((first (args)))) in let body = (nth (args) ((Number 1.0))) in let captured_result = (kont_capture_to_reset (kont)) in let captured = (first (captured_result)) in let rest_kont = (nth (captured_result) ((Number 1.0))) in (let k = (make_cek_continuation (captured) (rest_kont)) in (let shift_env = (env_extend (env)) in (let () = ignore ((env_bind shift_env (sx_to_string k_name) k)) in (make_cek_state (body) (shift_env) (rest_kont))))))\n\n(* step-sf-deref *)\nand step_sf_deref args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_deref_frame (env))) (kont))))\n\n(* cek-call *)\nand cek_call f args =\n (let a = (if sx_truthy ((is_nil (args))) then (List []) else args) in (if sx_truthy ((is_nil (f))) then Nil else (if sx_truthy ((let _or = (is_lambda (f)) in if sx_truthy _or then _or else (is_callable (f)))) then (cek_run ((continue_with_call (f) (a) ((make_env ())) (a) ((List []))))) else Nil)))\n\n(* reactive-shift-deref *)\nand reactive_shift_deref sig' env kont =\n (let scan_result = (kont_capture_to_reactive_reset (kont)) in let captured_frames = (first (scan_result)) in let reset_frame = (nth (scan_result) ((Number 1.0))) in let remaining_kont = (nth (scan_result) ((Number 2.0))) in let update_fn = (get (reset_frame) ((String \"update-fn\"))) in (let sub_disposers = ref ((List [])) in (let subscriber = (NativeFn (\"\\206\\187\", fun _args -> (fun () -> let sub_disposers = ref Nil in (let () = ignore ((List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil)) in (let () = ignore ((sub_disposers := (List []); Nil)) in (let new_reset = (make_reactive_reset_frame (env) (update_fn) ((Bool false))) in let new_kont = (prim_call \"concat\" [captured_frames; (List [new_reset]); remaining_kont]) in (with_island_scope ((NativeFn (\"\\206\\187\", fun _args -> match _args with [d] -> (fun d -> let sub_disposers = ref Nil in (sub_disposers := sx_append_b !sub_disposers d; Nil)) d | _ -> Nil))) ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (cek_run ((make_cek_value ((signal_value (sig'))) (env) (new_kont))))) ())))))))) ())) in (let () = ignore ((signal_add_sub_b (sig') (subscriber))) in (let () = ignore ((register_in_scope ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (let () = ignore ((signal_remove_sub_b (sig') (subscriber))) in (List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil))) ()))))) in (let initial_kont = (prim_call \"concat\" [captured_frames; (List [reset_frame]); remaining_kont]) in (make_cek_value ((signal_value (sig'))) (env) (initial_kont))))))))\n\n(* step-eval-call *)\nand step_eval_call head args env kont =\n (let hname = (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (symbol_name (head)) else Nil) in (make_cek_state (head) (env) ((kont_push ((make_arg_frame (Nil) ((List [])) (args) (env) (args) (hname))) (kont)))))\n\n(* ho-form-name? *)\nand ho_form_name_p name =\n (let _or = (prim_call \"=\" [name; (String \"map\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"map-indexed\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"filter\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"reduce\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"some\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"every?\")]) in if sx_truthy _or then _or else (prim_call \"=\" [name; (String \"for-each\")])))))))\n\n(* ho-fn? *)\nand ho_fn_p v =\n (let _or = (is_callable (v)) in if sx_truthy _or then _or else (is_lambda (v)))\n\n(* ho-swap-args *)\nand ho_swap_args ho_type evaled =\n (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; (nth (evaled) ((Number 2.0))); a]) else evaled)) else (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; a]) else evaled)))\n\n(* ho-setup-dispatch *)\nand ho_setup_dispatch ho_type evaled env kont =\n (let ordered = (ho_swap_args (ho_type) (evaled)) in (let f = (first (ordered)) in (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_map_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map-indexed\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(Number 0.0); (first (coll))])) (env) ((List [])) ((kont_push ((make_map_indexed_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"filter\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (coll))) ((List [])) ((first (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let init = (nth (ordered) ((Number 1.0))) in let coll = (nth (ordered) ((Number 2.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (init) (env) (kont)) else (continue_with_call (f) ((List [init; (first (coll))])) (env) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"some\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool false)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_some_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"every\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool true)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_every_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"for-each\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (Nil) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (coll))) (env))) (kont)))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown HO type: \"); ho_type]))))))))))))))\n\n(* step-ho-map *)\nand step_ho_map args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-map-indexed *)\nand step_ho_map_indexed args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map-indexed\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-filter *)\nand step_ho_filter args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"filter\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-reduce *)\nand step_ho_reduce args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"reduce\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-some *)\nand step_ho_some args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"some\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-every *)\nand step_ho_every args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"every\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-for-each *)\nand step_ho_for_each args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"for-each\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-continue *)\nand step_continue state =\n (let value = (cek_value (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (if sx_truthy ((kont_empty_p (kont))) then state else (let frame = (kont_top (kont)) in let rest_k = (kont_pop (kont)) in let ft = (frame_type (frame)) in (if sx_truthy ((prim_call \"=\" [ft; (String \"if\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (make_cek_state ((get (frame) ((String \"then\")))) ((get (frame) ((String \"env\")))) (rest_k)) else (if sx_truthy ((is_nil ((get (frame) ((String \"else\")))))) then (make_cek_value (Nil) (env) (rest_k)) else (make_cek_state ((get (frame) ((String \"else\")))) ((get (frame) ((String \"env\")))) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"when\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (let body = (get (frame) ((String \"body\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (make_cek_state ((first (body))) (fenv) (rest_k)) else (make_cek_state ((first (body))) (fenv) ((kont_push ((make_begin_frame ((rest (body))) (fenv))) (rest_k))))))) else (make_cek_value (Nil) (env) (rest_k))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"begin\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then (make_cek_state ((first (remaining))) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_begin_frame ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"let\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let body = (get (frame) ((String \"body\"))) in let local = (get (frame) ((String \"env\"))) in (let () = ignore ((env_bind local (sx_to_string name) value)) in (if sx_truthy ((empty_p (remaining))) then (step_sf_begin (body) (local) (rest_k)) else (let next_binding = (first (remaining)) in let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (next_binding)))); (String \"symbol\")])) then (symbol_name ((first (next_binding)))) else (first (next_binding))) in (make_cek_state ((nth (next_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) ((rest (remaining))) (body) (local))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"define\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in let has_effects = (get (frame) ((String \"has-effects\"))) in let effect_list = (get (frame) ((String \"effect-list\"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (let () = ignore ((if sx_truthy (has_effects) then (let effect_names = (if sx_truthy ((prim_call \"=\" [(type_of (effect_list)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effect_list))) else (List [(String (sx_str [effect_list]))])) in let effect_anns = (if sx_truthy ((env_has (fenv) ((String \"*effect-annotations*\")))) then (env_get (fenv) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns name effect_names)) in (env_bind fenv (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"set\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in (let () = ignore ((env_set fenv (sx_to_string name) value)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"and\")])) then (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_and_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"or\")])) then (if sx_truthy (value) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_or_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"cond\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let scheme_p = (get (frame) ((String \"scheme\"))) in (if sx_truthy (scheme_p) then (if sx_truthy (value) then (make_cek_state ((nth ((first (remaining))) ((Number 1.0)))) (fenv) (rest_k)) else (let next_clauses = (rest (remaining)) in (if sx_truthy ((empty_p (next_clauses))) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_clause = (first (next_clauses)) in let next_test = (first (next_clause)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next_clause) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next_clauses) (fenv) ((Bool true)))) (rest_k))))))))) else (if sx_truthy (value) then (make_cek_state ((nth (remaining) ((Number 1.0)))) (fenv) (rest_k)) else (let next = (prim_call \"slice\" [remaining; (Number 2.0)]) in (if sx_truthy ((prim_call \"<\" [(len (next)); (Number 2.0)])) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_test = (first (next)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next) (fenv) ((Bool false)))) (rest_k))))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"case\")])) then (let match_val = (get (frame) ((String \"match-val\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((is_nil (match_val))) then (sf_case_step_loop (value) (remaining) (fenv) (rest_k)) else (sf_case_step_loop (match_val) (remaining) (fenv) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"thread\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (let form = (first (remaining)) in let rest_forms = (rest (remaining)) in let new_kont = (if sx_truthy ((empty_p ((rest (remaining))))) then rest_k else (kont_push ((make_thread_frame ((rest (remaining))) (fenv))) (rest_k))) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (form)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (form)))))) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (form)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (ho_form_name_p ((symbol_name ((first (form)))))))))) then (make_cek_state ((cons ((first (form))) ((cons ((List [(Symbol \"quote\"); value])) ((rest (form))))))) (fenv) (new_kont)) else (let result' = (if sx_truthy ((prim_call \"=\" [(type_of (form)); (String \"list\")])) then (let f = (trampoline ((eval_expr ((first (form))) (fenv)))) in let rargs = (List (List.map (fun a -> (trampoline ((eval_expr (a) (fenv))))) (sx_to_list (rest (form))))) in let all_args = (cons (value) (rargs)) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (sx_apply f all_args) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) (all_args) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))])))))))) else (let f = (trampoline ((eval_expr (form) (fenv)))) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (cek_call (f) (List [value])) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) ((List [value])) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))]))))))))) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv))) (rest_k)))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"arg\")])) then (let f = (get (frame) ((String \"f\"))) in let evaled = (get (frame) ((String \"evaled\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let raw_args = (get (frame) ((String \"raw-args\"))) in let hname = (get (frame) ((String \"head-name\"))) in (if sx_truthy ((is_nil (f))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) ((List []))) else Nil)) in (if sx_truthy ((empty_p (remaining))) then (continue_with_call (value) ((List [])) (fenv) (raw_args) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (value) ((List [])) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))) else (let new_evaled = (prim_call \"append\" [evaled; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) (new_evaled)) else Nil)) in (continue_with_call (f) (new_evaled) (fenv) (raw_args) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (f) (new_evaled) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"dict\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let fenv = (get (frame) ((String \"env\"))) in (let last_result = (last (results)) in let completed = (prim_call \"append\" [(prim_call \"slice\" [results; (Number 0.0); (prim_call \"dec\" [(len (results))])]); (List [(List [(first (last_result)); value])])]) in (if sx_truthy ((empty_p (remaining))) then (let d = (Dict (Hashtbl.create 0)) in (let () = ignore ((List.iter (fun pair -> ignore ((sx_dict_set_b d (first (pair)) (nth (pair) ((Number 1.0)))))) (sx_to_list completed); Nil)) in (make_cek_value (d) (fenv) (rest_k)))) else (let next_entry = (first (remaining)) in (make_cek_state ((nth (next_entry) ((Number 1.0)))) (fenv) ((kont_push ((make_dict_frame ((rest (remaining))) ((prim_call \"append\" [completed; (List [(List [(first (next_entry))])])])) (fenv))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"ho-setup\")])) then (let ho_type = (get (frame) ((String \"ho-type\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let evaled = (prim_call \"append\" [(get (frame) ((String \"evaled\"))); (List [value])]) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (ho_setup_dispatch (ho_type) (evaled) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_ho_setup_frame (ho_type) ((rest (remaining))) (evaled) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reset\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"deref\")])) then (let val' = value in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy ((is_signal (val'))))))) then (make_cek_value (val') (fenv) (rest_k)) else (if sx_truthy ((has_reactive_reset_frame_p (rest_k))) then (reactive_shift_deref (val') (fenv) (rest_k)) else (let () = ignore ((let ctx = (sx_context ((String \"sx-reactive\")) (Nil)) in (if sx_truthy (ctx) then (let dep_list = ref ((get (ctx) ((String \"deps\")))) in let notify_fn = (get (ctx) ((String \"notify\"))) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"contains?\" [!dep_list; val'])))))) then (let () = ignore ((dep_list := sx_append_b !dep_list val'; Nil)) in (signal_add_sub_b (val') (notify_fn))) else Nil)) else Nil))) in (make_cek_value ((signal_value (val'))) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reactive-reset\")])) then (let update_fn = (get (frame) ((String \"update-fn\"))) in let first_p = (get (frame) ((String \"first-render\"))) in (let () = ignore ((if sx_truthy ((let _and = update_fn in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy (first_p)))))) then (cek_call (update_fn) ((List [value]))) else Nil)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop (name))) in (make_cek_value (value) (fenv) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_scope_frame (name) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"provide\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_provide_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope-acc\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((let new_frame = (make_scope_acc_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String \"emitted\") (get (frame) ((String \"emitted\"))))) in new_frame))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"map\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let indexed = (get (frame) ((String \"indexed\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (prim_call \"append\" [results; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let call_args = (if sx_truthy (indexed) then (List [(len (new_results)); (first (remaining))]) else (List [(first (remaining))])) in let next_frame = (if sx_truthy (indexed) then (make_map_indexed_frame (f) ((rest (remaining))) (new_results) (fenv)) else (make_map_frame (f) ((rest (remaining))) (new_results) (fenv))) in (continue_with_call (f) (call_args) (fenv) ((List [])) ((kont_push (next_frame) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"filter\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let current_item = (get (frame) ((String \"current-item\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (if sx_truthy (value) then (prim_call \"append\" [results; (List [current_item])]) else results) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (remaining))) (new_results) ((first (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reduce\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (continue_with_call (f) ((List [value; (first (remaining))])) (fenv) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"for-each\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (Nil) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"some\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy (value) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_some_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"every\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool true)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_every_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"handler\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_handler_frame ((get (frame) ((String \"f\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"restart\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"signal-return\")])) then (let saved_kont = (get (frame) ((String \"f\"))) in (make_cek_value (value) ((get (frame) ((String \"env\")))) (saved_kont))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"comp-trace\")])) then (make_cek_value (value) (env) (rest_k)) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown frame type: \"); ft]))))))))))))))))))))))))))))))))))))))\n\n(* continue-with-call *)\nand continue_with_call f args env raw_args kont =\n (if sx_truthy ((continuation_p (f))) then (let arg = (if sx_truthy ((empty_p (args))) then Nil else (first (args))) in let cont_data = (continuation_data (f)) in (let captured = (get (cont_data) ((String \"captured\"))) in (let result' = (cek_run ((make_cek_value (arg) (env) (captured)))) in (make_cek_value (result') (env) (kont))))) else (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_lambda (f)))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_component (f)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_island (f)))))))))) then (make_cek_value ((sx_apply f args)) (env) (kont)) else (if sx_truthy ((is_lambda (f))) then (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (match !jit_call_hook, f with | Some hook, Lambda l when l.l_name <> None -> let args_list = match args with List a | ListRef { contents = a } -> a | _ -> [] in (match hook f args_list with Some result -> make_cek_value result local kont | None -> make_cek_state (lambda_body f) local kont) | _ -> make_cek_state ((lambda_body (f))) (local) (kont)))))) else (if sx_truthy ((let _or = (is_component (f)) in if sx_truthy _or then _or else (is_island (f)))) then (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (f))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (f))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (f))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_cek_state ((component_body (f))) (local) ((kont_push ((make_comp_trace_frame ((component_name (f))) ((component_file (f))))) (kont))))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Not callable: \"); (inspect (f))])))))))))\n\n(* sf-case-step-loop *)\nand sf_case_step_loop match_val clauses env kont =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state (body) (env) (kont)) else (let test_val = (trampoline ((eval_expr (test) (env)))) in (if sx_truthy ((prim_call \"=\" [match_val; test_val])) then (make_cek_state (body) (env) (kont)) else (sf_case_step_loop (match_val) ((prim_call \"slice\" [clauses; (Number 2.0)])) (env) (kont)))))))\n\n(* eval-expr-cek *)\nand eval_expr_cek expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n(* trampoline-cek *)\nand trampoline_cek val' =\n (if sx_truthy ((is_thunk (val'))) then (eval_expr_cek ((thunk_expr (val'))) ((thunk_env (val')))) else val')\n\n(* eval-expr *)\nand eval_expr expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n\n(* Wire up trampoline to resolve thunks via the CEK machine *)\nlet () = trampoline_fn := (fun v ->\n match v with\n | Thunk (expr, env) -> eval_expr expr (Env env)\n | _ -> v)\n\n(* Wire up the primitives trampoline so call_any in HO forms resolves Thunks *)\nlet () = Sx_primitives._sx_trampoline_fn := !trampoline_fn\n\n(* Collect component trace from a kont value *)\nlet collect_comp_trace kont =\n let trace = ref [] in\n let k = ref kont in\n while (match !k with List (_::_) -> true | _ -> false) do\n (match !k with\n | List (frame :: rest) ->\n (match frame with\n | CekFrame f when f.cf_type = \"comp-trace\" ->\n let name = match f.cf_name with String s -> s | _ -> \"?\" in\n let file = match f.cf_env with String s -> s | Nil -> \"\" | _ -> \"\" in\n trace := (name, file) :: !trace\n | Dict d when (match Hashtbl.find_opt d \"type\" with Some (String \"comp-trace\") -> true | _ -> false) ->\n let name = match Hashtbl.find_opt d \"name\" with Some (String s) -> s | _ -> \"?\" in\n let file = match Hashtbl.find_opt d \"file\" with Some (String s) -> s | _ -> \"\" in\n trace := (name, file) :: !trace\n | _ -> ());\n k := List rest\n | _ -> k := List [])\n done;\n List.rev !trace\n\n(* Format a comp-trace into a human-readable string *)\nlet format_comp_trace trace =\n match trace with\n | [] -> \"\"\n | entries ->\n let lines = List.mapi (fun i (name, file) ->\n let prefix = if i = 0 then \" in \" else \" called from \" in\n if file = \"\" then prefix ^ \"~\" ^ name\n else prefix ^ \"~\" ^ name ^ \" (\" ^ file ^ \")\"\n ) entries in\n \"\n\" ^ String.concat \"\n\" lines\n\n(* Enhance an error message with component trace *)\nlet enhance_error_with_trace msg =\n let trace = collect_comp_trace !_last_error_kont in\n _last_error_kont := Nil;\n msg ^ (format_comp_trace trace)\n\n\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":231108},"map":{"version":3,"sources":["/workspace_root/lib/sx_vm.ml","/builtin/blackbox.ml"],"sourcesContent":["(** SX bytecode VM — stack-based interpreter.\n\n Executes bytecode produced by compiler.sx.\n Designed for speed: array-based stack, direct dispatch,\n no allocation per step (unlike the CEK machine).\n\n This is the platform-native execution engine. The same bytecode\n runs on all platforms (OCaml, JS, WASM).\n\n VM types (vm_code, vm_upvalue_cell, vm_closure) are defined in\n sx_types.ml to share the mutual recursion block with [value]. *)\n\nopen Sx_types\n\n(** Call frame — one per function invocation. *)\ntype frame = {\n closure : vm_closure;\n mutable ip : int;\n base : int; (* base index in value stack for locals *)\n local_cells : (int, vm_upvalue_cell) Hashtbl.t; (* slot → shared cell for captured locals *)\n}\n\n(** VM state. *)\ntype vm = {\n mutable stack : value array;\n mutable sp : int;\n mutable frames : frame list;\n globals : (string, value) Hashtbl.t; (* live reference to kernel env *)\n}\n\n(** Forward reference for JIT compilation — set after definition. *)\nlet jit_compile_ref : (lambda -> (string, value) Hashtbl.t -> vm_closure option) ref =\n ref (fun _ _ -> None)\n\n(** Sentinel closure indicating JIT compilation was attempted and failed.\n Prevents retrying compilation on every call. *)\nlet jit_failed_sentinel = {\n vm_code = { vc_arity = -1; vc_locals = 0; vc_bytecode = [||]; vc_constants = [||] };\n vm_upvalues = [||]; vm_name = Some \"__jit_failed__\"; vm_env_ref = Hashtbl.create 0; vm_closure_env = None\n}\n\nlet is_jit_failed cl = cl.vm_code.vc_arity = -1\n\n(** Current active VM — allows HO primitives (map, filter, for-each, some)\n to call VmClosure callbacks on the same VM instead of creating a new one.\n This is critical: creating a new VM per callback loses the calling VM's\n stack/frame context, causing upvalue-captured host objects to become\n inaccessible. *)\nlet _active_vm : vm option ref = ref None\n\nlet create globals =\n { stack = Array.make 4096 Nil; sp = 0; frames = []; globals }\n\n(** Stack ops — inlined for speed. *)\nlet push vm v =\n if vm.sp >= Array.length vm.stack then begin\n let ns = Array.make (vm.sp * 2) Nil in\n Array.blit vm.stack 0 ns 0 vm.sp;\n vm.stack <- ns\n end;\n vm.stack.(vm.sp) <- v;\n vm.sp <- vm.sp + 1\n\nlet[@inline] pop vm =\n vm.sp <- vm.sp - 1;\n vm.stack.(vm.sp)\n\nlet[@inline] peek vm = vm.stack.(vm.sp - 1)\n\n(** Read operands. *)\nlet[@inline] read_u8 f =\n let v = f.closure.vm_code.vc_bytecode.(f.ip) in\n f.ip <- f.ip + 1; v\n\nlet[@inline] read_u16 f =\n let lo = f.closure.vm_code.vc_bytecode.(f.ip) in\n let hi = f.closure.vm_code.vc_bytecode.(f.ip + 1) in\n f.ip <- f.ip + 2;\n lo lor (hi lsl 8)\n\nlet[@inline] read_i16 f =\n let v = read_u16 f in\n if v >= 32768 then v - 65536 else v\n\n(** Wrap a VM closure as an SX value (NativeFn). *)\nlet closure_to_value cl =\n NativeFn (\"vm:\" ^ (match cl.vm_name with Some n -> n | None -> \"anon\"),\n fun args -> raise (Eval_error (\"VM_CLOSURE_CALL:\" ^ String.concat \",\" (List.map Sx_runtime.value_to_str args))))\n (* Placeholder — actual calls go through vm_call below *)\n\nlet _vm_insn_count = ref 0\nlet _vm_call_count = ref 0\nlet _vm_cek_count = ref 0\nlet vm_reset_counters () = _vm_insn_count := 0; _vm_call_count := 0; _vm_cek_count := 0\nlet vm_report_counters () =\n Printf.eprintf \"[vm-perf] insns=%d calls=%d cek_fallbacks=%d\\n%!\"\n !_vm_insn_count !_vm_call_count !_vm_cek_count\n\n(** Push a VM closure frame onto the current VM — no new VM allocation.\n This is the fast path for intra-VM closure calls. *)\nlet push_closure_frame vm cl args =\n let frame = { closure = cl; ip = 0; base = vm.sp; local_cells = Hashtbl.create 4 } in\n List.iter (fun a -> push vm a) args;\n for _ = List.length args to cl.vm_code.vc_locals - 1 do push vm Nil done;\n vm.frames <- frame :: vm.frames\n\n(** Convert compiler output (SX dict) to a vm_code object. *)\nlet code_from_value v =\n match v with\n | Dict d ->\n let bc_list = match Hashtbl.find_opt d \"bytecode\" with\n | Some (List l | ListRef { contents = l }) ->\n Array.of_list (List.map (fun x -> match x with Number n -> int_of_float n | _ -> 0) l)\n | _ -> [||]\n in\n let entries = match Hashtbl.find_opt d \"constants\" with\n | Some (List l | ListRef { contents = l }) -> Array.of_list l\n | _ -> [||]\n in\n let constants = Array.map (fun entry ->\n match entry with\n | Dict ed when Hashtbl.mem ed \"bytecode\" -> entry (* nested code — convert lazily *)\n | _ -> entry\n ) entries in\n let arity = match Hashtbl.find_opt d \"arity\" with\n | Some (Number n) -> int_of_float n | _ -> 0\n in\n { vc_arity = arity; vc_locals = arity + 16; vc_bytecode = bc_list; vc_constants = constants }\n | _ -> { vc_arity = 0; vc_locals = 16; vc_bytecode = [||]; vc_constants = [||] }\n\n(** Execute a closure with arguments — creates a fresh VM.\n Used for entry points: JIT Lambda calls, module execution, cross-boundary. *)\nlet rec call_closure cl args globals =\n incr _vm_call_count;\n let prev_vm = !_active_vm in\n let vm = create globals in\n _active_vm := Some vm;\n push_closure_frame vm cl args;\n (try run vm with e -> _active_vm := prev_vm; raise e);\n _active_vm := prev_vm;\n pop vm\n\n(** Call a VmClosure on the active VM if one exists, otherwise create a new one.\n This is the path used by HO primitives (map, filter, for-each, some) so\n callbacks can access upvalues that reference the calling VM's state. *)\nand call_closure_reuse cl args =\n call_closure cl args cl.vm_env_ref\n\n(** Call a value as a function — dispatch by type.\n VmClosure: pushes frame on current VM (fast intra-VM path).\n Lambda: tries JIT then falls back to CEK.\n NativeFn: calls directly. *)\nand vm_call vm f args =\n match f with\n | VmClosure cl ->\n (* Fast path: push frame on current VM — no allocation, enables TCO *)\n push_closure_frame vm cl args\n | NativeFn (_name, fn) ->\n let result = fn args in\n push vm result\n | Lambda l ->\n (match l.l_compiled with\n | Some cl when not (is_jit_failed cl) ->\n (* Cached bytecode — run on VM using the closure's captured env,\n not the caller's globals. Closure vars were merged at compile time. *)\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _e ->\n (* Fallback to CEK — data-dependent error, not a JIT bug.\n Dedup logging happens in register_jit_hook. *)\n push vm (Sx_ref.cek_call f (List args)))\n | Some _ ->\n (* Compile failed — CEK *)\n push vm (Sx_ref.cek_call f (List args))\n | None ->\n if l.l_name <> None\n then begin\n (* Pre-mark before compile attempt to prevent re-entrancy *)\n l.l_compiled <- Some jit_failed_sentinel;\n match !jit_compile_ref l vm.globals with\n | Some cl ->\n l.l_compiled <- Some cl;\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _e -> push vm (Sx_ref.cek_call f (List args)))\n | None ->\n push vm (Sx_ref.cek_call f (List args))\n end\n else\n push vm (Sx_ref.cek_call f (List args)))\n | Component _ | Island _ ->\n (* Components use keyword-arg parsing — CEK handles this *)\n incr _vm_cek_count;\n let result = Sx_ref.cek_call f (List args) in\n push vm result\n | _ ->\n raise (Eval_error (\"VM: not callable: \" ^ Sx_runtime.value_to_str f))\n\n(** Main execution loop — iterative (no OCaml stack growth).\n VmClosure calls push frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop. *)\nand run vm =\n while vm.frames <> [] do\n match vm.frames with\n | [] -> () (* guard handled by while condition *)\n | frame :: rest_frames ->\n let bc = frame.closure.vm_code.vc_bytecode in\n let consts = frame.closure.vm_code.vc_constants in\n if frame.ip >= Array.length bc then begin\n (* Bytecode exhausted without explicit RETURN — pop frame like RETURN *)\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n Printf.eprintf \"[vm] WARN: bytecode exhausted without RETURN in %s (base=%d sp=%d frames=%d)\\n%!\"\n fn_name frame.base vm.sp (List.length rest_frames);\n let result = if vm.sp > frame.base then pop vm else Nil in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n if rest_frames <> [] then push vm result\n (* If no more frames, result stays on stack for call_closure to pop *)\n end\n else begin\n let saved_ip = frame.ip in\n let op = bc.(frame.ip) in\n frame.ip <- frame.ip + 1;\n (try match op with\n (* ---- Constants ---- *)\n | 1 (* OP_CONST *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CONST index %d out of bounds (pool size %d)\"\n idx (Array.length consts)));\n push vm consts.(idx)\n | 2 (* OP_NIL *) -> push vm Nil\n | 3 (* OP_TRUE *) -> push vm (Bool true)\n | 4 (* OP_FALSE *) -> push vm (Bool false)\n | 5 (* OP_POP *) -> ignore (pop vm)\n | 6 (* OP_DUP *) -> push vm (peek vm)\n\n (* ---- Variable access ---- *)\n | 16 (* OP_LOCAL_GET *) ->\n let slot = read_u8 frame in\n let v = match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value\n | None ->\n let idx = frame.base + slot in\n if idx >= vm.sp then\n raise (Eval_error (Printf.sprintf\n \"VM: LOCAL_GET slot=%d base=%d sp=%d out of bounds\" slot frame.base vm.sp));\n vm.stack.(idx)\n in\n push vm v\n | 17 (* OP_LOCAL_SET *) ->\n let slot = read_u8 frame in\n let v = peek vm in\n (* Write to shared cell if captured, else to stack *)\n (match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value <- v\n | None -> vm.stack.(frame.base + slot) <- v)\n | 18 (* OP_UPVALUE_GET *) ->\n let idx = read_u8 frame in\n if idx >= Array.length frame.closure.vm_upvalues then\n raise (Eval_error (Printf.sprintf\n \"VM: UPVALUE_GET idx=%d out of bounds (have %d)\" idx\n (Array.length frame.closure.vm_upvalues)));\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 (* OP_UPVALUE_SET *) ->\n let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 (* OP_GLOBAL_GET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n (* Walk the closure env chain for inner functions *)\n let id = Sx_types.intern name in\n let rec env_lookup e =\n try Hashtbl.find e.bindings id\n with Not_found ->\n match e.parent with Some p -> env_lookup p | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n match frame.closure.vm_closure_env with\n | Some env -> env_lookup env\n | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n push vm v\n | 21 (* OP_GLOBAL_SET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n (* Write to closure env if the name exists there (mutable closure vars) *)\n let written = match frame.closure.vm_closure_env with\n | Some env ->\n let id = Sx_types.intern name in\n let rec find_env e =\n if Hashtbl.mem e.bindings id then\n (Hashtbl.replace e.bindings id (peek vm); true)\n else match e.parent with Some p -> find_env p | None -> false\n in find_env env\n | None -> false\n in\n if not written then begin\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with Some f -> f name v | None -> ())\n end\n\n (* ---- Control flow ---- *)\n | 32 (* OP_JUMP *) ->\n let offset = read_i16 frame in\n frame.ip <- frame.ip + offset\n | 33 (* OP_JUMP_IF_FALSE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 (* OP_JUMP_IF_TRUE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n\n (* ---- Function calls ---- *)\n | 48 (* OP_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n vm_call vm f args_list\n (* Loop continues — if VmClosure, new frame runs next iteration *)\n | 49 (* OP_TAIL_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n (* Drop current frame, reuse stack space — true TCO for VmClosure *)\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n vm_call vm f args_list\n | 50 (* OP_RETURN *) ->\n let result = pop vm in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n push vm result\n (* Loop continues with caller frame *)\n | 51 (* OP_CLOSURE *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CLOSURE idx %d >= consts %d\" idx (Array.length consts)));\n let code_val = consts.(idx) in\n let code = code_from_value code_val in\n (* Read upvalue descriptors from bytecode *)\n let uv_count = match code_val with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0\n in\n let upvalues = Array.init uv_count (fun _ ->\n let is_local = read_u8 frame in\n let index = read_u8 frame in\n if is_local = 1 then begin\n (* Capture from enclosing frame's local slot.\n Create a shared cell — both parent and closure\n read/write through this cell. *)\n let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing (* reuse existing cell *)\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c;\n c\n in\n cell\n end else\n (* Capture from enclosing frame's upvalue — already a shared cell *)\n frame.closure.vm_upvalues.(index)\n ) in\n let cl = { vm_code = code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure cl)\n | 52 (* OP_CALL_PRIM *) ->\n let idx = read_u16 frame in\n let argc = read_u8 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\n (* Resolve thunks — the CEK evaluator does this automatically\n via trampoline, but the VM must do it explicitly before\n passing args to primitives. *)\n let args = List.map (fun v ->\n match v with\n | Thunk _ -> !Sx_primitives._sx_trampoline_fn v\n | _ -> v) args in\n let result =\n try\n (* Check primitives FIRST (native implementations of map/filter/etc.),\n then globals (which may have ho_via_cek wrappers that route\n through the CEK — these can't call VM closures). *)\n let fn_val = try Sx_primitives.get_primitive name with _ ->\n try Hashtbl.find vm.globals name with Not_found ->\n raise (Eval_error (\"VM: unknown primitive \" ^ name))\n in\n (match fn_val with\n | NativeFn (_, fn) -> fn args\n | VmClosure _ | Lambda _ | Component _ | Island _ ->\n Sx_ref.cek_call fn_val (List args)\n | _ -> Nil)\n with Eval_error msg ->\n raise (Eval_error (Printf.sprintf \"%s (in CALL_PRIM \\\"%s\\\" with %d args)\"\n msg name argc))\n in\n push vm result\n\n (* ---- Collections ---- *)\n | 64 (* OP_LIST *) ->\n let count = read_u16 frame in\n let items = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (List items)\n | 65 (* OP_DICT *) ->\n let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do\n let v = pop vm in\n let k = pop vm in\n let key = match k with String s -> s | Keyword s -> s | _ -> Sx_runtime.value_to_str k in\n Hashtbl.replace d key v\n done;\n push vm (Dict d)\n\n (* ---- String ops ---- *)\n | 144 (* OP_STR_CONCAT *) ->\n let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n let s = String.concat \"\" (List.map Sx_runtime.value_to_str parts) in\n push vm (String s)\n\n (* ---- Define ---- *)\n | 128 (* OP_DEFINE *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with\n | Some f -> f name v | None -> ())\n\n (* ---- Inline primitives ----\n Fast path for common types; fallback to actual primitive\n for edge cases (type coercion, thunks, RawHTML, etc.)\n to guarantee behavioral parity with CALL_PRIM. *)\n | 160 (* OP_ADD *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x +. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"+\") [a; b])\n | 161 (* OP_SUB *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x -. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [a; b])\n | 162 (* OP_MUL *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x *. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"*\") [a; b])\n | 163 (* OP_DIV *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x /. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"/\") [a; b])\n | 164 (* OP_EQ *) ->\n let b = pop vm and a = pop vm in\n let rec norm = function\n | ListRef { contents = l } -> List (List.map norm l)\n | List l -> List (List.map norm l) | v -> v in\n push vm (Bool (norm a = norm b))\n | 165 (* OP_LT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x < y)\n | String x, String y -> Bool (x < y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"<\") [a; b])\n | 166 (* OP_GT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x > y)\n | String x, String y -> Bool (x > y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \">\") [a; b])\n | 167 (* OP_NOT *) ->\n let v = pop vm in\n push vm (Bool (not (sx_truthy v)))\n | 168 (* OP_LEN *) ->\n let v = pop vm in\n push vm (match v with\n | List l | ListRef { contents = l } -> Number (float_of_int (List.length l))\n | String s -> Number (float_of_int (String.length s))\n | Dict d -> Number (float_of_int (Hashtbl.length d))\n | Nil -> Number 0.0\n | _ -> (Hashtbl.find Sx_primitives.primitives \"len\") [v])\n | 169 (* OP_FIRST *) ->\n let v = pop vm in\n push vm (match v with\n | List (x :: _) | ListRef { contents = x :: _ } -> x\n | List [] | ListRef { contents = [] } | Nil -> Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"first\") [v])\n | 170 (* OP_REST *) ->\n let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs\n | List [] | ListRef { contents = [] } | Nil -> List []\n | _ -> (Hashtbl.find Sx_primitives.primitives \"rest\") [v])\n | 171 (* OP_NTH *) ->\n let n = pop vm and coll = pop vm in\n push vm (match coll, n with\n | (List l | ListRef { contents = l }), Number f ->\n (try List.nth l (int_of_float f) with _ -> Nil)\n | String s, Number f ->\n let i = int_of_float f in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"nth\") [coll; n])\n | 172 (* OP_CONS *) ->\n let coll = pop vm and x = pop vm in\n push vm (match coll with\n | List l -> List (x :: l)\n | ListRef { contents = l } -> List (x :: l)\n | Nil -> List [x]\n | _ -> (Hashtbl.find Sx_primitives.primitives \"cons\") [x; coll])\n | 173 (* OP_NEG *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (-.x)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [v])\n | 174 (* OP_INC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x +. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"inc\") [v])\n | 175 (* OP_DEC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x -. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"dec\") [v])\n\n | opcode ->\n raise (Eval_error (Printf.sprintf \"VM: unknown opcode %d at ip=%d\"\n opcode (frame.ip - 1)))\n with Invalid_argument msg ->\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n raise (Eval_error (Printf.sprintf\n \"VM: %s at ip=%d op=%d in %s (base=%d sp=%d bc_len=%d consts=%d)\"\n msg saved_ip op fn_name frame.base vm.sp\n (Array.length bc) (Array.length consts))))\n end\n done\n\n(** Execute a compiled module (top-level bytecode). *)\nlet execute_module code globals =\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"module\"; vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame = { closure = cl; ip = 0; base = 0; local_cells = Hashtbl.create 4 } in\n for _ = 0 to code.vc_locals - 1 do push vm Nil done;\n vm.frames <- [frame];\n run vm;\n pop vm\n\n\n(** {1 Lazy JIT compilation} *)\n\n(** Compile a lambda or component body to bytecode using the SX compiler.\n Invokes [compile] from spec/compiler.sx via the CEK machine.\n Returns a [vm_closure] ready for execution, or [None] on failure\n (safe fallback to CEK interpretation).\n\n The compilation cost is a single CEK evaluation of the compiler —\n microseconds per function. The result is cached in the lambda/component\n record so subsequent calls go straight to the VM. *)\nlet jit_compile_lambda (l : lambda) globals =\n let fn_name = match l.l_name with Some n -> n | None -> \"\" in\n try\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"JIT: compiler not loaded\") in\n (* Reconstruct the (fn (params) body) form so the compiler produces\n a proper closure. l.l_body is the inner body; we need the full\n function form with params so the compiled code binds them. *)\n let param_syms = List (List.map (fun s -> Symbol s) l.l_params) in\n let fn_expr = List [Symbol \"fn\"; param_syms; l.l_body] in\n let quoted = List [Symbol \"quote\"; fn_expr] in\n (* Use Symbol \"compile\" so the CEK resolves it from the env, not\n an embedded VmClosure value — the CEK dispatches VmClosure calls\n differently when the value is resolved from env vs embedded in AST. *)\n ignore compile_fn;\n let compile_env = Sx_types.env_extend (Sx_types.make_env ()) in\n Hashtbl.iter (fun k v -> Hashtbl.replace compile_env.bindings (Sx_types.intern k) v) globals;\n let result = Sx_ref.eval_expr (List [Symbol \"compile\"; quoted]) (Env compile_env) in\n (* Closure vars are accessible via vm_closure_env (set on the VmClosure\n at line ~617). OP_GLOBAL_GET falls back to vm_closure_env when vars\n aren't in globals. No injection into the shared globals table —\n that would break closure isolation for factory functions like\n make-page-fn where multiple closures capture different values\n for the same variable names. *)\n let effective_globals = globals in\n (match result with\n | Dict d when Hashtbl.mem d \"bytecode\" ->\n let outer_code = code_from_value result in\n let bc = outer_code.vc_bytecode in\n if Array.length bc >= 4 && bc.(0) = 51 (* OP_CLOSURE *) then begin\n let idx = bc.(1) lor (bc.(2) lsl 8) in\n if idx < Array.length outer_code.vc_constants then\n let inner_val = outer_code.vc_constants.(idx) in\n let code = code_from_value inner_val in\n Some { vm_code = code; vm_upvalues = [||];\n vm_name = l.l_name; vm_env_ref = effective_globals; vm_closure_env = Some l.l_closure }\n else begin\n Printf.eprintf \"[jit] FAIL %s: closure index %d out of bounds (pool=%d)\\n%!\"\n fn_name idx (Array.length outer_code.vc_constants);\n\n None\n end\n end else begin\n (* Not a closure — constant expression, alias, or simple computation.\n Execute the bytecode as a module to get the value, then wrap\n as a NativeFn if it's callable (so the CEK can dispatch to it). *)\n (try\n let value = execute_module outer_code globals in\n Printf.eprintf \"[jit] RESOLVED %s: %s (bc[0]=%d)\\n%!\"\n fn_name (type_of value) (if Array.length bc > 0 then bc.(0) else -1);\n (* If the resolved value is a NativeFn, we can't wrap it as a\n vm_closure — just let the CEK handle it directly. Return None\n so the lambda falls through to CEK, which will find the\n resolved value in the env on next lookup. *)\n None\n with _ ->\n Printf.eprintf \"[jit] SKIP %s: non-closure execution failed (bc[0]=%d, len=%d)\\n%!\"\n fn_name (if Array.length bc > 0 then bc.(0) else -1) (Array.length bc);\n None)\n end\n | _ ->\n Printf.eprintf \"[jit] FAIL %s: compiler returned %s\\n%!\" fn_name (type_of result);\n None)\n with e ->\n Printf.eprintf \"[jit] FAIL %s: %s\\n%!\" fn_name (Printexc.to_string e);\n None\n\n(* Wire up forward references *)\nlet () = jit_compile_ref := jit_compile_lambda\nlet () = _vm_call_closure_ref := (fun cl args -> call_closure cl args cl.vm_env_ref)\n\n\n(** {1 Debugging / introspection} *)\n\n(** Map opcode integer to human-readable name. *)\nlet opcode_name = function\n | 1 -> \"CONST\" | 2 -> \"NIL\" | 3 -> \"TRUE\" | 4 -> \"FALSE\"\n | 5 -> \"POP\" | 6 -> \"DUP\"\n | 16 -> \"LOCAL_GET\" | 17 -> \"LOCAL_SET\"\n | 18 -> \"UPVALUE_GET\" | 19 -> \"UPVALUE_SET\"\n | 20 -> \"GLOBAL_GET\" | 21 -> \"GLOBAL_SET\"\n | 32 -> \"JUMP\" | 33 -> \"JUMP_IF_FALSE\" | 34 -> \"JUMP_IF_TRUE\"\n | 48 -> \"CALL\" | 49 -> \"TAIL_CALL\" | 50 -> \"RETURN\"\n | 51 -> \"CLOSURE\" | 52 -> \"CALL_PRIM\"\n | 64 -> \"LIST\" | 65 -> \"DICT\"\n | 128 -> \"DEFINE\"\n | 144 -> \"STR_CONCAT\"\n | 160 -> \"ADD\" | 161 -> \"SUB\" | 162 -> \"MUL\" | 163 -> \"DIV\"\n | 164 -> \"EQ\" | 165 -> \"LT\" | 166 -> \"GT\" | 167 -> \"NOT\"\n | 168 -> \"LEN\" | 169 -> \"FIRST\" | 170 -> \"REST\" | 171 -> \"NTH\"\n | 172 -> \"CONS\" | 173 -> \"NEG\" | 174 -> \"INC\" | 175 -> \"DEC\"\n | n -> Printf.sprintf \"UNKNOWN_%d\" n\n\n(** Number of extra operand bytes consumed by each opcode.\n Returns (format, total_bytes) where format describes the operand types. *)\nlet opcode_operand_size = function\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 64 (* LIST *) | 65 (* DICT *) | 128 (* DEFINE *) -> 2 (* u16 *)\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) -> 1 (* u8 *)\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) -> 2 (* i16 *)\n | 51 (* CLOSURE *) -> 2 (* u16 for constant index; upvalue descriptors follow dynamically *)\n | 52 (* CALL_PRIM *) -> 3 (* u16 + u8 *)\n | _ -> 0 (* no operand *)\n\n(** Trace a single execution — compile + run, collecting trace entries.\n Each entry is a dict with :opcode, :stack, :depth. *)\nlet trace_run src globals =\n (* Compile *)\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"trace: compiler not loaded\") in\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with [e] -> e | _ -> List (Symbol \"do\" :: exprs) in\n let quoted = List [Symbol \"quote\"; expr] in\n let code_val = Sx_ref.eval_expr (List [compile_fn; quoted]) (Env (make_env ())) in\n let code = code_from_value code_val in\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"trace\";\n vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame0 = { closure = cl; ip = 0; base = 0; local_cells = Hashtbl.create 4 } in\n for _ = 0 to code.vc_locals - 1 do push vm Nil done;\n vm.frames <- [frame0];\n (* Run with tracing *)\n let trace = ref [] in\n let max_steps = 10000 in\n let steps = ref 0 in\n (try\n while vm.frames <> [] && !steps < max_steps do\n match vm.frames with\n | [] -> ()\n | frame :: _ ->\n let bc = frame.closure.vm_code.vc_bytecode in\n if frame.ip >= Array.length bc then\n vm.frames <- []\n else begin\n let op = bc.(frame.ip) in\n (* Snapshot stack top 5 *)\n let stack_snap = List.init (min 5 vm.sp) (fun i ->\n let v = vm.stack.(vm.sp - 1 - i) in\n String (Sx_types.inspect v)) in\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"opcode\" (String (opcode_name op));\n Hashtbl.replace entry \"stack\" (List stack_snap);\n Hashtbl.replace entry \"depth\" (Number (float_of_int (List.length vm.frames)));\n trace := Dict entry :: !trace;\n incr steps;\n (* Execute one step — use the main run loop for 1 step.\n We do this by saving the state and running the original dispatch. *)\n let saved_ip = frame.ip in\n frame.ip <- frame.ip + 1;\n let rest_frames = List.tl vm.frames in\n (try match op with\n | 1 -> let idx = read_u16 frame in push vm frame.closure.vm_code.vc_constants.(idx)\n | 2 -> push vm Nil\n | 3 -> push vm (Bool true)\n | 4 -> push vm (Bool false)\n | 5 -> ignore (pop vm)\n | 6 -> push vm (peek vm)\n | 16 -> let slot = read_u8 frame in\n let v = match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value\n | None -> vm.stack.(frame.base + slot) in\n push vm v\n | 17 -> let slot = read_u8 frame in let v = peek vm in\n (match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value <- v\n | None -> vm.stack.(frame.base + slot) <- v)\n | 18 -> let idx = read_u8 frame in\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 -> let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n try Sx_primitives.get_primitive name with _ ->\n raise (Eval_error (\"VM undefined: \" ^ name)) in\n push vm v\n | 21 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 32 -> let offset = read_i16 frame in frame.ip <- frame.ip + offset\n | 33 -> let offset = read_i16 frame in let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 -> let offset = read_i16 frame in let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n | 48 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm_call vm f (List.rev (Array.to_list args))\n | 49 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base;\n vm_call vm f (List.rev (Array.to_list args))\n | 50 -> let result = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base; push vm result\n | 51 -> (* CLOSURE — skip for trace, just advance past upvalue descriptors *)\n let idx = read_u16 frame in\n let code_val2 = frame.closure.vm_code.vc_constants.(idx) in\n let uv_count = match code_val2 with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n let upvalues = Array.init uv_count (fun _ ->\n let is_local = read_u8 frame in\n let index = read_u8 frame in\n if is_local = 1 then begin\n let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c; c in\n cell\n end else frame.closure.vm_upvalues.(index)\n ) in\n let inner_code = code_from_value code_val2 in\n let c = { vm_code = inner_code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure c)\n | 52 -> let idx = read_u16 frame in let argc = read_u8 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\n let fn_val = try Sx_primitives.get_primitive name with _ ->\n try Hashtbl.find vm.globals name with Not_found ->\n raise (Eval_error (\"VM: unknown primitive \" ^ name)) in\n (match fn_val with NativeFn (_, fn) -> push vm (fn args) | _ -> push vm Nil)\n | 64 -> let count = read_u16 frame in\n let items = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (List items)\n | 65 -> let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do let v = pop vm in let k = pop vm in\n let key = match k with String s -> s | Keyword s -> s | _ -> Sx_runtime.value_to_str k in\n Hashtbl.replace d key v done;\n push vm (Dict d)\n | 128 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 144 -> let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (String (String.concat \"\" (List.map Sx_runtime.value_to_str parts)))\n | 160 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x +. y) | _ -> Nil)\n | 161 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x -. y) | _ -> Nil)\n | 162 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x *. y) | _ -> Nil)\n | 163 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x /. y) | _ -> Nil)\n | 164 -> let b = pop vm and a = pop vm in push vm (Bool (a = b))\n | 165 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x < y) | _ -> Bool false)\n | 166 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x > y) | _ -> Bool false)\n | 167 -> let v = pop vm in push vm (Bool (not (sx_truthy v)))\n | 168 -> let v = pop vm in\n push vm (match v with\n | List l | ListRef { contents = l } -> Number (float_of_int (List.length l))\n | String s -> Number (float_of_int (String.length s))\n | _ -> Number 0.0)\n | 169 -> let v = pop vm in\n push vm (match v with List (x :: _) | ListRef { contents = x :: _ } -> x | _ -> Nil)\n | 170 -> let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs | _ -> List [])\n | 171 -> let n = pop vm and coll = pop vm in\n push vm (match coll, n with\n | (List l | ListRef { contents = l }), Number f ->\n (try List.nth l (int_of_float f) with _ -> Nil) | _ -> Nil)\n | 172 -> let coll = pop vm and x = pop vm in\n push vm (match coll with List l -> List (x :: l) | _ -> List [x])\n | 173 -> let v = pop vm in\n push vm (match v with Number x -> Number (-.x) | _ -> Nil)\n | 174 -> let v = pop vm in\n push vm (match v with Number x -> Number (x +. 1.0) | _ -> Nil)\n | 175 -> let v = pop vm in\n push vm (match v with Number x -> Number (x -. 1.0) | _ -> Nil)\n | _ -> ()\n with e ->\n let _ = e in\n ignore saved_ip;\n (* On error during trace, just stop *)\n vm.frames <- [])\n end\n done\n with _ -> ());\n List (List.rev !trace)\n\n(** Disassemble a vm_code into a list of instruction dicts. *)\nlet disassemble (code : vm_code) =\n let bc = code.vc_bytecode in\n let len = Array.length bc in\n let consts = code.vc_constants in\n let instrs = ref [] in\n let ip = ref 0 in\n while !ip < len do\n let offset = !ip in\n let op = bc.(!ip) in\n ip := !ip + 1;\n let name = opcode_name op in\n let operands = ref [] in\n (match op with\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 128 (* DEFINE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n let const_str = if idx < Array.length consts\n then Sx_types.inspect consts.(idx) else \"?\" in\n operands := [Number (float_of_int idx); String const_str]\n end\n | 64 (* LIST *) | 65 (* DICT *) | 51 (* CLOSURE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n operands := [Number (float_of_int idx)];\n (* For CLOSURE, skip upvalue descriptors *)\n if op = 51 && idx < Array.length consts then begin\n let uv_count = match consts.(idx) with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n ip := !ip + uv_count * 2\n end\n end\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) ->\n if !ip < len then begin\n let v = bc.(!ip) in ip := !ip + 1;\n operands := [Number (float_of_int v)]\n end\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let raw = lo lor (hi lsl 8) in\n let signed = if raw >= 32768 then raw - 65536 else raw in\n ip := !ip + 2;\n operands := [Number (float_of_int signed)]\n end\n | 52 (* CALL_PRIM *) ->\n if !ip + 2 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n let argc = bc.(!ip + 2) in\n ip := !ip + 3;\n let prim_name = if idx < Array.length consts\n then (match consts.(idx) with String s -> s | _ -> \"?\") else \"?\" in\n operands := [Number (float_of_int idx); String prim_name; Number (float_of_int argc)]\n end\n | _ -> ());\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"offset\" (Number (float_of_int offset));\n Hashtbl.replace entry \"opcode\" (String name);\n Hashtbl.replace entry \"operands\" (List !operands);\n instrs := Dict entry :: !instrs\n done;\n let result = Hashtbl.create 4 in\n Hashtbl.replace result \"arity\" (Number (float_of_int code.vc_arity));\n Hashtbl.replace result \"num_locals\" (Number (float_of_int code.vc_locals));\n Hashtbl.replace result \"constants\" (List (Array.to_list (Array.map (fun v -> String (Sx_types.inspect v)) consts)));\n Hashtbl.replace result \"bytecode\" (List (List.rev !instrs));\n Dict result\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":256701},"map":{"version":3,"sources":["/workspace_root/lib/sx_scope.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Scope stacks — dynamic scope for render-time effects.\n\n Provides scope-push!/pop!/peek, collect!/collected/clear-collected!,\n scope-emit!/emitted/scope-emitted, context, and cookie access.\n\n All functions are registered as primitives so both the CEK evaluator\n and the JIT VM can find them in the same place. *)\n\nopen Sx_types\n\n(** The shared scope stacks hashtable. Each key maps to a stack of values.\n Used by aser for spread/provide/emit patterns, CSSX collect/flush, etc. *)\nlet scope_stacks : (string, value list) Hashtbl.t = Hashtbl.create 8\n\n(** Debug trace for scope operations — enabled from JS *)\nlet _scope_trace = ref false\nlet _scope_log : string list ref = ref []\nlet scope_trace_enable () = _scope_trace := true; _scope_log := []\nlet scope_trace_disable () = _scope_trace := false\nlet scope_trace_drain () =\n let log = List.rev !_scope_log in\n _scope_log := [];\n log\n\n(** Request cookies — set by the Python bridge before each render.\n get-cookie reads from here; set-cookie is a no-op on the server. *)\nlet request_cookies : (string, string) Hashtbl.t = Hashtbl.create 8\n\n(** Clear all scope stacks. Called between requests if needed. *)\nlet clear_all () = Hashtbl.clear scope_stacks\n\nlet () =\n let register = Sx_primitives.register in\n\n (* --- Cookies --- *)\n\n register \"get-cookie\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt request_cookies name with\n | Some v -> String v\n | None -> Nil)\n | _ -> Nil);\n\n register \"set-cookie\" (fun _args -> Nil);\n\n (* --- Core scope stack operations --- *)\n\n register \"scope-push!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"PUSH %s depth=%d->%d\" name (List.length stack) (List.length stack + 1) :: !_scope_log;\n Hashtbl.replace scope_stacks name (value :: stack); Nil\n | _ -> Nil);\n\n register \"scope-pop!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"POP %s depth=%d->%d\" name (List.length stack) (max 0 (List.length stack - 1)) :: !_scope_log;\n (match stack with _ :: rest -> Hashtbl.replace scope_stacks name rest | [] -> ()); Nil\n | _ -> Nil);\n\n register \"scope-peek\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"PEEK %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with v :: _ -> v | [] -> Nil)\n | _ -> Nil);\n\n (* --- Context (scope lookup with optional default) --- *)\n\n register \"context\" (fun args ->\n match args with\n | (String name) :: rest ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"CTX %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with\n | v :: _ -> v\n | [] -> (match rest with default_val :: _ -> default_val | [] -> Nil))\n | _ -> Nil);\n\n register \"context-debug\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n let all_keys = Hashtbl.fold (fun k _ acc -> k :: acc) scope_stacks [] in\n String (Printf.sprintf \"name=%s stack_len=%d all_keys=[%s]\"\n name (List.length stack) (String.concat \",\" all_keys))\n | _ -> String \"bad args\");\n\n (* --- Collect / collected / clear-collected! --- *)\n\n register \"collect!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n if not (List.mem value items) then\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"collected\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"clear-collected!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | _ :: rest -> Hashtbl.replace scope_stacks name (List [] :: rest)\n | [] -> Hashtbl.replace scope_stacks name [List []]);\n Nil\n | _ -> Nil);\n\n (* --- Emit / emitted (for spread attrs in adapter-html.sx) --- *)\n\n register \"scope-emit!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | Nil :: rest ->\n Hashtbl.replace scope_stacks name (List [value] :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"emit!\" (fun args ->\n (* Alias for scope-emit! *)\n match Sx_primitives.get_primitive \"scope-emit!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"emitted\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"scope-emitted\" (fun args ->\n match Sx_primitives.get_primitive \"emitted\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-collected\" (fun args ->\n match Sx_primitives.get_primitive \"collected\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-clear-collected!\" (fun args ->\n match Sx_primitives.get_primitive \"clear-collected!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n (* --- Provide aliases --- *)\n\n register \"provide-push!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-push!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"provide-pop!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-pop!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil)\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":262165},"map":{"version":3,"sources":["/workspace_root/lib/sx_render.ml","/builtin/blackbox.ml"],"sourcesContent":["(** HTML renderer for SX values.\n\n Extracted from run_tests.ml — renders an SX expression tree to an\n HTML string, expanding components and macros along the way.\n\n Depends on [Sx_ref.eval_expr] for evaluating sub-expressions\n during rendering (keyword arg values, conditionals, etc.). *)\n\nopen Sx_types\n\n(* ====================================================================== *)\n(* Tag / attribute registries *)\n(* ====================================================================== *)\n\nlet html_tags = [\n \"html\"; \"head\"; \"body\"; \"title\"; \"meta\"; \"link\"; \"script\"; \"style\"; \"noscript\";\n \"header\"; \"nav\"; \"main\"; \"section\"; \"article\"; \"aside\"; \"footer\";\n \"h1\"; \"h2\"; \"h3\"; \"h4\"; \"h5\"; \"h6\"; \"hgroup\";\n \"div\"; \"p\"; \"blockquote\"; \"pre\"; \"figure\"; \"figcaption\"; \"address\"; \"hr\";\n \"ul\"; \"ol\"; \"li\"; \"dl\"; \"dt\"; \"dd\"; \"menu\";\n \"a\"; \"span\"; \"em\"; \"strong\"; \"small\"; \"b\"; \"i\"; \"u\"; \"s\"; \"sub\"; \"sup\";\n \"mark\"; \"del\"; \"ins\"; \"q\"; \"cite\"; \"dfn\"; \"abbr\"; \"code\"; \"var\"; \"samp\";\n \"kbd\"; \"data\"; \"time\"; \"ruby\"; \"rt\"; \"rp\"; \"bdi\"; \"bdo\"; \"wbr\"; \"br\";\n \"table\"; \"thead\"; \"tbody\"; \"tfoot\"; \"tr\"; \"th\"; \"td\"; \"caption\"; \"colgroup\"; \"col\";\n \"form\"; \"input\"; \"textarea\"; \"select\"; \"option\"; \"optgroup\"; \"button\"; \"label\";\n \"fieldset\"; \"legend\"; \"datalist\"; \"output\"; \"progress\"; \"meter\";\n \"details\"; \"summary\"; \"dialog\";\n \"img\"; \"video\"; \"audio\"; \"source\"; \"picture\"; \"canvas\"; \"iframe\"; \"embed\"; \"object\"; \"param\";\n \"svg\"; \"path\"; \"circle\"; \"rect\"; \"line\"; \"polyline\"; \"polygon\"; \"ellipse\";\n \"g\"; \"defs\"; \"use\"; \"text\"; \"tspan\"; \"clipPath\"; \"mask\"; \"pattern\";\n \"linearGradient\"; \"radialGradient\"; \"stop\"; \"filter\"; \"feBlend\"; \"feFlood\";\n \"feGaussianBlur\"; \"feOffset\"; \"feMerge\"; \"feMergeNode\"; \"feComposite\";\n \"template\"; \"slot\";\n]\n\nlet void_elements = [\n \"area\"; \"base\"; \"br\"; \"col\"; \"embed\"; \"hr\"; \"img\"; \"input\";\n \"link\"; \"meta\"; \"param\"; \"source\"; \"track\"; \"wbr\"\n]\n\nlet boolean_attrs = [\n \"async\"; \"autofocus\"; \"autoplay\"; \"checked\"; \"controls\"; \"default\";\n \"defer\"; \"disabled\"; \"formnovalidate\"; \"hidden\"; \"inert\"; \"ismap\";\n \"loop\"; \"multiple\"; \"muted\"; \"nomodule\"; \"novalidate\"; \"open\";\n \"playsinline\"; \"readonly\"; \"required\"; \"reversed\"; \"selected\"\n]\n\nlet is_html_tag name = List.mem name html_tags\nlet is_void name = List.mem name void_elements\nlet is_boolean_attr name = List.mem name boolean_attrs\n\n\n(* ====================================================================== *)\n(* HTML escaping *)\n(* ====================================================================== *)\n\nlet escape_html s =\n let buf = Buffer.create (String.length s) in\n String.iter (function\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c) s;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* Attribute rendering *)\n(* ====================================================================== *)\n\nlet render_attrs attrs =\n let buf = Buffer.create 64 in\n Hashtbl.iter (fun k v ->\n if is_boolean_attr k then begin\n if sx_truthy v then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k\n end\n end else if not (is_nil v) then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k;\n Buffer.add_string buf \"=\\\"\";\n Buffer.add_string buf (escape_html (value_to_string v));\n Buffer.add_char buf '\"'\n end) attrs;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* HTML renderer *)\n(* ====================================================================== *)\n\n(* Forward ref — resolved at setup time *)\nlet render_to_html_ref : (value -> env -> string) ref =\n ref (fun _expr _env -> \"\")\n\nlet render_to_html expr env = !render_to_html_ref expr env\n\n(** Render via the SX adapter (render-to-html from adapter-html.sx).\n Falls back to the native ref if the SX adapter isn't loaded. *)\nlet sx_render_to_html render_env expr eval_env =\n if env_has render_env \"render-to-html\" then\n let fn = env_get render_env \"render-to-html\" in\n let result = Sx_ref.cek_call fn (List [expr; Env eval_env]) in\n match result with String s -> s | RawHTML s -> s | _ -> Sx_runtime.value_to_str result\n else\n render_to_html expr eval_env\n\nlet render_children children env =\n String.concat \"\" (List.map (fun c -> render_to_html c env) children)\n\n(** Parse keyword attrs and positional children from an element call's args.\n Attrs are evaluated; children are returned UNEVALUATED for render dispatch. *)\nlet parse_element_args args env =\n let attrs = Hashtbl.create 8 in\n let children = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace attrs k v;\n skip := true\n | Spread pairs ->\n List.iter (fun (k, v) -> Hashtbl.replace attrs k v) pairs\n | _ ->\n children := arg :: !children\n ) args;\n (attrs, List.rev !children)\n\nlet render_html_element tag args env =\n let (attrs, children) = parse_element_args args env in\n let attr_str = render_attrs attrs in\n if is_void tag then\n \"<\" ^ tag ^ attr_str ^ \" />\"\n else\n let content = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n \"<\" ^ tag ^ attr_str ^ \">\" ^ content ^ \"\"\n\nlet render_component comp args env =\n match comp with\n | Component c ->\n let kwargs = Hashtbl.create 8 in\n let children_exprs = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace kwargs k v;\n skip := true\n | _ ->\n children_exprs := arg :: !children_exprs\n ) args;\n let children = List.rev !children_exprs in\n let local = env_merge c.c_closure env in\n List.iter (fun p ->\n let v = match Hashtbl.find_opt kwargs p with Some v -> v | None -> Nil in\n ignore (env_bind local p v)\n ) c.c_params;\n if c.c_has_children then begin\n let rendered_children = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n ignore (env_bind local \"children\" (RawHTML rendered_children))\n end;\n render_to_html c.c_body local\n | _ -> \"\"\n\nlet expand_macro (m : macro) args _env =\n let local = env_extend m.m_closure in\n let params = m.m_params in\n let rec bind_params ps as' =\n match ps, as' with\n | [], rest ->\n (match m.m_rest_param with\n | Some rp -> ignore (env_bind local rp (List rest))\n | None -> ())\n | p :: ps_rest, a :: as_rest ->\n ignore (env_bind local p a);\n bind_params ps_rest as_rest\n | _ :: _, [] ->\n List.iter (fun p -> ignore (env_bind local p Nil)) (List.rev ps)\n in\n bind_params params args;\n Sx_ref.eval_expr m.m_body (Env local)\n\nlet rec do_render_to_html (expr : value) (env : env) : string =\n match expr with\n | Nil -> \"\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s -> escape_html s\n | Keyword k -> escape_html k\n | RawHTML s -> s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n do_render_to_html v env\n | List [] | ListRef { contents = [] } -> \"\"\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_to_html head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n do_render_to_html v env\n\nand render_list_to_html head args env =\n match head with\n | Symbol \"<>\" ->\n render_children args env\n | Symbol \"raw!\" ->\n (* Inject pre-rendered HTML without escaping *)\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> s\n | _ -> value_to_string v)\n | Symbol tag when is_html_tag tag ->\n render_html_element tag args env\n | Symbol \"if\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n (if List.length args > 1 then do_render_to_html (List.nth args 1) env else \"\")\n else\n (if List.length args > 2 then do_render_to_html (List.nth args 2) env else \"\")\n | Symbol \"when\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n String.concat \"\" (List.map (fun e -> do_render_to_html e env) (List.tl args))\n else \"\"\n | Symbol \"cond\" ->\n render_cond args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol (\"let\" | \"let*\") ->\n render_let args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> \"\"\n | [last] -> do_render_to_html last env\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env env));\n go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env));\n \"\"\n | Symbol \"map\" ->\n render_map args env false\n | Symbol \"map-indexed\" ->\n render_map args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol \"for-each\" ->\n render_for_each args env\n | Symbol name ->\n (try\n let v = env_get env name in\n (match v with\n | Component c when c.c_affinity = \"client\" -> \"\" (* skip client-only *)\n | Component _ -> render_component v args env\n | Island _i ->\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Printf.sprintf \"%s\" _i.i_name call_sx\n | Macro m ->\n let expanded = expand_macro m args env in\n do_render_to_html expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env)\n with Eval_error _ -> \"\")\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env\n\nand render_cond args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let is_scheme = List.for_all (fun a -> match as_list a with\n | Some items when List.length items = 2 -> true\n | _ -> false) args\n in\n if is_scheme then begin\n let rec go = function\n | [] -> \"\"\n | clause :: rest ->\n (match as_list clause with\n | Some [test; body] ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n | _ -> \"\")\n in go args\n end else begin\n let rec go = function\n | [] -> \"\"\n | [_] -> \"\"\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n in go args\n end\n\nand render_let args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let bindings_expr = List.hd args in\n let body = List.tl args in\n let local = env_extend env in\n let bindings = match as_list bindings_expr with Some l -> l | None -> [] in\n let is_scheme = match bindings with\n | (List _ :: _) | (ListRef _ :: _) -> true\n | _ -> false\n in\n if is_scheme then\n List.iter (fun b ->\n match as_list b with\n | Some [Symbol name; expr] | Some [String name; expr] ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v)\n | _ -> ()\n ) bindings\n else begin\n let rec go = function\n | [] -> ()\n | (Symbol name) :: expr :: rest | (String name) :: expr :: rest ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v);\n go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> \"\"\n | [last] -> do_render_to_html last local\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env local));\n render_body rest\n in render_body body\n\nand render_map args env indexed =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.mapi (fun i item ->\n let call_args = if indexed then [Number (float_of_int i); item] else [item] in\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params call_args;\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n do_render_to_html result env\n ) items)\n\nand render_for_each args env =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.map (fun item ->\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params [item];\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n do_render_to_html result env\n ) items)\n\n\n(* ====================================================================== *)\n(* Buffer-based streaming renderer — zero intermediate string allocation *)\n(* ====================================================================== *)\n\n(** Escape HTML directly into a buffer. *)\nlet escape_html_buf buf s =\n for i = 0 to String.length s - 1 do\n match String.unsafe_get s i with\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c\n done\n\n(** Render attributes directly into a buffer. *)\nlet render_attrs_buf buf attrs =\n Hashtbl.iter (fun k v ->\n if is_boolean_attr k then begin\n if sx_truthy v then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k\n end\n end else if not (is_nil v) then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k;\n Buffer.add_string buf \"=\\\"\";\n escape_html_buf buf (value_to_string v);\n Buffer.add_char buf '\"'\n end) attrs\n\n(** Buffer-based render_to_html — writes directly, no intermediate strings. *)\nlet rec render_to_buf buf (expr : value) (env : env) : unit =\n match expr with\n | Nil -> ()\n | Bool true -> Buffer.add_string buf \"true\"\n | Bool false -> Buffer.add_string buf \"false\"\n | Number n ->\n if Float.is_integer n then Buffer.add_string buf (string_of_int (int_of_float n))\n else Buffer.add_string buf (Printf.sprintf \"%g\" n)\n | String s -> escape_html_buf buf s\n | Keyword k -> escape_html_buf buf k\n | RawHTML s -> Buffer.add_string buf s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n render_to_buf buf v env\n | List [] | ListRef { contents = [] } -> ()\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_buf buf head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n render_to_buf buf v env\n\nand render_list_buf buf head args env =\n match head with\n | Symbol \"<>\" ->\n List.iter (fun c -> render_to_buf buf c env) args\n | Symbol \"raw!\" ->\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> Buffer.add_string buf s\n | _ -> Buffer.add_string buf (value_to_string v))\n | Symbol tag when is_html_tag tag ->\n render_element_buf buf tag args env\n | Symbol \"if\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n (if List.length args > 1 then render_to_buf buf (List.nth args 1) env)\n else\n (if List.length args > 2 then render_to_buf buf (List.nth args 2) env)\n | Symbol \"when\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n List.iter (fun e -> render_to_buf buf e env) (List.tl args)\n | Symbol \"cond\" ->\n render_cond_buf buf args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol (\"let\" | \"let*\") ->\n render_let_buf buf args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> ()\n | [last] -> render_to_buf buf last env\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env env)); go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env))\n | Symbol \"map\" -> render_map_buf buf args env false\n | Symbol \"map-indexed\" -> render_map_buf buf args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol \"for-each\" -> render_for_each_buf buf args env\n | Symbol name ->\n (try\n let v = env_get env name in\n (match v with\n | Component c when c.c_affinity = \"client\" -> ()\n | Component _ -> render_component_buf buf v args env\n | Island _i ->\n (* Islands are client-rendered — emit placeholder with SX call\n expression so the client can hydrate from source. *)\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Buffer.add_string buf (Printf.sprintf \"%s\"\n _i.i_name call_sx)\n | Macro m ->\n let expanded = expand_macro m args env in\n render_to_buf buf expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env)\n with Eval_error msg ->\n (* Unknown symbol/component — skip silently during SSR.\n The client will render from page-sx. *)\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n | _ ->\n (try\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env\n with Eval_error msg ->\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n\nand render_element_buf buf tag args env =\n let (attrs, children) = parse_element_args args env in\n Buffer.add_char buf '<';\n Buffer.add_string buf tag;\n render_attrs_buf buf attrs;\n if is_void tag then\n Buffer.add_string buf \" />\"\n else begin\n Buffer.add_char buf '>';\n List.iter (fun c -> render_to_buf buf c env) children;\n Buffer.add_string buf \"'\n end\n\nand render_component_buf buf comp args env =\n match comp with\n | Component c ->\n let kwargs = Hashtbl.create 8 in\n let children_exprs = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace kwargs k v;\n skip := true\n | _ -> children_exprs := arg :: !children_exprs\n ) args;\n let children = List.rev !children_exprs in\n let local = env_merge c.c_closure env in\n List.iter (fun p ->\n let v = match Hashtbl.find_opt kwargs p with Some v -> v | None -> Nil in\n ignore (env_bind local p v)\n ) c.c_params;\n if c.c_has_children then begin\n let child_buf = Buffer.create 256 in\n List.iter (fun c -> render_to_buf child_buf c env) children;\n ignore (env_bind local \"children\" (RawHTML (Buffer.contents child_buf)))\n end;\n render_to_buf buf c.c_body local\n | _ -> ()\n\nand render_cond_buf buf args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let is_scheme = List.for_all (fun a -> match as_list a with\n | Some items when List.length items = 2 -> true | _ -> false) args in\n if is_scheme then begin\n let rec go = function\n | [] -> ()\n | clause :: rest ->\n (match as_list clause with\n | Some [test; body] ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n | _ -> ())\n in go args\n end else begin\n let rec go = function\n | [] -> () | [_] -> ()\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n in go args\n end\n\nand render_let_buf buf args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let bindings_expr = List.hd args in\n let body = List.tl args in\n let local = env_extend env in\n let bindings = match as_list bindings_expr with Some l -> l | None -> [] in\n let is_scheme = match bindings with (List _ :: _) | (ListRef _ :: _) -> true | _ -> false in\n if is_scheme then\n List.iter (fun b ->\n match as_list b with\n | Some [Symbol name; expr] | Some [String name; expr] ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v)\n | _ -> ()\n ) bindings\n else begin\n let rec go = function\n | [] -> ()\n | (Symbol name) :: expr :: rest | (String name) :: expr :: rest ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v); go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> ()\n | [last] -> render_to_buf buf last local\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env local)); render_body rest\n in render_body body\n\nand render_map_buf buf args env indexed =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n List.iteri (fun i item ->\n let call_args = if indexed then [Number (float_of_int i); item] else [item] in\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a)) l.l_params call_args;\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n render_to_buf buf result env\n ) items\n\nand render_for_each_buf buf args env =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n List.iter (fun item ->\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a)) l.l_params [item];\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n render_to_buf buf result env\n ) items\n\n(** Public API: render to a pre-allocated buffer. *)\nlet render_to_buffer buf expr env = render_to_buf buf expr env\n\n(** Convenience: render to string using the buffer renderer. *)\nlet render_to_html_streaming expr env =\n let buf = Buffer.create 65536 in\n render_to_buf buf expr env;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* Setup — bind render primitives in an env and wire up the ref *)\n(* ====================================================================== *)\n\nlet setup_render_env env =\n render_to_html_ref := do_render_to_html;\n\n let bind name fn =\n ignore (env_bind env name (NativeFn (name, fn)))\n in\n\n bind \"render-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\");\n\n bind \"render-to-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":279488},"map":{"version":3,"sources":["/workspace_root/lib/sx_compiler.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_compiler.ml — Auto-generated from lib/compiler.sx *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap_compiler.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* The compiler uses cek_call from the evaluator for runtime dispatch *)\nlet cek_call = Sx_ref.cek_call\nlet eval_expr = Sx_ref.eval_expr\nlet trampoline v = match v with\n | Thunk (expr, env) -> Sx_ref.eval_expr expr (Env env)\n | other -> other\n\n(* Bindings for external functions the compiler calls.\n Some shadow OCaml stdlib names — the SX versions operate on values. *)\nlet serialize v = String (Sx_types.inspect v)\nlet sx_parse v = match v with\n | String s -> (match Sx_parser.parse_all s with [e] -> e | es -> List es)\n | v -> v\nlet floor v = prim_call \"floor\" [v]\nlet abs v = prim_call \"abs\" [v]\nlet min a b = prim_call \"min\" [a; b]\nlet max a b = prim_call \"max\" [a; b]\nlet set_nth_b lst idx v = prim_call \"set-nth!\" [lst; idx; v]\nlet init lst = prim_call \"init\" [lst]\nlet last lst = prim_call \"last\" [lst]\n\n(* skip_annotations: strips :keyword value pairs from a list (type annotations) *)\nlet rec skip_annotations items =\n match items with\n | List [] | Nil -> Nil\n | List (Keyword _ :: _ :: rest) -> skip_annotations (List rest)\n | ListRef { contents = [] } -> Nil\n | ListRef { contents = Keyword _ :: _ :: rest } -> skip_annotations (List rest)\n | List (first :: _) -> first\n | ListRef { contents = first :: _ } -> first\n | _ -> Nil\n\n(* compile_match: uses local recursion (letrec) that the transpiler can't handle.\n Falls back to CEK evaluation at runtime. *)\nlet compile_match em args scope tail_p =\n let fn = Sx_ref.eval_expr (Symbol \"compile-match\") (Env (Sx_types.make_env ())) in\n Sx_ref.cek_call fn (List [em; args; scope; tail_p])\n\n\n(* === Transpiled from bytecode compiler === *)\n(* make-pool *)\nlet rec make_pool () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"entries\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Hashtbl.replace _d \"index\" (let _d = Hashtbl.create 1 in Hashtbl.replace _d \"_count\" (Number 0.0); Dict _d); Dict _d)\n\n(* pool-add *)\nand pool_add pool value =\n (let () = ignore ((String \"Add a value to the constant pool, return its index. Deduplicates.\")) in (let key = (serialize (value)) in let idx_map = (get (pool) ((String \"index\"))) in (if sx_truthy ((prim_call \"has-key?\" [idx_map; key])) then (get (idx_map) (key)) else (let idx = (get (idx_map) ((String \"_count\"))) in (let () = ignore ((sx_dict_set_b idx_map key idx)) in (let () = ignore ((sx_dict_set_b idx_map (String \"_count\") (prim_call \"+\" [idx; (Number 1.0)]))) in (let () = ignore ((sx_append_b (get (pool) ((String \"entries\"))) value)) in idx)))))))\n\n(* make-scope *)\nand make_scope parent =\n (let _d = Hashtbl.create 5 in Hashtbl.replace _d \"next-slot\" (Number 0.0); Hashtbl.replace _d \"upvalues\" (List []); Hashtbl.replace _d \"locals\" (List []); Hashtbl.replace _d \"parent\" parent; Hashtbl.replace _d \"is-function\" (Bool false); Dict _d)\n\n(* scope-define-local *)\nand scope_define_local scope name =\n (let () = ignore ((String \"Add a local variable, return its slot index.\\n Idempotent: if name already has a slot, return it.\")) in (let existing = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list (get (scope) ((String \"locals\")))))))) in (if sx_truthy (existing) then (get (existing) ((String \"slot\"))) else (let slot = (get (scope) ((String \"next-slot\"))) in (let () = ignore ((sx_append_b (get (scope) ((String \"locals\"))) (let _d = Hashtbl.create 3 in Hashtbl.replace _d \"mutable\" (Bool false); Hashtbl.replace _d \"slot\" slot; Hashtbl.replace _d \"name\" name; Dict _d))) in (let () = ignore ((sx_dict_set_b scope (String \"next-slot\") (prim_call \"+\" [slot; (Number 1.0)]))) in slot))))))\n\n(* scope-resolve *)\nand scope_resolve scope name =\n (let () = ignore ((String \"Resolve a variable name. Returns {:type \\\"local\\\"|\\\"upvalue\\\"|\\\"global\\\", :index N}.\\n Upvalue captures only happen at function boundaries (is-function=true).\\n Let scopes share the enclosing function's frame — their locals are\\n accessed directly without upvalue indirection.\")) in (if sx_truthy ((is_nil (scope))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let locals = (get (scope) ((String \"locals\"))) in let found = (Bool (List.exists (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))) in (if sx_truthy (found) then (let local = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))))) in (CekFrame { cf_type = \"local\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let upvals = (get (scope) ((String \"upvalues\"))) in let uv_found = (Bool (List.exists (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))) in (if sx_truthy (uv_found) then (let uv = (first ((List (List.filter (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let parent = (get (scope) ((String \"parent\"))) in (if sx_truthy ((is_nil (parent))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let parent_result = (scope_resolve (parent) (name)) in (if sx_truthy ((prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"global\")])) then parent_result else (if sx_truthy ((get (scope) ((String \"is-function\")))) then (let uv_idx = (len ((get (scope) ((String \"upvalues\"))))) in (let () = ignore ((sx_append_b (get (scope) ((String \"upvalues\"))) (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"index\" (get (parent_result) ((String \"index\"))); Hashtbl.replace _d \"is-local\" (prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"local\")]); Hashtbl.replace _d \"uv-index\" uv_idx; Hashtbl.replace _d \"name\" name; Dict _d))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }))) else parent_result)))))))))))\n\n(* make-emitter *)\nand make_emitter () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"pool\" (make_pool ()); Hashtbl.replace _d \"bytecode\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Dict _d)\n\n(* emit-byte *)\nand emit_byte em byte =\n (sx_append_b (get (em) ((String \"bytecode\"))) byte)\n\n(* emit-u16 *)\nand emit_u16 em value =\n (let () = ignore ((emit_byte (em) ((prim_call \"mod\" [value; (Number 256.0)])))) in (emit_byte (em) ((prim_call \"mod\" [(floor ((prim_call \"/\" [value; (Number 256.0)]))); (Number 256.0)]))))\n\n(* emit-i16 *)\nand emit_i16 em value =\n (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in (emit_u16 (em) (v)))\n\n(* emit-op *)\nand emit_op em opcode =\n (emit_byte (em) (opcode))\n\n(* emit-const *)\nand emit_const em value =\n (let idx = (pool_add ((get (em) ((String \"pool\")))) (value)) in (let () = ignore ((emit_op (em) ((Number 1.0)))) in (emit_u16 (em) (idx))))\n\n(* current-offset *)\nand current_offset em =\n (len ((get (em) ((String \"bytecode\")))))\n\n(* patch-i16 *)\nand patch_i16 em offset value =\n (let () = ignore ((String \"Patch a previously emitted i16 at the given bytecode offset.\")) in (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in let bc = (get (em) ((String \"bytecode\"))) in (let () = ignore ((set_nth_b (bc) (offset) ((prim_call \"mod\" [v; (Number 256.0)])))) in (set_nth_b (bc) ((prim_call \"+\" [offset; (Number 1.0)])) ((prim_call \"mod\" [(floor ((prim_call \"/\" [v; (Number 256.0)]))); (Number 256.0)]))))))\n\n(* compile-expr *)\nand compile_expr em expr scope tail_p =\n (let () = ignore ((String \"Compile an expression. tail? indicates tail position for TCO.\")) in (if sx_truthy ((is_nil (expr))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"number\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"string\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"boolean\")])) then (emit_op (em) ((if sx_truthy (expr) then (Number 3.0) else (Number 4.0)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"keyword\")])) then (emit_const (em) ((keyword_name (expr)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"symbol\")])) then (compile_symbol (em) ((symbol_name (expr))) (scope)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])) then (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (compile_list (em) (expr) (scope) (tail_p))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"dict\")])) then (compile_dict (em) (expr) (scope)) else (emit_const (em) (expr)))))))))))\n\n(* compile-symbol *)\nand compile_symbol em name scope =\n (let resolved = (scope_resolve (scope) (name)) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 16.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 18.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (idx)))))))\n\n(* compile-dict *)\nand compile_dict em expr scope =\n (let ks = (prim_call \"keys\" [expr]) in let count = (len (ks)) in (let () = ignore ((List.iter (fun k -> ignore ((let () = ignore ((emit_const (em) (k))) in (compile_expr (em) ((get (expr) (k))) (scope) ((Bool false)))))) (sx_to_list ks); Nil)) in (let () = ignore ((emit_op (em) ((Number 65.0)))) in (emit_u16 (em) (count)))))\n\n(* compile-list *)\nand compile_list em expr scope tail_p =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])))))) then (compile_call (em) (head) (args) (scope) (tail_p)) else (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (compile_if (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (compile_when (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (compile_and (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (compile_or (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (compile_define (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (compile_set (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (compile_quote (em) (args)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (compile_cond (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (compile_case (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (compile_thread (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (compile_defmacro (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defstyle\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defhandler\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defpage\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defquery\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defaction\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defrelation\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"deftype\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defeffect\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (compile_quasiquote (em) ((first (args))) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (compile_letrec (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (compile_match (em) (args) (scope) (tail_p)) else (compile_call (em) (head) (args) (scope) (tail_p))))))))))))))))))))))))))))))))))))\n\n(* compile-if *)\nand compile_if em args scope tail_p =\n (let test = (first (args)) in let then_expr = (nth (args) ((Number 1.0))) in let else_expr = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let else_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (then_expr) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (else_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [else_jump; (Number 2.0)])])))) in (let () = ignore ((if sx_truthy ((is_nil (else_expr))) then (emit_op (em) ((Number 2.0))) else (compile_expr (em) (else_expr) (scope) (tail_p)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-when *)\nand compile_when em args scope tail_p =\n (let test = (first (args)) in let body = (rest (args)) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_begin (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip_jump; (Number 2.0)])])))) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-and *)\nand compile_and em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 3.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_and (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-or *)\nand compile_or em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 4.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 34.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_or (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-begin *)\nand compile_begin em exprs scope tail_p =\n (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (exprs)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\"))))))))))) then (List.iter (fun expr -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (expr)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (expr)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (expr)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (expr)))); (String \"define\")]))))) then (let name_expr = (nth (expr) ((Number 1.0))) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in (scope_define_local (scope) (name))) else Nil))) (sx_to_list exprs); Nil) else Nil)) in (if sx_truthy ((empty_p (exprs))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (exprs)); (Number 1.0)])) then (compile_expr (em) ((first (exprs))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_begin (em) ((rest (exprs))) (scope) (tail_p)))))))\n\n(* compile-let *)\nand compile_let em args scope tail_p =\n (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (let loop_name = (symbol_name ((first (args)))) in let bindings = (nth (args) ((Number 1.0))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in let params = ref ((List [])) in let inits = ref ((List [])) in (let () = ignore ((List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (first (binding)) else (make_symbol ((first (binding))))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil)) in (let lambda_expr = (prim_call \"concat\" [(List [(make_symbol ((String \"fn\"))); !params]); body]) in let letrec_bindings = (List [(List [(make_symbol (loop_name)); lambda_expr])]) in let call_expr = (cons ((make_symbol (loop_name))) (!inits)) in (compile_letrec (em) ((List [letrec_bindings; call_expr])) (scope) (tail_p))))) else (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((List.iter (fun binding -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in let value = (nth (binding) ((Number 1.0))) in let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((compile_expr (em) (value) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list bindings); Nil)) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-letrec *)\nand compile_letrec em args scope tail_p =\n (let () = ignore ((String \"Compile letrec: all names visible during value compilation.\\n 1. Define all local slots (initialized to nil).\\n 2. Compile each value and assign — names are already in scope\\n so mutually recursive functions can reference each other.\")) in (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((let slots = (List (List.map (fun binding -> (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (let () = ignore ((emit_byte (em) (slot))) in slot)))))) (sx_to_list bindings))) in (List.iter (fun pair -> ignore ((let binding = (first (pair)) in let slot = (nth (pair) ((Number 1.0))) in (let () = ignore ((compile_expr (em) ((nth (binding) ((Number 1.0)))) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list (List (List.map (fun i -> (List [(nth (bindings) (i)); (nth (slots) (i))])) (sx_to_list (prim_call \"range\" [(Number 0.0); (len (bindings))]))))); Nil))) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-lambda *)\nand compile_lambda em args scope =\n (let params = (first (args)) in let body = (rest (args)) in let fn_scope = (make_scope (scope)) in let fn_em = (make_emitter ()) in (let () = ignore ((sx_dict_set_b fn_scope (String \"is-function\") (Bool true))) in (let () = ignore ((List.iter (fun p -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (list_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (p)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")])))) then (symbol_name ((first (p)))) else p)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&key\")]))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&rest\")]))))))) then (scope_define_local (fn_scope) (name)) else Nil)))) (sx_to_list params); Nil)) in (let () = ignore ((compile_begin (fn_em) (body) (fn_scope) ((Bool true)))) in (let () = ignore ((emit_op (fn_em) ((Number 50.0)))) in (let upvals = (get (fn_scope) ((String \"upvalues\"))) in let code = (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"upvalue-count\" (len (upvals)); Hashtbl.replace _d \"arity\" (len ((get (fn_scope) ((String \"locals\"))))); Hashtbl.replace _d \"constants\" (get ((get (fn_em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (fn_em) ((String \"bytecode\"))); Dict _d) in let code_idx = (pool_add ((get (em) ((String \"pool\")))) (code)) in (let () = ignore ((emit_op (em) ((Number 51.0)))) in (let () = ignore ((emit_u16 (em) (code_idx))) in (List.iter (fun uv -> ignore ((let () = ignore ((emit_byte (em) ((if sx_truthy ((get (uv) ((String \"is-local\")))) then (Number 1.0) else (Number 0.0))))) in (emit_byte (em) ((get (uv) ((String \"index\")))))))) (sx_to_list upvals); Nil)))))))))\n\n(* compile-define *)\nand compile_define em args scope =\n (let name_expr = (first (args)) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in let value = (let rest_args = (rest (args)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_args)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]))) then (skip_annotations (rest_args)) else (first (rest_args)))) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\")))))))))) then (let slot = (scope_define_local (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))) else (let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 128.0)))) in (emit_u16 (em) (name_idx)))))))\n\n(* compile-set *)\nand compile_set em args scope =\n (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (symbol_name ((first (args)))) else (first (args))) in let value = (nth (args) ((Number 1.0))) in let resolved = (scope_resolve (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 19.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 21.0)))) in (emit_u16 (em) (idx))))))))\n\n(* compile-quote *)\nand compile_quote em args =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (emit_const (em) ((first (args)))))\n\n(* compile-cond *)\nand compile_cond em args scope tail_p =\n (let () = ignore ((String \"Compile (cond test1 body1 test2 body2 ... :else fallback).\")) in (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (emit_op (em) ((Number 2.0))) else (let test = (first (args)) in let body = (nth (args) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (prim_call \"slice\" [args; (Number 2.0)]) else (List [])) in (if sx_truthy ((let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (prim_call \"=\" [test; (Bool true)]))) then (compile_expr (em) (body) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_cond (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))\n\n(* compile-case *)\nand compile_case em args scope tail_p =\n (let () = ignore ((String \"Compile (case expr val1 body1 val2 body2 ... :else fallback).\")) in (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let clauses = (rest (args)) in (compile_case_clauses (em) (clauses) (scope) (tail_p)))))\n\n(* compile-case-clauses *)\nand compile_case_clauses em clauses scope tail_p =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (emit_op (em) ((Number 2.0)))) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (clauses)); (Number 2.0)])) then (prim_call \"slice\" [clauses; (Number 2.0)]) else (List [])) in (if sx_truthy ((let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (prim_call \"=\" [test; (Bool true)]))) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_expr (em) (body) (scope) (tail_p))) else (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"=\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) ((Number 2.0))))))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_case_clauses (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))))\n\n(* compile-thread *)\nand compile_thread em args scope tail_p =\n (let () = ignore ((String \"Compile (-> val (f1 a) (f2 b)) by desugaring to nested calls.\")) in (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let val_expr = (first (args)) in let forms = (rest (args)) in (compile_thread_step (em) (val_expr) (forms) (scope) (tail_p))))))\n\n(* compile-thread-step *)\nand compile_thread_step em val_expr forms scope tail_p =\n (if sx_truthy ((empty_p (forms))) then (compile_expr (em) (val_expr) (scope) (tail_p)) else (let form = (first (forms)) in let rest_forms = (rest (forms)) in let is_tail = (let _and = tail_p in if not (sx_truthy _and) then _and else (empty_p (rest_forms))) in (let call_expr = (if sx_truthy ((list_p (form))) then (prim_call \"concat\" [(List [(first (form)); val_expr]); (rest (form))]) else (List [form; val_expr])) in (if sx_truthy ((empty_p (rest_forms))) then (compile_expr (em) (call_expr) (scope) (is_tail)) else (let () = ignore ((compile_expr (em) (call_expr) (scope) ((Bool false)))) in (compile_thread_step (em) (call_expr) (rest_forms) (scope) (tail_p)))))))\n\n(* compile-defcomp *)\nand compile_defcomp em args scope =\n (let () = ignore ((String \"Compile defcomp/defisland — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defcomp\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defcomp\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-defmacro *)\nand compile_defmacro em args scope =\n (let () = ignore ((String \"Compile defmacro — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defmacro\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defmacro\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-quasiquote *)\nand compile_quasiquote em expr scope =\n (let () = ignore ((String \"Compile quasiquote inline — walks the template at compile time,\\n emitting code that builds the structure at runtime. Unquoted\\n expressions are compiled normally (resolving locals/upvalues),\\n avoiding the qq-expand-runtime env-lookup limitation.\")) in (compile_qq_expr (em) (expr) (scope)))\n\n(* compile-qq-expr *)\nand compile_qq_expr em expr scope =\n (let () = ignore ((String \"Compile a quasiquote sub-expression.\")) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])))))) then (emit_const (em) (expr)) else (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (let head = (first (expr)) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (head)); (String \"unquote\")]))) then (compile_expr (em) ((nth (expr) ((Number 1.0)))) (scope) ((Bool false))) else (compile_qq_list (em) (expr) (scope)))))))\n\n(* compile-qq-list *)\nand compile_qq_list em items scope =\n (let () = ignore ((String \"Compile a quasiquote list. Handles splice-unquote by building\\n segments and concatenating them.\")) in (let has_splice = (Bool (List.exists (fun item -> sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")])))))) (sx_to_list items))) in (if sx_truthy ((Bool (not (sx_truthy (has_splice))))) then (let () = ignore ((List.iter (fun item -> ignore ((compile_qq_expr (em) (item) (scope)))) (sx_to_list items); Nil)) in (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((len (items)))))) else (let segment_count = ref ((Number 0.0)) in let pending = ref ((Number 0.0)) in (let () = ignore ((List.iter (fun item -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")]))))) then (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (let () = ignore ((segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil)) in (pending := (Number 0.0); Nil)))) else Nil)) in (let () = ignore ((compile_expr (em) ((nth (item) ((Number 1.0)))) (scope) ((Bool false)))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else (let () = ignore ((compile_qq_expr (em) (item) (scope))) in (pending := (prim_call \"+\" [!pending; (Number 1.0)]); Nil))))) (sx_to_list items); Nil)) in (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else Nil)) in (if sx_truthy ((prim_call \">\" [!segment_count; (Number 1.0)])) then (let concat_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"concat\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (concat_idx))) in (emit_byte (em) (!segment_count))))) else Nil)))))))\n\n(* compile-call *)\nand compile_call em head args scope tail_p =\n (let is_prim = (let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let name = (symbol_name (head)) in (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"local\")]))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"upvalue\")]))))) in if not (sx_truthy _and) then _and else (is_primitive (name)))))) in (if sx_truthy (is_prim) then (let name = (symbol_name (head)) in let argc = (len (args)) in let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) (argc)))))) else (let () = ignore ((compile_expr (em) (head) (scope) ((Bool false)))) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (if sx_truthy (tail_p) then (let () = ignore ((emit_op (em) ((Number 49.0)))) in (emit_byte (em) ((len (args))))) else (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((len (args))))))))))\n\n(* compile *)\nand compile expr =\n (let () = ignore ((String \"Compile a single SX expression to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d)))))\n\n(* compile-module *)\nand compile_module exprs =\n (let () = ignore ((String \"Compile a list of top-level expressions to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((List.iter (fun expr -> ignore ((let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (emit_op (em) ((Number 5.0)))))) (sx_to_list (init (exprs))); Nil)) in (let () = ignore ((compile_expr (em) ((last (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d))))))\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}}]} diff --git a/shared/static/wasm/sx_browser.bc.wasm.js b/shared/static/wasm/sx_browser.bc.wasm.js index d66b2f1e..87b408c8 100644 --- a/shared/static/wasm/sx_browser.bc.wasm.js +++ b/shared/static/wasm/sx_browser.bc.wasm.js @@ -1792,7 +1792,7 @@ blake2_js_for_wasm_create: blake2_js_for_wasm_create}; } (globalThis)) -({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-afdcb8e8",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var +({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-3b0282d1",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new diff --git a/web/orchestration.sx b/web/orchestration.sx index 82a3ec26..eb3b380b 100644 --- a/web/orchestration.sx +++ b/web/orchestration.sx @@ -453,7 +453,18 @@ ((timer nil) (last-val nil) (listen-target - (if (get mods "from") (dom-query (get mods "from")) el))) + (let + ((from-sel (get mods "from"))) + (cond + (nil? from-sel) + el + (= from-sel "body") + (dom-body) + (= from-sel "document") + (dom-document) + (= from-sel "window") + (dom-window) + :else (dom-query from-sel))))) (when listen-target (dom-add-listener @@ -462,7 +473,7 @@ (fn (e) (let - ((should-fire (if (get mods "filter") (host-call (host-call (dom-window) "Function" "event" (get mods "filter")) "call" el e) true))) + ((should-fire (if (get mods "filter") (let ((f (get mods "filter"))) (let ((key-match (index-of f "key=='"))) (if (>= key-match 0) (let ((key-char (slice f (+ key-match 5) (+ key-match 6)))) (and (= (host-get e "key") key-char) (not (dom-matches? (host-get e "target") "input,textarea,select")))) true))) true))) (when (get mods "changed") (let @@ -1492,7 +1503,7 @@ verb-info (when (not (dom-has-attr? el "sx-disable")) - (bind-triggers el verb-info) + (do (bind-triggers el verb-info) (bind-preload-for el)) (bind-preload-for el)))))) (define