w-converhp 2.0.34 → 2.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,70 @@
1
+ import path from 'path'
2
+ import fs from 'fs'
3
+ import size from 'lodash-es/size.js'
4
+ import fsIsFile from 'wsemi/src/fsIsFile.mjs'
5
+ import getFileXxHash from 'wsemi/src/getFileXxHash.mjs'
6
+
7
+
8
+ let checkSlicesHash = async(fileSliceHashs, fileHash, pathUploadTemp) => {
9
+
10
+ //check, 前端須檢核, 若之前已回應無切片, 就不能再調用檢測切片hash的API
11
+ if (size(fileSliceHashs) === 0) {
12
+ let r = {
13
+ error: 'no fileSliceHashs',
14
+ }
15
+ return r
16
+ }
17
+
18
+ //slksCfm, 已確定hash值一致的切片
19
+ // console.log(`check hash for slices fileHash[${fileHash}]...`, fileSliceHashs[0], size(fileSliceHashs))
20
+ let slksCfm = []
21
+ // let n = Math.max(fileSliceHashs.length, 1)
22
+ // let nr = Math.floor(n / 100)
23
+ for (let k = 0; k < fileSliceHashs.length; k++) {
24
+ // if (k % nr === 0) {
25
+ // console.log(`calc hash for slices`, (k / fileSliceHashs.length * 100).toFixed(1), '%')
26
+ // }
27
+
28
+ //v
29
+ let v = fileSliceHashs[k]
30
+
31
+ //_pathFile
32
+ let _pathFile = path.join(pathUploadTemp, `${fileHash}_${v.i}`)
33
+ // console.log('_pathFile', _pathFile)
34
+
35
+ //_fileHash
36
+ let _fileHash = ''
37
+ // await calcFileHash(_pathFile)
38
+ await getFileXxHash(new Blob([fs.readFileSync(_pathFile)])) //計算切片因檔案很小, 直接用getFileXxHash速度比較快
39
+ .then((res) => {
40
+ _fileHash = res
41
+ })
42
+ .catch((err) => {
43
+ console.log(err)
44
+ console.log(`fsIsFile(_pathFile)`, _pathFile, fsIsFile(_pathFile))
45
+ })
46
+ // console.log('_fileHash', _fileHash)
47
+
48
+ //check
49
+ if (v.h === _fileHash) {
50
+ slksCfm.push(v.i)
51
+ }
52
+ // else {
53
+ // console.log(`hash is not equal`, `hash(front)`, v.h, `hash(backend)`, _fileHash)
54
+ // }
55
+
56
+ }
57
+ // console.log(`check hash for slices fileHash[${fileHash}] done`, slksCfm[0], size(slksCfm))
58
+
59
+ //r
60
+ let r = {
61
+ success: {
62
+ slks: slksCfm,
63
+ },
64
+ }
65
+
66
+ return r
67
+ }
68
+
69
+
70
+ export default checkSlicesHash
@@ -0,0 +1 @@
1
+ !function(M,w){"object"==typeof exports&&"undefined"!=typeof module?module.exports=w(require("worker_threads")):"function"==typeof define&&define.amd?define(["worker_threads"],w):(M="undefined"!=typeof globalThis?globalThis:M||self).checkSlicesHash=w(M.worker_threads)}(this,(function(M){"use strict";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var w={};!function(w,s){w.exports=function(M){var w={};!function(M){var w=Object.prototype.hasOwnProperty,s="~";function D(){}function L(M,w,s){this.fn=M,this.context=w,this.once=s||!1}function I(M,w,D,I,N){if("function"!=typeof D)throw new TypeError("The listener must be a function");var y=new L(D,I||M,N),C=s?s+w:w;return M._events[C]?M._events[C].fn?M._events[C]=[M._events[C],y]:M._events[C].push(y):(M._events[C]=y,M._eventsCount++),M}function N(M,w){0==--M._eventsCount?M._events=new D:delete M._events[w]}function y(){this._events=new D,this._eventsCount=0}Object.create&&(D.prototype=Object.create(null),(new D).__proto__||(s=!1)),y.prototype.eventNames=function(){var M,D,L=[];if(0===this._eventsCount)return L;for(D in M=this._events)w.call(M,D)&&L.push(s?D.slice(1):D);return Object.getOwnPropertySymbols?L.concat(Object.getOwnPropertySymbols(M)):L},y.prototype.listeners=function(M){var w=s?s+M:M,D=this._events[w];if(!D)return[];if(D.fn)return[D.fn];for(var L=0,I=D.length,N=new Array(I);L<I;L++)N[L]=D[L].fn;return N},y.prototype.listenerCount=function(M){var w=s?s+M:M,D=this._events[w];return D?D.fn?1:D.length:0},y.prototype.emit=function(M,w,D,L,I,N){var y=s?s+M:M;if(!this._events[y])return!1;var C,i,x=this._events[y],c=arguments.length;if(x.fn){switch(x.once&&this.removeListener(M,x.fn,void 0,!0),c){case 1:return x.fn.call(x.context),!0;case 2:return x.fn.call(x.context,w),!0;case 3:return x.fn.call(x.context,w,D),!0;case 4:return x.fn.call(x.context,w,D,L),!0;case 5:return x.fn.call(x.context,w,D,L,I),!0;case 6:return x.fn.call(x.context,w,D,L,I,N),!0}for(i=1,C=new Array(c-1);i<c;i++)C[i-1]=arguments[i];x.fn.apply(x.context,C)}else{var T,d=x.length;for(i=0;i<d;i++)switch(x[i].once&&this.removeListener(M,x[i].fn,void 0,!0),c){case 1:x[i].fn.call(x[i].context);break;case 2:x[i].fn.call(x[i].context,w);break;case 3:x[i].fn.call(x[i].context,w,D);break;case 4:x[i].fn.call(x[i].context,w,D,L);break;default:if(!C)for(T=1,C=new Array(c-1);T<c;T++)C[T-1]=arguments[T];x[i].fn.apply(x[i].context,C)}}return!0},y.prototype.on=function(M,w,s){return I(this,M,w,s,!1)},y.prototype.once=function(M,w,s){return I(this,M,w,s,!0)},y.prototype.removeListener=function(M,w,D,L){var I=s?s+M:M;if(!this._events[I])return this;if(!w)return N(this,I),this;var y=this._events[I];if(y.fn)y.fn!==w||L&&!y.once||D&&y.context!==D||N(this,I);else{for(var C=0,i=[],x=y.length;C<x;C++)(y[C].fn!==w||L&&!y[C].once||D&&y[C].context!==D)&&i.push(y[C]);i.length?this._events[I]=1===i.length?i[0]:i:N(this,I)}return this},y.prototype.removeAllListeners=function(M){var w;return M?(w=s?s+M:M,this._events[w]&&N(this,w)):(this._events=new D,this._eventsCount=0),this},y.prototype.off=y.prototype.removeListener,y.prototype.addListener=y.prototype.on,y.prefixed=s,y.EventEmitter=y,M.exports=y}({get exports(){return w},set exports(M){w=M}});var s=w;let D;!function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let w=(L="CgogICAgICAgIC8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwogICAgICAgIGxldCB7IHBhcmVudFBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJykgLy/lm6BwYWNrYWdlLmpzb27kuI3ntaZ0eXBlPW1vZHVsZeaVheeEoeazleaUr+aPtGVzNiBpbXBvcnQsIOW+l+S9v+eUqHJlcXVpcmUKICAgICAgICAvL+iLpeimgeaWvG5vZGVqcyB3b3JrZXLlhafkvb/nlKjnhKHms5Xnt6jora/nmoTljp/nlJ/lpZfku7bkvovlpoJmcywg6YG/5YWN5L2/55So6aCC5bGkaW1wb3J05Yqg6LyJ5L2/55SoLCDlm6DnhKHms5Xnt6jora/mnIPnm7TmjqXkv53nlZkKICAgICAgICAvL+S4puWboGltcG9ydOS9jeaWvHdvcmtlcuWkluWxpOmZkOWumueCunJlcXVpcmXljYAocGFja2FnZS5qc29u5LiN57WmdHlwZT1tb2R1bGUpLCDmlYXlh7rnj77pjK/oqqTnhKHms5Xnt6jora8KICAgICAgICAKCiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpLHI9T2JqZWN0LnByb3RvdHlwZTt2YXIgbixvLGk9KG49T2JqZWN0LmtleXMsbz1PYmplY3QsZnVuY3Rpb24odCl7cmV0dXJuIG4obyh0KSl9KSx1PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gYSh0KXtpZihuPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlfHxyKSlyZXR1cm4gaSh0KTt2YXIgZSxuLG89W107Zm9yKHZhciBhIGluIE9iamVjdCh0KSl1LmNhbGwodCxhKSYmImNvbnN0cnVjdG9yIiE9YSYmby5wdXNoKGEpO3JldHVybiBvfXZhciBjPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxmPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYscz1jfHxmfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGw9cy5TeW1ib2wscD1PYmplY3QucHJvdG90eXBlLGg9cC5oYXNPd25Qcm9wZXJ0eSx5PXAudG9TdHJpbmcsdj1sP2wudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBiPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIGQ9IltvYmplY3QgTnVsbF0iLGc9IltvYmplY3QgVW5kZWZpbmVkXSIsXz1sP2wudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIGoodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD9nOmQ6XyYmXyBpbiBPYmplY3QodCk/ZnVuY3Rpb24odCl7dmFyIGU9aC5jYWxsKHQsdikscj10W3ZdO3RyeXt0W3ZdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89eS5jYWxsKHQpO3JldHVybiBuJiYoZT90W3ZdPXI6ZGVsZXRlIHRbdl0pLG99KHQpOmZ1bmN0aW9uKHQpe3JldHVybiBiLmNhbGwodCl9KHQpfWZ1bmN0aW9uIHcodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIFM9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLE89IltvYmplY3QgRnVuY3Rpb25dIixtPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIseD0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHoodCl7aWYoIXcodCkpcmV0dXJuITE7dmFyIGU9aih0KTtyZXR1cm4gZT09T3x8ZT09bXx8ZT09U3x8ZT09eH12YXIgQSwkPXNbIl9fY29yZS1qc19zaGFyZWRfXyJdLEY9KEE9L1teLl0rJC8uZXhlYygkJiYkLmtleXMmJiQua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0E6IiI7dmFyIFA9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEwodCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBQLmNhbGwodCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaCh0KXt9fXJldHVybiIifXZhciBrPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLEU9RnVuY3Rpb24ucHJvdG90eXBlLEk9T2JqZWN0LnByb3RvdHlwZSxOPUUudG9TdHJpbmcsVD1JLmhhc093blByb3BlcnR5LE09UmVnRXhwKCJeIitOLmNhbGwoVCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gUih0KXtyZXR1cm4hKCF3KHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hIUYmJkYgaW4gdH0odCkpJiYoeih0KT9NOmspLnRlc3QoTCh0KSl9ZnVuY3Rpb24gVSh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbZV19KHQsZSk7cmV0dXJuIFIocik/cjp2b2lkIDB9dmFyIEI9VShzLCJEYXRhVmlldyIpLEM9VShzLCJNYXAiKSxEPVUocywiUHJvbWlzZSIpLFc9VShzLCJTZXQiKSxxPVUocywiV2Vha01hcCIpLFY9IltvYmplY3QgTWFwXSIsRz0iW29iamVjdCBQcm9taXNlXSIsSD0iW29iamVjdCBTZXRdIixKPSJbb2JqZWN0IFdlYWtNYXBdIixLPSJbb2JqZWN0IERhdGFWaWV3XSIsUT1MKEIpLFg9TChDKSxZPUwoRCksWj1MKFcpLHR0PUwocSksZXQ9ajsoQiYmZXQobmV3IEIobmV3IEFycmF5QnVmZmVyKDEpKSkhPUt8fEMmJmV0KG5ldyBDKSE9Vnx8RCYmZXQoRC5yZXNvbHZlKCkpIT1HfHxXJiZldChuZXcgVykhPUh8fHEmJmV0KG5ldyBxKSE9SikmJihldD1mdW5jdGlvbih0KXt2YXIgZT1qKHQpLHI9IltvYmplY3QgT2JqZWN0XSI9PWU/dC5jb25zdHJ1Y3Rvcjp2b2lkIDAsbj1yP0wocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBROnJldHVybiBLO2Nhc2UgWDpyZXR1cm4gVjtjYXNlIFk6cmV0dXJuIEc7Y2FzZSBaOnJldHVybiBIO2Nhc2UgdHQ6cmV0dXJuIEp9cmV0dXJuIGV9KTt2YXIgcnQ9ZXQsbnQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBvdCh0KXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PW50fSh0Lmxlbmd0aCkmJiF6KHQpfXZhciBpdD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHV0KHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9dmFyIGF0PSJbb2JqZWN0IFN0cmluZ10iO3ZhciBjdCxmdD0oY3Q9Imxlbmd0aCIsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbY3RdfSksc3Q9UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3ZhciBsdD0iXFx1ZDgwMC1cXHVkZmZmIixwdD0iWyIrbHQrIl0iLGh0PSJbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXSIseXQ9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsdnQ9IlteIitsdCsiXSIsYnQ9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLGR0PSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixndD0iKD86IitodCsifCIreXQrIikiKyI/IixfdD0iW1xcdWZlMGVcXHVmZTBmXT8iLGp0PV90K2d0KygiKD86XFx1MjAwZCg/OiIrW3Z0LGJ0LGR0XS5qb2luKCJ8IikrIikiK190K2d0KyIpKiIpLHd0PSIoPzoiK1t2dCtodCsiPyIsaHQsYnQsZHQscHRdLmpvaW4oInwiKSsiKSIsU3Q9UmVnRXhwKHl0KyIoPz0iK3l0KyIpfCIrd3QranQsImciKTtmdW5jdGlvbiBPdCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHN0LnRlc3QodCl9KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1TdC5sYXN0SW5kZXg9MDtTdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOmZ0KHQpfWZ1bmN0aW9uIG10KHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYob3QodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhaXQoZSkmJnV0KGUpJiZqKGUpPT1hdD9PdCh0KTp0Lmxlbmd0aDt2YXIgZSxyPXJ0KHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1yfHwiW29iamVjdCBTZXRdIj09cj90LnNpemU6YSh0KS5sZW5ndGh9dmFyIHh0PSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIHp0KHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8dXQodCkmJmoodCk9PXh0fXZhciBBdD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLywkdD0vXlx3KiQvO3ZhciBGdD1VKE9iamVjdCwiY3JlYXRlIik7dmFyIFB0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEx0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24ga3QodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gRXQodCxlKXtmb3IodmFyIHIsbixvPXQubGVuZ3RoO28tLTspaWYoKHI9dFtvXVswXSk9PT0obj1lKXx8ciE9ciYmbiE9bilyZXR1cm4gbztyZXR1cm4tMX1rdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPUZ0P0Z0KG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxrdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxrdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoRnQpe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gUHQuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxrdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIEZ0P3ZvaWQgMCE9PWVbdF06THQuY2FsbChlLHQpfSxrdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1GdCYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgSXQ9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBOdCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBUdCh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gTXQodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19TnQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sTnQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9RXQoZSx0KTtyZXR1cm4hKHI8MCkmJihyPT1lLmxlbmd0aC0xP2UucG9wKCk6SXQuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITApfSxOdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1FdChlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19LE50LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIEV0KHRoaXMuX19kYXRhX18sdCk+LTF9LE50LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49RXQocix0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW3QsZV0pKTpyW25dWzFdPWUsdGhpc30sTXQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcga3QsbWFwOm5ldyhDfHxOdCksc3RyaW5nOm5ldyBrdH19LE10LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9VHQodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sTXQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gVHQodGhpcyx0KS5nZXQodCl9LE10LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIFR0KHRoaXMsdCkuaGFzKHQpfSxNdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9VHQodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307dmFyIFJ0PSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBVdCh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFJ0KTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxvPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0saT1yLmNhY2hlO2lmKGkuaGFzKG8pKXJldHVybiBpLmdldChvKTt2YXIgdT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9aS5zZXQobyx1KXx8aSx1fTtyZXR1cm4gci5jYWNoZT1uZXcoVXQuQ2FjaGV8fE10KSxyfVV0LkNhY2hlPU10O3ZhciBCdD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxDdD0vXFwoXFwpPy9nLER0PWZ1bmN0aW9uKHQpe3ZhciBlPVV0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1yLnNpemUmJnIuY2xlYXIoKSx0fSkpLHI9ZS5jYWNoZTtyZXR1cm4gZX0oKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoQnQsKGZ1bmN0aW9uKHQscixuLG8pe2UucHVzaChuP28ucmVwbGFjZShDdCwiJDEiKTpyfHx0KX0pKSxlfSkpLFd0PUR0O3ZhciBxdD0xLzAsVnQ9bD9sLnByb3RvdHlwZTp2b2lkIDAsR3Q9VnQ/VnQudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIEh0KHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihpdCh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGgsbz1BcnJheShuKTsrK3I8bjspb1tyXT1lKHRbcl0scix0KTtyZXR1cm4gb30odCxIdCkrIiI7aWYoenQodCkpcmV0dXJuIEd0P0d0LmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4iMCI9PWUmJjEvdD09LXF0PyItMCI6ZX1mdW5jdGlvbiBKdCh0LGUpe3JldHVybiBpdCh0KT90OmZ1bmN0aW9uKHQsZSl7aWYoaXQodCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9ciYmInN5bWJvbCIhPXImJiJib29sZWFuIiE9ciYmbnVsbCE9dCYmIXp0KHQpKXx8JHQudGVzdCh0KXx8IUF0LnRlc3QodCl8fG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfSh0LGUpP1t0XTpXdChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD8iIjpIdCh0KX0odCkpfXZhciBLdD0xLzA7ZnVuY3Rpb24gUXQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHx6dCh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tS3Q/Ii0wIjplfWZ1bmN0aW9uIFh0KHQsZSxyKXt2YXIgbj1udWxsPT10P3ZvaWQgMDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49KGU9SnQoZSx0KSkubGVuZ3RoO251bGwhPXQmJnI8bjspdD10W1F0KGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfSh0LGUpO3JldHVybiB2b2lkIDA9PT1uP3I6bn1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gZnVuY3Rpb24odCxlPXt9KXtsZXQgcj1YdChlLCJmcyIpO3JldHVybiEhci5leGlzdHNTeW5jKHQpJiYhci5sc3RhdFN5bmModCkuaXNEaXJlY3RvcnkoKSYmIXIubHN0YXRTeW5jKHQpLmlzU3ltYm9saWNMaW5rKCl9KHQse2ZzOmV9KX1jb25zdCBadD1uZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw0OCw4LDk2LDMsMTI3LDEyNywxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNywwLDk2LDIsMTI3LDEyNywwLDk2LDEsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjYsMSwxMjYsOTYsMywxMjYsMTI3LDEyNywxLDEyNiw5NiwyLDEyNywxMjYsMCw5NiwxLDEyNywxLDEyNiwzLDExLDEwLDAsMCwyLDEsMyw0LDUsNiwxLDcsNSwzLDEsMCwxLDcsODUsOSwzLDEwOSwxMDEsMTA5LDIsMCw1LDEyMCwxMjAsMTA0LDUxLDUwLDAsMCw2LDEwNSwxMTAsMTA1LDExNiw1MSw1MCwwLDIsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDUxLDUwLDAsMyw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDUxLDUwLDAsNCw1LDEyMCwxMjAsMTA0LDU0LDUyLDAsNSw2LDEwNSwxMTAsMTA1LDExNiw1NCw1MiwwLDcsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDU0LDUyLDAsOCw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDU0LDUyLDAsOSwxMCwyNTEsMjIsMTAsMjQyLDEsMSw0LDEyNywzMiwwLDMyLDEsMTA2LDMzLDMsMzIsMSw2NSwxNiw3OSw0LDEyNywzMiwzLDY1LDE2LDEwNywzMyw2LDMyLDIsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDMzLDMsMzIsMiw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsMzMsNCwzMiwyLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiwzMyw1LDMsNjQsMzIsMywzMiwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNCwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNCwzMiwyLDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDUsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNiwzMiwwLDY1LDQsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY1LDEyLDExOSwzMiw1LDY1LDE4LDExOSwxMDYsMzIsNCw2NSw3LDExOSwxMDYsMzIsMyw2NSwxLDExOSwxMDYsNSwzMiwyLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwxLDEwNiwzMiwwLDMyLDEsNjUsMTUsMTEzLDE2LDEsMTEsMTQ2LDEsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwxLDY1LDQsMTA2LDMyLDIsNzUsNjksNCw2NCwzMiwwLDMyLDEsNDAsMiwwLDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDEwNiw2NSwxNywxMTksNjUsMTc1LDIxNCwyMTEsMTkwLDIsMTA4LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDEyLDEsMTEsMTEsMyw2NCwzMiwxLDMyLDIsNzksNjksNCw2NCwzMiwwLDMyLDEsNDUsMCwwLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwOCwxMDYsNjUsMTEsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY1LDE1LDExOCwxMTUsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMzQsMCw2NSwxMywxMTgsMzIsMCwxMTUsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMzQsMCw2NSwxNiwxMTgsMzIsMCwxMTUsMTEsNjMsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwxLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsMSw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsNTQsMiwwLDExLDE5NSw0LDEsNiwxMjcsMzIsMSwzMiwyLDEwNiwzMyw2LDMyLDAsNjUsMjQsMTA2LDMzLDQsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQwLDIsMCwzMiwyLDEwNiw1NCwyLDAsMzIsMCw2NSw0LDEwNiwzNCw1LDMyLDUsNDAsMiwwLDMyLDIsNjUsMTYsNzksMzIsMCw0MCwyLDAsNjUsMTYsNzksMTE0LDExNCw1NCwyLDAsMzIsMiwzMiwzLDEwNiw2NSwxNiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwxNiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw0LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDgsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsMTIsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDQwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSwzMiw2LDY1LDE2LDEwNyw3Nyw0LDY0LDMyLDYsNjUsMTYsMTA3LDMzLDgsMzIsMCw2NSw4LDEwNiw0MCwyLDAsMzMsMiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsMzMsMywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsNSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsMzMsNywzLDY0LDMyLDIsMzIsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDMsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNSwzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw3LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw3LDMyLDgsMzIsMSw2NSw0LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiwyLDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwzLDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiw1LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiw3LDU0LDIsMCwxMSwzMiwxLDMyLDYsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNiwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsOTcsMSwxLDEyNywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsMSwzMiwwLDY1LDQsMTA2LDQwLDIsMCw0LDEyNywzMiwxLDY1LDEyLDExOSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsNjUsMTgsMTE5LDEwNiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsNjUsNywxMTksMTA2LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDY1LDEsMTE5LDEwNiw1LDMyLDEsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDAsNDAsMiwwLDEwNiwzMiwwLDY1LDI0LDEwNiwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMTYsMSwxMSwyNTUsMywyLDMsMTI2LDEsMTI3LDMyLDAsMzIsMSwxMDYsMzMsNiwzMiwxLDY1LDMyLDc5LDQsMTI2LDMyLDYsNjUsMzIsMTA3LDMzLDYsMzIsMiw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCwzMywzLDMyLDIsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsMzMsNCwzMiwyLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywzLDMyLDQsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNCwzMiwyLDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDIsMzIsNSwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw1LDMyLDYsMzIsMCw2NSw4LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NiwxMiwxMzcsMzIsNSw2NiwxOCwxMzcsMTI0LDMyLDQsNjYsNywxMzcsMTI0LDMyLDMsNjYsMSwxMzcsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwyLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwyLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDEsMTczLDEyNCwzMiwwLDMyLDEsNjUsMzEsMTEzLDE2LDYsMTEsMTM0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwyLDMyLDEsNjUsOCwxMDYsNzksNCw2NCwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMiwwLDEzMyw2NiwyNywxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMywwLDMyLDEsNjUsOCwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDEsNjUsNCwxMDYsMzIsMiw3Nyw0LDY0LDMyLDAsMzIsMSw1MywyLDAsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMjMsMTM3LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI0LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDExLDMsNjQsMzIsMSwzMiwyLDczLDQsNjQsMzIsMCwzMiwxLDQ5LDAsMCw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNiwxMzMsNjYsMTEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjYsMzMsMTM2LDEzMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwzNCwwLDMyLDAsNjYsMjksMTM2LDEzMyw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNiwzNCwwLDMyLDAsNjYsMzIsMTM2LDEzMywxMSw3NywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsMSw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsMSw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCw1NSwzLDAsMTEsMjQ0LDQsMiwzLDEyNyw0LDEyNiwzMiwxLDMyLDIsMTA2LDMzLDUsMzIsMCw2NSw0MCwxMDYsMzMsNCwzMiwwLDY1LDIwMCwwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDEsMywwLDMyLDIsMTczLDEyNCw1NSwzLDAsMzIsMiwzMiwzLDEwNiw2NSwzMiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwzMiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDgsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwxNiwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDI0LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDIwMCwwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSw2NSwzMiwxMDYsMzIsNSw3Nyw0LDY0LDMyLDUsNjUsMzIsMTA3LDMzLDIsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzMsNiwzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzMsNywzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsOCwzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzMsOSwzLDY0LDMyLDYsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDYsMzIsNywzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw3LDMyLDgsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOCwzMiw5LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDksMzIsMiwzMiwxLDY1LDgsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDcsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDgsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDksNTUsMywwLDExLDMyLDEsMzIsNSw3Myw0LDY0LDMyLDQsMzIsMSwzMiw1LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSwxODgsMiwxLDUsMTI2LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMywxLDMyLDAsNDEsMywwLDM0LDIsNjYsMzIsOTAsNCwxMjYsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzQsMyw2NiwxLDEzNywzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzQsNCw2Niw3LDEzNywxMjQsMzIsMSw2NiwxMiwxMzcsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDM0LDUsNjYsMTgsMTM3LDEyNCwxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDEsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDEsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMiwxMjQsMzIsMCw2NSw0MCwxMDYsMzIsMiw2NiwzMSwxMzEsMTY3LDE2LDYsMTFdKTtmdW5jdGlvbiB0ZSh0KXtyZXR1cm4hKCFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCl8fCIiPT09dCl9ZnVuY3Rpb24gZWUodCl7bGV0IGU9ITE7aWYodGUodCkpZT0haXNOYU4oTnVtYmVyKHQpKTtlbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9dmFyIHJlPS9ccy87dmFyIG5lPS9eXHMrLztmdW5jdGlvbiBvZSh0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmcmUudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShuZSwiIik6dH12YXIgaWU9TmFOLHVlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGFlPS9eMGJbMDFdKyQvaSxjZT0vXjBvWzAtN10rJC9pLGZlPXBhcnNlSW50O3ZhciBzZT0xLzAsbGU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIHBlKHQpe3JldHVybiB0Pyh0PWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZih6dCh0KSlyZXR1cm4gaWU7aWYodyh0KSl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9dyhlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9b2UodCk7dmFyIHI9YWUudGVzdCh0KTtyZXR1cm4gcnx8Y2UudGVzdCh0KT9mZSh0LnNsaWNlKDIpLHI/Mjo4KTp1ZS50ZXN0KHQpP2llOit0fSh0KSk9PT1zZXx8dD09PS1zZT8odDwwPy0xOjEpKmxlOnQ9PXQ/dDowOjA9PT10P3Q6MH1hc3luYyBmdW5jdGlvbiBoZSh0LGU9e30pe2lmKHI9dCwiW29iamVjdCBCbG9iXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikmJiFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpKXJldHVybiBjb25zb2xlLmxvZygiaW5wIix0KSxQcm9taXNlLnJlamVjdCgiaW5wIGlzIG5vdCBhIEJsb2Igb3IgRmlsZSIpO3ZhciByO2xldCBuPVh0KGUsImNodW5rU2l6ZSIpO2VlKG4pfHwobj02NzEwODg2NCksbj1mdW5jdGlvbih0KXtyZXR1cm4gZWUodCk/cGUodCk6MH0obik7bGV0e2NyZWF0ZTY0Om99PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e2V4cG9ydHM6e21lbTplLHh4aDMyOnIseHhoNjQ6bixpbml0MzI6byx1cGRhdGUzMjppLGRpZ2VzdDMyOnUsaW5pdDY0OmEsdXBkYXRlNjQ6YyxkaWdlc3Q2NDpmfX09dDtsZXQgcz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcik7ZnVuY3Rpb24gbCh0LHIpe2lmKGUuYnVmZmVyLmJ5dGVMZW5ndGg8dCtyKXtjb25zdCBuPU1hdGguY2VpbCgodCtyLWUuYnVmZmVyLmJ5dGVMZW5ndGgpLzY1NTM2KTtlLmdyb3cobikscz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcil9fWZ1bmN0aW9uIHAodCxlLHIsbixvLGkpe2wodCk7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gcy5zZXQodSkscigwLGUpLHUuc2V0KHMuc3ViYXJyYXkoMCx0KSkse3VwZGF0ZShlKXtsZXQgcjtyZXR1cm4gcy5zZXQodSksInN0cmluZyI9PXR5cGVvZiBlPyhsKDMqZS5sZW5ndGgsdCkscj1iLmVuY29kZUludG8oZSxzLnN1YmFycmF5KHQpKS53cml0dGVuKToobChlLmJ5dGVMZW5ndGgsdCkscy5zZXQoZSx0KSxyPWUuYnl0ZUxlbmd0aCksbigwLHQsciksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx0aGlzfSxkaWdlc3Q6KCk9PihzLnNldCh1KSxpKG8oMCkpKX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdD4+PjB9Y29uc3QgeT0ybioqNjRuLTFuO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQmeX1jb25zdCBiPW5ldyBUZXh0RW5jb2RlcixkPTAsZz0wbjtmdW5jdGlvbiBfKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGgocigwLGIuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfWZ1bmN0aW9uIGoodCxlPWcpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksdihuKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9cmV0dXJue2gzMjpfLGgzMlRvU3RyaW5nOih0LGU9ZCk9Pl8odCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpLGgzMlJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksaChyKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlMzI6KHQ9ZCk9PnAoNDgsdCxvLGksdSxoKSxoNjQ6aixoNjRUb1N0cmluZzoodCxlPWcpPT5qKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIiksaDY0UmF3Oih0LGU9Zyk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSx2KG4oMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGU2NDoodD1nKT0+cCg4OCx0LGEsYyxmLHYpfX0oKGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKFp0KSkuaW5zdGFuY2UpfSgpLGk9bygpLHU9MDtmb3IoO3U8dC5zaXplOyl7bGV0IGU9dC5zbGljZSh1LHUrbikscj1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aS51cGRhdGUobmV3IFVpbnQ4QXJyYXkocikpLHUrPW59cmV0dXJuIGkuZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIil9bGV0IGNoZWNrU2xpY2VzSGFzaD1hc3luYyhyLG4sbyk9PntpZigwPT09bXQocikpe3JldHVybntlcnJvcjoibm8gZmlsZVNsaWNlSGFzaHMifX1sZXQgaT1bXTtmb3IobGV0IHU9MDt1PHIubGVuZ3RoO3UrKyl7bGV0IGE9clt1XSxjPXQuam9pbihvLGAke259XyR7YS5pfWApLGY9IiI7YXdhaXQgaGUobmV3IEJsb2IoW2UucmVhZEZpbGVTeW5jKGMpXSkpLnRoZW4oKHQ9PntmPXR9KSkuY2F0Y2goKHQ9Pntjb25zb2xlLmxvZyh0KSxjb25zb2xlLmxvZygiZnNJc0ZpbGUoX3BhdGhGaWxlKSIsYyxZdChjKSl9KSksYS5oPT09ZiYmaS5wdXNoKGEuaSl9cmV0dXJue3N1Y2Nlc3M6e3Nsa3M6aX19fTsKCgpsZXQgaW5zdGFuY2UgPSBudWxsCmZ1bmN0aW9uIGluaXQoaW5wdXQpewoKICAgIC8vaW5pdAogICAgbGV0IHIKICAgIAogICAgICAgIHIgPSB7CiAgICAgICAgICAgIG1haW46IGNoZWNrU2xpY2VzSGFzaAogICAgICAgIH0KICAgICAgICAKCiAgICAvL29uCiAgICAKCiAgICAvL3NhdmUKICAgIGluc3RhbmNlID0gcgoKfQoKZnVuY3Rpb24gc2VuZE1lc3NhZ2UoZGF0YSkgewogICAgCiAgICAgICAgcGFyZW50UG9ydC5wb3N0TWVzc2FnZShkYXRhKQogICAgICAgIAp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBjaGVja1NsaWNlc0hhc2gKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAKICAgICAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICAgICAgbW9kZTogJ2VtaXQnLAogICAgICAgICAgICAgICAgZXZOYW1lOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbXNnOiBlcnIsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgICAgICB9CiAgICAgICAgICAgIAogICAgfQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgPT09ICdjYWxsJyl7CiAgICAgICAgbGV0IHN0YXRlID0gJycKICAgICAgICBsZXQgbXNnID0gbnVsbAoKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL2Z1bgogICAgICAgICAgICBsZXQgZnVuID0gaW5zdGFuY2VbZGF0YS5mdW5dCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKCiAgICAgICAgICAgIC8vZXhlYwogICAgICAgICAgICBhd2FpdCBmdW4oLi4uaW5wdXQpCiAgICAgICAgICAgICAgICAudGhlbigoc3VjKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J3N1Y2Nlc3MnCiAgICAgICAgICAgICAgICAgICAgbXNnPXN1YwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J2Vycm9yJwogICAgICAgICAgICAgICAgICAgIG1zZz1lcnIKICAgICAgICAgICAgICAgIH0pCgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgICAgICBzdGF0ZSA9ICdlcnJvcicKICAgICAgICAgICAgbXNnID0gZXJyCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICBtb2RlOiAncmV0dXJuJywKICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgIGZ1bjogZGF0YS5mdW4sCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICBtc2csCiAgICAgICAgfQogICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICB9Cgp9CgpmdW5jdGlvbiByZWN2TWVzc2FnZShkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJlY3Y6JywgZGF0YSkKCiAgICAvL2RhdGFSZWN2CiAgICBsZXQgZGF0YVJlY3YgPSBkYXRhCgogICAgLy9ydW4KICAgIHJ1bihkYXRhUmVjdikKCn0KCgogICAgICAgIHBhcmVudFBvcnQub24oJ21lc3NhZ2UnLCByZWN2TWVzc2FnZSkKICAgICAgICAKCnRyeXsKICAgIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyKQogICAgfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbicsIGVycikKICAgIH0pCiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikKICAgIH0pCn0KY2F0Y2goZXJyKXt9Cgo=",Buffer.from(L,"base64").toString("utf8"));var L;function I(){let D=new s,L=function(w){try{return new M.Worker(w,{eval:!0})}catch(M){N(M)}}(w);if(!L)return N("invalid worker"),null;function I(){let M=function(){let M,w,s=new Promise((function(){M=arguments[0],w=arguments[1]}));return s.resolve=M,s.reject=w,s}(),w=function(){let M=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,w=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),D=s.length;for(let L=0;L<M;L++)w[L]=s[0|Math.random()*D];return w.join("")}(),s={mode:"call",id:w,fun:"main",input:[...arguments]};return L.postMessage(s),D.once(w,(w=>{"success"===w.state?M.resolve(w.msg):M.reject(w.msg)})),M}function N(M){D.emit("error",M)}return L.on("message",(function(M){let w=M,s=w.mode;"emit"!==s&&"return"!==s||("emit"===s&&D.emit(w.evName,w.msg),"return"===s&&D.emit(w.id,w))})),L.on("error",N),L.on("exit",(M=>{1!==M&&N("exit code["+M+"] !== 1")})),function(){let M={mode:"init",type:"function",input:[...arguments]};L.postMessage(M)}([...arguments]),D.main=I,D.main=I,D.terminate=function(){L?(L.terminate(),L=void 0):N("worker has been terminated")},D}D=async function(){let M=[...arguments],w=I();return await w.main(...M).finally((()=>{w.terminate()}))}}();try{process.on("unhandledRejection",(M=>{console.log("outer:unhandledRejection",M)})),process.on("uncaughtException",(M=>{console.log("outer:uncaughtException",M)})),process.on("uncaughtExceptionMonitor",(M=>{console.log("outer:uncaughtExceptionMonitor",M)}))}catch(M){}return D}(M)}({get exports(){return w},set exports(M){w=M}});var s=w,D={};!function(M,w){M.exports=function(){const M="function"==typeof Buffer,w="function"==typeof TextDecoder?new TextDecoder:void 0,s=(M=>{let w={};return M.forEach(((M,s)=>w[M]=s)),w})(("function"==typeof TextEncoder&&new TextEncoder,Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="))),D=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,L=String.fromCharCode.bind(String),I="function"==typeof Uint8Array.from?Uint8Array.from.bind(Uint8Array):M=>new Uint8Array(Array.prototype.slice.call(M,0)),N=M=>M.replace(/[^A-Za-z0-9\+\/]/g,""),y=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,C=M=>{switch(M.length){case 4:var w=((7&M.charCodeAt(0))<<18|(63&M.charCodeAt(1))<<12|(63&M.charCodeAt(2))<<6|63&M.charCodeAt(3))-65536;return L(55296+(w>>>10))+L(56320+(1023&w));case 3:return L((15&M.charCodeAt(0))<<12|(63&M.charCodeAt(1))<<6|63&M.charCodeAt(2));default:return L((31&M.charCodeAt(0))<<6|63&M.charCodeAt(1))}},i=M=>M.replace(y,C),x=M=>{if(M=M.replace(/\s+/g,""),!D.test(M))throw new TypeError("malformed base64.");M+="==".slice(2-(3&M.length));let w,I,N,y="";for(let D=0;D<M.length;)w=s[M.charAt(D++)]<<18|s[M.charAt(D++)]<<12|(I=s[M.charAt(D++)])<<6|(N=s[M.charAt(D++)]),y+=64===I?L(w>>16&255):64===N?L(w>>16&255,w>>8&255):L(w>>16&255,w>>8&255,255&w);return y},c="function"==typeof atob?M=>atob(N(M)):M?M=>Buffer.from(M,"base64").toString("binary"):x,T=M?M=>I(Buffer.from(M,"base64")):M=>I(c(M).split("").map((M=>M.charCodeAt(0)))),d=M?M=>Buffer.from(M,"base64").toString("utf8"):w?M=>w.decode(T(M)):M=>i(c(M)),z=M=>N(M.replace(/[-_]/g,(M=>"-"==M?"+":"/"))),g=M=>d(z(M)),E=g;var l={};!function(M){var w=Object.prototype.hasOwnProperty,s="~";function D(){}function L(M,w,s){this.fn=M,this.context=w,this.once=s||!1}function I(M,w,D,I,N){if("function"!=typeof D)throw new TypeError("The listener must be a function");var y=new L(D,I||M,N),C=s?s+w:w;return M._events[C]?M._events[C].fn?M._events[C]=[M._events[C],y]:M._events[C].push(y):(M._events[C]=y,M._eventsCount++),M}function N(M,w){0==--M._eventsCount?M._events=new D:delete M._events[w]}function y(){this._events=new D,this._eventsCount=0}Object.create&&(D.prototype=Object.create(null),(new D).__proto__||(s=!1)),y.prototype.eventNames=function(){var M,D,L=[];if(0===this._eventsCount)return L;for(D in M=this._events)w.call(M,D)&&L.push(s?D.slice(1):D);return Object.getOwnPropertySymbols?L.concat(Object.getOwnPropertySymbols(M)):L},y.prototype.listeners=function(M){var w=s?s+M:M,D=this._events[w];if(!D)return[];if(D.fn)return[D.fn];for(var L=0,I=D.length,N=new Array(I);L<I;L++)N[L]=D[L].fn;return N},y.prototype.listenerCount=function(M){var w=s?s+M:M,D=this._events[w];return D?D.fn?1:D.length:0},y.prototype.emit=function(M,w,D,L,I,N){var y=s?s+M:M;if(!this._events[y])return!1;var C,i,x=this._events[y],c=arguments.length;if(x.fn){switch(x.once&&this.removeListener(M,x.fn,void 0,!0),c){case 1:return x.fn.call(x.context),!0;case 2:return x.fn.call(x.context,w),!0;case 3:return x.fn.call(x.context,w,D),!0;case 4:return x.fn.call(x.context,w,D,L),!0;case 5:return x.fn.call(x.context,w,D,L,I),!0;case 6:return x.fn.call(x.context,w,D,L,I,N),!0}for(i=1,C=new Array(c-1);i<c;i++)C[i-1]=arguments[i];x.fn.apply(x.context,C)}else{var T,d=x.length;for(i=0;i<d;i++)switch(x[i].once&&this.removeListener(M,x[i].fn,void 0,!0),c){case 1:x[i].fn.call(x[i].context);break;case 2:x[i].fn.call(x[i].context,w);break;case 3:x[i].fn.call(x[i].context,w,D);break;case 4:x[i].fn.call(x[i].context,w,D,L);break;default:if(!C)for(T=1,C=new Array(c-1);T<c;T++)C[T-1]=arguments[T];x[i].fn.apply(x[i].context,C)}}return!0},y.prototype.on=function(M,w,s){return I(this,M,w,s,!1)},y.prototype.once=function(M,w,s){return I(this,M,w,s,!0)},y.prototype.removeListener=function(M,w,D,L){var I=s?s+M:M;if(!this._events[I])return this;if(!w)return N(this,I),this;var y=this._events[I];if(y.fn)y.fn!==w||L&&!y.once||D&&y.context!==D||N(this,I);else{for(var C=0,i=[],x=y.length;C<x;C++)(y[C].fn!==w||L&&!y[C].once||D&&y[C].context!==D)&&i.push(y[C]);i.length?this._events[I]=1===i.length?i[0]:i:N(this,I)}return this},y.prototype.removeAllListeners=function(M){var w;return M?(w=s?s+M:M,this._events[w]&&N(this,w)):(this._events=new D,this._eventsCount=0),this},y.prototype.off=y.prototype.removeListener,y.prototype.addListener=y.prototype.on,y.prefixed=s,y.EventEmitter=y,M.exports=y}({get exports(){return l},set exports(M){l=M}});var A=l;let Y;!function(){if("browser"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let M=E("CgoKInVzZSBzdHJpY3QiO3ZhciB0PXJlcXVpcmUoInBhdGgiKSxlPXJlcXVpcmUoImZzIikscj1PYmplY3QucHJvdG90eXBlO3ZhciBuLG8saT0obj1PYmplY3Qua2V5cyxvPU9iamVjdCxmdW5jdGlvbih0KXtyZXR1cm4gbihvKHQpKX0pLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhKHQpe2lmKG49KGU9dCkmJmUuY29uc3RydWN0b3IsZSE9PSgiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5wcm90b3R5cGV8fHIpKXJldHVybiBpKHQpO3ZhciBlLG4sbz1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KHQpKXUuY2FsbCh0LGEpJiYiY29uc3RydWN0b3IiIT1hJiZvLnB1c2goYSk7cmV0dXJuIG99dmFyIGM9Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLGY9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPWN8fGZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbD1zLlN5bWJvbCxwPU9iamVjdC5wcm90b3R5cGUsaD1wLmhhc093blByb3BlcnR5LHk9cC50b1N0cmluZyx2PWw/bC50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgZD0iW29iamVjdCBOdWxsXSIsZz0iW29iamVjdCBVbmRlZmluZWRdIixfPWw/bC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gaih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10P2c6ZDpfJiZfIGluIE9iamVjdCh0KT9mdW5jdGlvbih0KXt2YXIgZT1oLmNhbGwodCx2KSxyPXRbdl07dHJ5e3Rbdl09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKHQpe312YXIgbz15LmNhbGwodCk7cmV0dXJuIG4mJihlP3Rbdl09cjpkZWxldGUgdFt2XSksb30odCk6ZnVuY3Rpb24odCl7cmV0dXJuIGIuY2FsbCh0KX0odCl9ZnVuY3Rpb24gdyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgUz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsTz0iW29iamVjdCBGdW5jdGlvbl0iLG09IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIix4PSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24geih0KXtpZighdyh0KSlyZXR1cm4hMTt2YXIgZT1qKHQpO3JldHVybiBlPT1PfHxlPT1tfHxlPT1TfHxlPT14fXZhciBBLCQ9c1siX19jb3JlLWpzX3NoYXJlZF9fIl0sRj0oQT0vW14uXSskLy5leGVjKCQmJiQua2V5cyYmJC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrQToiIjt2YXIgUD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gTCh0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIFAuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIGs9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sRT1GdW5jdGlvbi5wcm90b3R5cGUsST1PYmplY3QucHJvdG90eXBlLE49RS50b1N0cmluZyxUPUkuaGFzT3duUHJvcGVydHksTT1SZWdFeHAoIl4iK04uY2FsbChUKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBSKHQpe3JldHVybiEoIXcodCl8fGZ1bmN0aW9uKHQpe3JldHVybiEhRiYmRiBpbiB0fSh0KSkmJih6KHQpP006aykudGVzdChMKHQpKX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gUihyKT9yOnZvaWQgMH12YXIgQj1VKHMsIkRhdGFWaWV3IiksQz1VKHMsIk1hcCIpLEQ9VShzLCJQcm9taXNlIiksVz1VKHMsIlNldCIpLHE9VShzLCJXZWFrTWFwIiksVj0iW29iamVjdCBNYXBdIixHPSJbb2JqZWN0IFByb21pc2VdIixIPSJbb2JqZWN0IFNldF0iLEo9IltvYmplY3QgV2Vha01hcF0iLEs9IltvYmplY3QgRGF0YVZpZXddIixRPUwoQiksWD1MKEMpLFk9TChEKSxaPUwoVyksdHQ9TChxKSxldD1qOyhCJiZldChuZXcgQihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9S3x8QyYmZXQobmV3IEMpIT1WfHxEJiZldChELnJlc29sdmUoKSkhPUd8fFcmJmV0KG5ldyBXKSE9SHx8cSYmZXQobmV3IHEpIT1KKSYmKGV0PWZ1bmN0aW9uKHQpe3ZhciBlPWoodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/TChyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIFE6cmV0dXJuIEs7Y2FzZSBYOnJldHVybiBWO2Nhc2UgWTpyZXR1cm4gRztjYXNlIFo6cmV0dXJuIEg7Y2FzZSB0dDpyZXR1cm4gSn1yZXR1cm4gZX0pO3ZhciBydD1ldCxudD05MDA3MTk5MjU0NzQwOTkxO2Z1bmN0aW9uIG90KHQpe3JldHVybiBudWxsIT10JiZmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+LTEmJnQlMT09MCYmdDw9bnR9KHQubGVuZ3RoKSYmIXoodCl9dmFyIGl0PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdXQodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH12YXIgYXQ9IltvYmplY3QgU3RyaW5nXSI7dmFyIGN0LGZ0PShjdD0ibGVuZ3RoIixmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtjdF19KSxzdD1SZWdFeHAoIltcXHUyMDBkXFx1ZDgwMC1cXHVkZmZmXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXFx1ZmUwZVxcdWZlMGZdIik7dmFyIGx0PSJcXHVkODAwLVxcdWRmZmYiLHB0PSJbIitsdCsiXSIsaHQ9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIix5dD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix2dD0iW14iK2x0KyJdIixidD0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsZHQ9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGd0PSIoPzoiK2h0KyJ8Iit5dCsiKSIrIj8iLF90PSJbXFx1ZmUwZVxcdWZlMGZdPyIsanQ9X3QrZ3QrKCIoPzpcXHUyMDBkKD86IitbdnQsYnQsZHRdLmpvaW4oInwiKSsiKSIrX3QrZ3QrIikqIiksd3Q9Iig/OiIrW3Z0K2h0KyI/IixodCxidCxkdCxwdF0uam9pbigifCIpKyIpIixTdD1SZWdFeHAoeXQrIig/PSIreXQrIil8Iit3dCtqdCwiZyIpO2Z1bmN0aW9uIE90KHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gc3QudGVzdCh0KX0odCk/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVN0Lmxhc3RJbmRleD0wO1N0LnRlc3QodCk7KSsrZTtyZXR1cm4gZX0odCk6ZnQodCl9ZnVuY3Rpb24gbXQodCl7aWYobnVsbD09dClyZXR1cm4gMDtpZihvdCh0KSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mKGU9dCl8fCFpdChlKSYmdXQoZSkmJmooZSk9PWF0P090KHQpOnQubGVuZ3RoO3ZhciBlLHI9cnQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PXJ8fCJbb2JqZWN0IFNldF0iPT1yP3Quc2l6ZTphKHQpLmxlbmd0aH12YXIgeHQ9IltvYmplY3QgU3ltYm9sXSI7ZnVuY3Rpb24genQodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHx1dCh0KSYmaih0KT09eHR9dmFyIEF0PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLCR0PS9eXHcqJC87dmFyIEZ0PVUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgUHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBrdCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBFdCh0LGUpe2Zvcih2YXIgcixuLG89dC5sZW5ndGg7by0tOylpZigocj10W29dWzBdKT09PShuPWUpfHxyIT1yJiZuIT1uKXJldHVybiBvO3JldHVybi0xfWt0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189RnQ/RnQobnVsbCk6e30sdGhpcy5zaXplPTB9LGt0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LGt0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihGdCl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBQdC5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LGt0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gRnQ/dm9pZCAwIT09ZVt0XTpMdC5jYWxsKGUsdCl9LGt0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPUZ0JiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciBJdD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIE50KHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBNdCh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1OdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxOdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1FdChlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTpJdC5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMCl9LE50LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPUV0KGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sTnQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gRXQodGhpcy5fX2RhdGFfXyx0KT4tMX0sTnQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1FdChyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfSxNdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBrdCxtYXA6bmV3KEN8fE50KSxzdHJpbmc6bmV3IGt0fX0sTXQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT1UdCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBUdCh0aGlzLHQpLmdldCh0KX0sTXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gVHQodGhpcyx0KS5oYXModCl9LE10LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1UdCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfTt2YXIgUnQ9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO2Z1bmN0aW9uIFV0KHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoUnQpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89ZT9lLmFwcGx5KHRoaXMsbik6blswXSxpPXIuY2FjaGU7aWYoaS5oYXMobykpcmV0dXJuIGkuZ2V0KG8pO3ZhciB1PXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1pLnNldChvLHUpfHxpLHV9O3JldHVybiByLmNhY2hlPW5ldyhVdC5DYWNoZXx8TXQpLHJ9VXQuQ2FjaGU9TXQ7dmFyIEJ0PS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEN0PS9cXChcXCk/L2csRHQ9ZnVuY3Rpb24odCl7dmFyIGU9VXQodCwoZnVuY3Rpb24odCl7cmV0dXJuIDUwMD09PXIuc2l6ZSYmci5jbGVhcigpLHR9KSkscj1lLmNhY2hlO3JldHVybiBlfSgoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShCdCwoZnVuY3Rpb24odCxyLG4sbyl7ZS5wdXNoKG4/by5yZXBsYWNlKEN0LCIkMSIpOnJ8fHQpfSkpLGV9KSksV3Q9RHQ7dmFyIHF0PTEvMCxWdD1sP2wucHJvdG90eXBlOnZvaWQgMCxHdD1WdD9WdC50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gSHQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKGl0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPUFycmF5KG4pOysrcjxuOylvW3JdPWUodFtyXSxyLHQpO3JldHVybiBvfSh0LEh0KSsiIjtpZih6dCh0KSlyZXR1cm4gR3Q/R3QuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tcXQ/Ii0wIjplfWZ1bmN0aW9uIEp0KHQsZSl7cmV0dXJuIGl0KHQpP3Q6ZnVuY3Rpb24odCxlKXtpZihpdCh0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4hKCJudW1iZXIiIT1yJiYic3ltYm9sIiE9ciYmImJvb2xlYW4iIT1yJiZudWxsIT10JiYhenQodCkpfHwkdC50ZXN0KHQpfHwhQXQudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9KHQsZSk/W3RdOld0KGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10PyIiOkh0KHQpfSh0KSl9dmFyIEt0PTEvMDtmdW5jdGlvbiBRdCh0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fHp0KHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1LdD8iLTAiOmV9ZnVuY3Rpb24gWHQodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1KdChlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbUXQoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9KHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufWZ1bmN0aW9uIFl0KHQpe3JldHVybiBmdW5jdGlvbih0LGU9e30pe2xldCByPVh0KGUsImZzIik7cmV0dXJuISFyLmV4aXN0c1N5bmModCkmJiFyLmxzdGF0U3luYyh0KS5pc0RpcmVjdG9yeSgpJiYhci5sc3RhdFN5bmModCkuaXNTeW1ib2xpY0xpbmsoKX0odCx7ZnM6ZX0pfWNvbnN0IFp0PW5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDQ4LDgsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI3LDAsOTYsMiwxMjcsMTI3LDAsOTYsMSwxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNiwxLDEyNiw5NiwzLDEyNiwxMjcsMTI3LDEsMTI2LDk2LDIsMTI3LDEyNiwwLDk2LDEsMTI3LDEsMTI2LDMsMTEsMTAsMCwwLDIsMSwzLDQsNSw2LDEsNyw1LDMsMSwwLDEsNyw4NSw5LDMsMTA5LDEwMSwxMDksMiwwLDUsMTIwLDEyMCwxMDQsNTEsNTAsMCwwLDYsMTA1LDExMCwxMDUsMTE2LDUxLDUwLDAsMiw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTEsNTAsMCwzLDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTEsNTAsMCw0LDUsMTIwLDEyMCwxMDQsNTQsNTIsMCw1LDYsMTA1LDExMCwxMDUsMTE2LDU0LDUyLDAsNyw4LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNTQsNTIsMCw4LDgsMTAwLDEwNSwxMDMsMTAxLDExNSwxMTYsNTQsNTIsMCw5LDEwLDI1MSwyMiwxMCwyNDIsMSwxLDQsMTI3LDMyLDAsMzIsMSwxMDYsMzMsMywzMiwxLDY1LDE2LDc5LDQsMTI3LDMyLDMsNjUsMTYsMTA3LDMzLDYsMzIsMiw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsMzMsMywzMiwyLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNywzMyw0LDMyLDIsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw0LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw0LDMyLDIsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsNSwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw2LDMyLDAsNjUsNCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjUsMTIsMTE5LDMyLDUsNjUsMTgsMTE5LDEwNiwzMiw0LDY1LDcsMTE5LDEwNiwzMiwzLDY1LDEsMTE5LDEwNiw1LDMyLDIsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDEsMTA2LDMyLDAsMzIsMSw2NSwxNSwxMTMsMTYsMSwxMSwxNDYsMSwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDEsNjUsNCwxMDYsMzIsMiw3NSw2OSw0LDY0LDMyLDAsMzIsMSw0MCwyLDAsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMTA2LDY1LDE3LDExOSw2NSwxNzUsMjE0LDIxMSwxOTAsMiwxMDgsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTIsMSwxMSwxMSwzLDY0LDMyLDEsMzIsMiw3OSw2OSw0LDY0LDMyLDAsMzIsMSw0NSwwLDAsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA4LDEwNiw2NSwxMSwxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjUsMTUsMTE4LDExNSw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwzNCwwLDY1LDEzLDExOCwzMiwwLDExNSw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwzNCwwLDY1LDE2LDExOCwzMiwwLDExNSwxMSw2MywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NSwxNjgsMTM2LDE0MSwxNjEsMiwxMDYsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDEsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiwxLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiw1NCwyLDAsMTEsMTk1LDQsMSw2LDEyNywzMiwxLDMyLDIsMTA2LDMzLDYsMzIsMCw2NSwyNCwxMDYsMzMsNCwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDAsMiwwLDMyLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDQsMTA2LDM0LDUsMzIsNSw0MCwyLDAsMzIsMiw2NSwxNiw3OSwzMiwwLDQwLDIsMCw2NSwxNiw3OSwxMTQsMTE0LDU0LDIsMCwzMiwyLDMyLDMsMTA2LDY1LDE2LDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDE2LDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDQsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsOCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSwxMiwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsNDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDMyLDYsNjUsMTYsMTA3LDc3LDQsNjQsMzIsNiw2NSwxNiwxMDcsMzMsOCwzMiwwLDY1LDgsMTA2LDQwLDIsMCwzMywyLDMyLDAsNjUsMTIsMTA2LDQwLDIsMCwzMywzLDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMyw1LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCwzMyw3LDMsNjQsMzIsMiwzMiwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDIsMzIsMywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMywzMiw1LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDcsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDcsMzIsOCwzMiwxLDY1LDQsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDIsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDMyLDMsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDUsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDcsNTQsMiwwLDExLDMyLDEsMzIsNiw3Myw0LDY0LDMyLDQsMzIsMSwzMiw2LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDQwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSw5NywxLDEsMTI3LDMyLDAsNjUsMTYsMTA2LDQwLDIsMCwzMywxLDMyLDAsNjUsNCwxMDYsNDAsMiwwLDQsMTI3LDMyLDEsNjUsMTIsMTE5LDMyLDAsNjUsMjAsMTA2LDQwLDIsMCw2NSwxOCwxMTksMTA2LDMyLDAsNjUsMTIsMTA2LDQwLDIsMCw2NSw3LDExOSwxMDYsMzIsMCw2NSw4LDEwNiw0MCwyLDAsNjUsMSwxMTksMTA2LDUsMzIsMSw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMCw0MCwyLDAsMTA2LDMyLDAsNjUsMjQsMTA2LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwxNiwxLDExLDI1NSwzLDIsMywxMjYsMSwxMjcsMzIsMCwzMiwxLDEwNiwzMyw2LDMyLDEsNjUsMzIsNzksNCwxMjYsMzIsNiw2NSwzMiwxMDcsMzMsNiwzMiwyLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDMzLDMsMzIsMiw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSwzMyw0LDMyLDIsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDMsMzIsNCwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw0LDMyLDIsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMiwzMiw1LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDUsMzIsNiwzMiwwLDY1LDgsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY2LDEyLDEzNywzMiw1LDY2LDE4LDEzNywxMjQsMzIsNCw2Niw3LDEzNywxMjQsMzIsMyw2NiwxLDEzNywxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDIsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDIsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMSwxNzMsMTI0LDMyLDAsMzIsMSw2NSwzMSwxMTMsMTYsNiwxMSwxMzQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMiwzLDY0LDMyLDIsMzIsMSw2NSw4LDEwNiw3OSw0LDY0LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMyLDAsMTMzLDY2LDI3LDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMzLDAsMzIsMSw2NSw4LDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMSw2NSw0LDEwNiwzMiwyLDc3LDQsNjQsMzIsMCwzMiwxLDUzLDIsMCw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwyMywxMzcsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjQsMzMsMCwzMiwxLDY1LDQsMTA2LDMzLDEsMTEsMyw2NCwzMiwxLDMyLDIsNzMsNCw2NCwzMiwwLDMyLDEsNDksMCwwLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI2LDEzMyw2NiwxMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NiwzMywxMzYsMTMzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDM0LDAsMzIsMCw2NiwyOSwxMzYsMTMzLDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI2LDM0LDAsMzIsMCw2NiwzMiwxMzYsMTMzLDExLDc3LDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY2LDIxNCwyMzUsMTMwLDIzOCwyMzQsMjUzLDEzNywyNDUsMjI0LDAsMTI0LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiwxLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiwxLDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiwxLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDU1LDMsMCwxMSwyNDQsNCwyLDMsMTI3LDQsMTI2LDMyLDEsMzIsMiwxMDYsMzMsNSwzMiwwLDY1LDQwLDEwNiwzMyw0LDMyLDAsNjUsMjAwLDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MSwzLDAsMzIsMiwxNzMsMTI0LDU1LDMsMCwzMiwyLDMyLDMsMTA2LDY1LDMyLDczLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDMyLDIsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwyLDMyLDMsMTA2LDU0LDIsMCwxNSwxMSwzMiwzLDQsNjQsMzIsMywzMiw0LDEwNiwzMiwxLDY1LDMyLDMyLDMsMTA3LDM0LDIsMjUyLDEwLDAsMCwzMiwwLDY1LDgsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsOCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDE2LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMjQsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjAwLDAsMTA2LDY1LDAsNTQsMiwwLDMyLDEsMzIsMiwxMDYsMzMsMSwxMSwzMiwxLDY1LDMyLDEwNiwzMiw1LDc3LDQsNjQsMzIsNSw2NSwzMiwxMDcsMzMsMiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzMyw2LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzMyw3LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMyw4LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzMyw5LDMsNjQsMzIsNiwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNiwzMiw3LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDcsMzIsOCwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw4LDMyLDksMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOSwzMiwyLDMyLDEsNjUsOCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsNyw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsOCw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsOSw1NSwzLDAsMTEsMzIsMSwzMiw1LDczLDQsNjQsMzIsNCwzMiwxLDMyLDUsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDE4OCwyLDEsNSwxMjYsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDEsMzIsMCw0MSwzLDAsMzQsMiw2NiwzMiw5MCw0LDEyNiwzMiwwLDY1LDgsMTA2LDQxLDMsMCwzNCwzLDY2LDEsMTM3LDMyLDAsNjUsMTYsMTA2LDQxLDMsMCwzNCw0LDY2LDcsMTM3LDEyNCwzMiwxLDY2LDEyLDEzNywzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzQsNSw2NiwxOCwxMzcsMTI0LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMSw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwyLDEyNCwzMiwwLDY1LDQwLDEwNiwzMiwyLDY2LDMxLDEzMSwxNjcsMTYsNiwxMV0pO2Z1bmN0aW9uIHRlKHQpe3JldHVybiEoIWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8IiI9PT10KX1mdW5jdGlvbiBlZSh0KXtsZXQgZT0hMTtpZih0ZSh0KSllPSFpc05hTihOdW1iZXIodCkpO2Vsc2UgaWYoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpKXtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH0odCkpcmV0dXJuITE7ZT0hMH1yZXR1cm4gZX12YXIgcmU9L1xzLzt2YXIgbmU9L15ccysvO2Z1bmN0aW9uIG9lKHQpe3JldHVybiB0P3Quc2xpY2UoMCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZyZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfSh0KSsxKS5yZXBsYWNlKG5lLCIiKTp0fXZhciBpZT1OYU4sdWU9L15bLStdMHhbMC05YS1mXSskL2ksYWU9L14wYlswMV0rJC9pLGNlPS9eMG9bMC03XSskL2ksZmU9cGFyc2VJbnQ7dmFyIHNlPTEvMCxsZT0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gcGUodCl7cmV0dXJuIHQ/KHQ9ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKHp0KHQpKXJldHVybiBpZTtpZih3KHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD13KGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1vZSh0KTt2YXIgcj1hZS50ZXN0KHQpO3JldHVybiByfHxjZS50ZXN0KHQpP2ZlKHQuc2xpY2UoMikscj8yOjgpOnVlLnRlc3QodCk/aWU6K3R9KHQpKT09PXNlfHx0PT09LXNlPyh0PDA/LTE6MSkqbGU6dD09dD90OjA6MD09PXQ/dDowfWFzeW5jIGZ1bmN0aW9uIGhlKHQsZT17fSl7aWYocj10LCJbb2JqZWN0IEJsb2JdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSYmIWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEZpbGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkpcmV0dXJuIGNvbnNvbGUubG9nKCJpbnAiLHQpLFByb21pc2UucmVqZWN0KCJpbnAgaXMgbm90IGEgQmxvYiBvciBGaWxlIik7dmFyIHI7bGV0IG49WHQoZSwiY2h1bmtTaXplIik7ZWUobil8fChuPTY3MTA4ODY0KSxuPWZ1bmN0aW9uKHQpe3JldHVybiBlZSh0KT9wZSh0KTowfShuKTtsZXR7Y3JlYXRlNjQ6b309YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7ZXhwb3J0czp7bWVtOmUseHhoMzI6cix4eGg2NDpuLGluaXQzMjpvLHVwZGF0ZTMyOmksZGlnZXN0MzI6dSxpbml0NjQ6YSx1cGRhdGU2NDpjLGRpZ2VzdDY0OmZ9fT10O2xldCBzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKTtmdW5jdGlvbiBsKHQscil7aWYoZS5idWZmZXIuYnl0ZUxlbmd0aDx0K3Ipe2NvbnN0IG49TWF0aC5jZWlsKCh0K3ItZS5idWZmZXIuYnl0ZUxlbmd0aCkvNjU1MzYpO2UuZ3JvdyhuKSxzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKX19ZnVuY3Rpb24gcCh0LGUscixuLG8saSl7bCh0KTtjb25zdCB1PW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBzLnNldCh1KSxyKDAsZSksdS5zZXQocy5zdWJhcnJheSgwLHQpKSx7dXBkYXRlKGUpe2xldCByO3JldHVybiBzLnNldCh1KSwic3RyaW5nIj09dHlwZW9mIGU/KGwoMyplLmxlbmd0aCx0KSxyPWIuZW5jb2RlSW50byhlLHMuc3ViYXJyYXkodCkpLndyaXR0ZW4pOihsKGUuYnl0ZUxlbmd0aCx0KSxzLnNldChlLHQpLHI9ZS5ieXRlTGVuZ3RoKSxuKDAsdCxyKSx1LnNldChzLnN1YmFycmF5KDAsdCkpLHRoaXN9LGRpZ2VzdDooKT0+KHMuc2V0KHUpLGkobygwKSkpfX1mdW5jdGlvbiBoKHQpe3JldHVybiB0Pj4+MH1jb25zdCB5PTJuKio2NG4tMW47ZnVuY3Rpb24gdih0KXtyZXR1cm4gdCZ5fWNvbnN0IGI9bmV3IFRleHRFbmNvZGVyLGQ9MCxnPTBuO2Z1bmN0aW9uIF8odCxlPWQpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksaChyKDAsYi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9ZnVuY3Rpb24gaih0LGU9Zyl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSx2KG4oMCxiLmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1yZXR1cm57aDMyOl8saDMyVG9TdHJpbmc6KHQsZT1kKT0+Xyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIiksaDMyUmF3Oih0LGU9ZCk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSxoKHIoMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGUzMjoodD1kKT0+cCg0OCx0LG8saSx1LGgpLGg2NDpqLGg2NFRvU3RyaW5nOih0LGU9Zyk9PmoodCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKSxoNjRSYXc6KHQsZT1nKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLHYobigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTY0Oih0PWcpPT5wKDg4LHQsYSxjLGYsdil9fSgoYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoWnQpKS5pbnN0YW5jZSl9KCksaT1vKCksdT0wO2Zvcig7dTx0LnNpemU7KXtsZXQgZT10LnNsaWNlKHUsdStuKSxyPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtpLnVwZGF0ZShuZXcgVWludDhBcnJheShyKSksdSs9bn1yZXR1cm4gaS5kaWdlc3QoKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKX1sZXQgY2hlY2tTbGljZXNIYXNoPWFzeW5jKHIsbixvKT0+e2lmKDA9PT1tdChyKSl7cmV0dXJue2Vycm9yOiJubyBmaWxlU2xpY2VIYXNocyJ9fWxldCBpPVtdO2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgYT1yW3VdLGM9dC5qb2luKG8sYCR7bn1fJHthLml9YCksZj0iIjthd2FpdCBoZShuZXcgQmxvYihbZS5yZWFkRmlsZVN5bmMoYyldKSkudGhlbigodD0+e2Y9dH0pKS5jYXRjaCgodD0+e2NvbnNvbGUubG9nKHQpLGNvbnNvbGUubG9nKCJmc0lzRmlsZShfcGF0aEZpbGUpIixjLFl0KGMpKX0pKSxhLmg9PT1mJiZpLnB1c2goYS5pKX1yZXR1cm57c3VjY2Vzczp7c2xrczppfX19OwoKCmxldCBpbnN0YW5jZSA9IG51bGwKZnVuY3Rpb24gaW5pdChpbnB1dCl7CgogICAgLy9pbml0CiAgICBsZXQgcgogICAgCiAgICAgICAgciA9IHsKICAgICAgICAgICAgbWFpbjogY2hlY2tTbGljZXNIYXNoCiAgICAgICAgfQogICAgICAgIAoKICAgIC8vb24KICAgIAoKICAgIC8vc2F2ZQogICAgaW5zdGFuY2UgPSByCgp9CgpmdW5jdGlvbiBzZW5kTWVzc2FnZShkYXRhKSB7CiAgICAKICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKGRhdGEpCiAgICAgICAgCn0KCmFzeW5jIGZ1bmN0aW9uIHJ1bihkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJ1bicsZGF0YSkKCiAgICAvL21vZGUKICAgIGxldCBtb2RlID0gZGF0YS5tb2RlCgogICAgLy9jaGVjawogICAgaWYobW9kZSAhPT0gJ2luaXQnICYmIG1vZGUgIT09ICdjYWxsJyl7CiAgICAgICAgcmV0dXJuCiAgICB9CgogICAgLy9pbml0CiAgICBpZihtb2RlID09PSAnaW5pdCcpewogICAgICAgIAogICAgICAgIHRyeXsKCiAgICAgICAgICAgIC8vdHlwZQogICAgICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CiAgICAKICAgICAgICAgICAgLy9pbnN0YW5jZQogICAgICAgICAgICBpZih0eXBlID09PSAnZnVuY3Rpb24nKXsKICAgICAgICAgICAgICAgIGluaXQoLi4uaW5wdXQpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZih0eXBlID09PSAnb2JqZWN0Jyl7CiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGNoZWNrU2xpY2VzSGFzaAogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgIAogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgICAgIH0KICAgICAgICAgICAgCiAgICB9CgogICAgLy9jaGVjawogICAgaWYobW9kZSA9PT0gJ2NhbGwnKXsKICAgICAgICBsZXQgc3RhdGUgPSAnJwogICAgICAgIGxldCBtc2cgPSBudWxsCgogICAgICAgIHRyeXsKCiAgICAgICAgICAgIC8vZnVuCiAgICAgICAgICAgIGxldCBmdW4gPSBpbnN0YW5jZVtkYXRhLmZ1bl0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjCiAgICAgICAgICAgIGF3YWl0IGZ1biguLi5pbnB1dCkKICAgICAgICAgICAgICAgIC50aGVuKChzdWMpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nc3VjY2VzcycKICAgICAgICAgICAgICAgICAgICBtc2c9c3VjCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nZXJyb3InCiAgICAgICAgICAgICAgICAgICAgbXNnPWVycgogICAgICAgICAgICAgICAgfSkKCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgICAgIHN0YXRlID0gJ2Vycm9yJwogICAgICAgICAgICBtc2cgPSBlcnIKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICBpZDogZGF0YS5pZCwKICAgICAgICAgICAgZnVuOiBkYXRhLmZ1biwKICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgIG1zZywKICAgICAgICB9CiAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgIH0KCn0KCmZ1bmN0aW9uIHJlY3ZNZXNzYWdlKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcmVjdjonLCBkYXRhKQoKICAgIC8vZGF0YVJlY3YKICAgIGxldCBkYXRhUmVjdiA9IGRhdGEKCiAgICAvL3J1bgogICAgcnVuKGRhdGFSZWN2KQoKfQoKCiAgICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZWN2TWVzc2FnZShlLmRhdGEpCiAgICAgICAgfQogICAgICAgIAoKdHJ5ewogICAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpCiAgICB9KQogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKQogICAgfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgZXJyKQogICAgfSkKfQpjYXRjaChlcnIpe30KCg==");function w(){let w=new A,s=function(M){try{let w=new Blob([M]),s=window.URL||window.webkitURL;return new Worker(s.createObjectURL(w))}catch(M){L(M)}}(M);if(!s)return L("invalid worker"),null;function D(){let M=function(){let M,w,s=new Promise((function(){M=arguments[0],w=arguments[1]}));return s.resolve=M,s.reject=w,s}(),D=function(){let M=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,w=[],s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),D=s.length;for(let L=0;L<M;L++)w[L]=s[0|Math.random()*D];return w.join("")}(),L={mode:"call",id:D,fun:"main",input:[...arguments]};return s.postMessage(L),w.once(D,(w=>{"success"===w.state?M.resolve(w.msg):M.reject(w.msg)})),M}function L(M){w.emit("error",M)}return s.onmessage=function(M){!function(M){let s=M,D=s.mode;"emit"!==D&&"return"!==D||("emit"===D&&w.emit(s.evName,s.msg),"return"===D&&w.emit(s.id,s))}(M.data)},s.onerror=L,s.onmessageerror=function(M){L(M.data)},function(){let M={mode:"init",type:"function",input:[...arguments]};s.postMessage(M)}([...arguments]),w.main=D,w.main=D,w.terminate=function(){s?(s.terminate(),s=void 0):L("worker has been terminated")},w}Y=async function(){let M=[...arguments],s=w();return await s.main(...M).finally((()=>{s.terminate()}))}}();try{process.on("unhandledRejection",(M=>{console.log("outer:unhandledRejection",M)})),process.on("uncaughtException",(M=>{console.log("outer:uncaughtException",M)})),process.on("uncaughtExceptionMonitor",(M=>{console.log("outer:uncaughtExceptionMonitor",M)}))}catch(M){}return Y}()}({get exports(){return D},set exports(M){D=M}});var L=D;let I;return I="undefined"!=typeof window&&void 0!==window.document?L:s,I}));
@@ -0,0 +1,109 @@
1
+ import path from 'path'
2
+ import fs from 'fs'
3
+ import each from 'lodash-es/each.js'
4
+ import size from 'lodash-es/size.js'
5
+ import isnum from 'wsemi/src/isnum.mjs'
6
+ import fsIsFile from 'wsemi/src/fsIsFile.mjs'
7
+ import fsGetFilesInFolder from 'wsemi/src/fsGetFilesInFolder.mjs'
8
+ import fsGetFileXxHash from 'wsemi/src/fsGetFileXxHash.mjs'
9
+
10
+
11
+ let checkTotalHash = async (fileSize, sizeSlice, fileHash, pathUploadTemp) => {
12
+
13
+ //pathFile
14
+ let pathFile = path.join(pathUploadTemp, fileHash)
15
+ // console.log('pathFile', pathFile)
16
+
17
+ //bAllExist
18
+ let bAllExist = false
19
+ if (true) {
20
+ // console.log(`check exist for pathFile[${pathFile}]...`)
21
+
22
+ bAllExist = fsIsFile(pathFile)
23
+
24
+ // console.log(`check exist for pathFile[${pathFile}] done`, bAllExist)
25
+ }
26
+
27
+ //check
28
+ if (!isnum(fileSize)) {
29
+ // console.log('invalid fileSize in payload')
30
+ let r = {
31
+ error: 'invalid fileSize in payload',
32
+ }
33
+ return r
34
+ }
35
+
36
+ //bAllSize
37
+ let bAllSize = false
38
+ if (bAllExist) {
39
+ // console.log(`check size for pathFile[${pathFile}]...`)
40
+
41
+ //_fileSize
42
+ let stats = fs.statSync(pathFile)
43
+ let _fileSize = stats.size
44
+
45
+ //bAllSize
46
+ bAllSize = fileSize === _fileSize
47
+
48
+ // console.log(`check size for pathFile[${pathFile}] done`, bAllSize)
49
+ }
50
+
51
+ //bAllHash
52
+ let bAllHash = false
53
+ if (bAllExist && bAllSize) {
54
+ // console.log(`check hash for pathFile[${pathFile}]...`)
55
+
56
+ //bAllHash
57
+ await fsGetFileXxHash(pathFile)
58
+ .then((_fileHash) => {
59
+ bAllHash = fileHash === _fileHash
60
+ })
61
+ .catch((err) => {
62
+ console.log(err)
63
+ console.log(`fsIsFile(pathFile)`, pathFile, fsIsFile(pathFile))
64
+ bAllHash = false
65
+ })
66
+
67
+ // console.log(`check hash for pathFile[${pathFile}] done`, bAllHash)
68
+ }
69
+
70
+ //vfps
71
+ let vfps = fsGetFilesInFolder(pathUploadTemp)
72
+ // console.log('vfps', vfps)
73
+
74
+ //slks
75
+ let slks = []
76
+ if (true) {
77
+ each(vfps, (v, k) => {
78
+ let b1 = (v.name).indexOf(`${fileHash}_`) >= 0
79
+ let stats = fs.statSync(v.path)
80
+ let b2 = stats.size === sizeSlice
81
+ let b = b1 && b2
82
+ if (b) {
83
+ slks.push(k)
84
+ }
85
+ })
86
+ }
87
+ // console.log('slks', slks)
88
+
89
+ //bSls
90
+ let bSls = size(slks) > 0
91
+ // console.log('bSls', bSls)
92
+
93
+ //r
94
+ let r = {
95
+ success: {
96
+ path: pathFile,
97
+ bAllExist,
98
+ bAllSize,
99
+ bAllHash,
100
+ bSls,
101
+ slks,
102
+ },
103
+ }
104
+
105
+ return r
106
+ }
107
+
108
+
109
+ export default checkTotalHash
@@ -0,0 +1 @@
1
+ !function(M,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("worker_threads")):"function"==typeof define&&define.amd?define(["worker_threads"],s):(M="undefined"!=typeof globalThis?globalThis:M||self).checkTotalHash=s(M.worker_threads)}(this,(function(M){"use strict";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var s={};!function(s,w){s.exports=function(M){var s={};!function(M){var s=Object.prototype.hasOwnProperty,w="~";function L(){}function I(M,s,w){this.fn=M,this.context=s,this.once=w||!1}function D(M,s,L,D,y){if("function"!=typeof L)throw new TypeError("The listener must be a function");var i=new I(L,D||M,y),d=w?w+s:s;return M._events[d]?M._events[d].fn?M._events[d]=[M._events[d],i]:M._events[d].push(i):(M._events[d]=i,M._eventsCount++),M}function y(M,s){0==--M._eventsCount?M._events=new L:delete M._events[s]}function i(){this._events=new L,this._eventsCount=0}Object.create&&(L.prototype=Object.create(null),(new L).__proto__||(w=!1)),i.prototype.eventNames=function(){var M,L,I=[];if(0===this._eventsCount)return I;for(L in M=this._events)s.call(M,L)&&I.push(w?L.slice(1):L);return Object.getOwnPropertySymbols?I.concat(Object.getOwnPropertySymbols(M)):I},i.prototype.listeners=function(M){var s=w?w+M:M,L=this._events[s];if(!L)return[];if(L.fn)return[L.fn];for(var I=0,D=L.length,y=new Array(D);I<D;I++)y[I]=L[I].fn;return y},i.prototype.listenerCount=function(M){var s=w?w+M:M,L=this._events[s];return L?L.fn?1:L.length:0},i.prototype.emit=function(M,s,L,I,D,y){var i=w?w+M:M;if(!this._events[i])return!1;var d,l,Z=this._events[i],c=arguments.length;if(Z.fn){switch(Z.once&&this.removeListener(M,Z.fn,void 0,!0),c){case 1:return Z.fn.call(Z.context),!0;case 2:return Z.fn.call(Z.context,s),!0;case 3:return Z.fn.call(Z.context,s,L),!0;case 4:return Z.fn.call(Z.context,s,L,I),!0;case 5:return Z.fn.call(Z.context,s,L,I,D),!0;case 6:return Z.fn.call(Z.context,s,L,I,D,y),!0}for(l=1,d=new Array(c-1);l<c;l++)d[l-1]=arguments[l];Z.fn.apply(Z.context,d)}else{var C,N=Z.length;for(l=0;l<N;l++)switch(Z[l].once&&this.removeListener(M,Z[l].fn,void 0,!0),c){case 1:Z[l].fn.call(Z[l].context);break;case 2:Z[l].fn.call(Z[l].context,s);break;case 3:Z[l].fn.call(Z[l].context,s,L);break;case 4:Z[l].fn.call(Z[l].context,s,L,I);break;default:if(!d)for(C=1,d=new Array(c-1);C<c;C++)d[C-1]=arguments[C];Z[l].fn.apply(Z[l].context,d)}}return!0},i.prototype.on=function(M,s,w){return D(this,M,s,w,!1)},i.prototype.once=function(M,s,w){return D(this,M,s,w,!0)},i.prototype.removeListener=function(M,s,L,I){var D=w?w+M:M;if(!this._events[D])return this;if(!s)return y(this,D),this;var i=this._events[D];if(i.fn)i.fn!==s||I&&!i.once||L&&i.context!==L||y(this,D);else{for(var d=0,l=[],Z=i.length;d<Z;d++)(i[d].fn!==s||I&&!i[d].once||L&&i[d].context!==L)&&l.push(i[d]);l.length?this._events[D]=1===l.length?l[0]:l:y(this,D)}return this},i.prototype.removeAllListeners=function(M){var s;return M?(s=w?w+M:M,this._events[s]&&y(this,s)):(this._events=new L,this._eventsCount=0),this},i.prototype.off=i.prototype.removeListener,i.prototype.addListener=i.prototype.on,i.prefixed=w,i.EventEmitter=i,M.exports=i}({get exports(){return s},set exports(M){s=M}});var w=s;let L;!function(){if("nodejs"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let s=(I="CgogICAgICAgIC8vaW1wb3J0IHsgcGFyZW50UG9ydCB9IGZyb20gJ3dvcmtlcl90aHJlYWRzJwogICAgICAgIGxldCB7IHBhcmVudFBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJykgLy/lm6BwYWNrYWdlLmpzb27kuI3ntaZ0eXBlPW1vZHVsZeaVheeEoeazleaUr+aPtGVzNiBpbXBvcnQsIOW+l+S9v+eUqHJlcXVpcmUKICAgICAgICAvL+iLpeimgeaWvG5vZGVqcyB3b3JrZXLlhafkvb/nlKjnhKHms5Xnt6jora/nmoTljp/nlJ/lpZfku7bkvovlpoJmcywg6YG/5YWN5L2/55So6aCC5bGkaW1wb3J05Yqg6LyJ5L2/55SoLCDlm6DnhKHms5Xnt6jora/mnIPnm7TmjqXkv53nlZkKICAgICAgICAvL+S4puWboGltcG9ydOS9jeaWvHdvcmtlcuWkluWxpOmZkOWumueCunJlcXVpcmXljYAocGFja2FnZS5qc29u5LiN57WmdHlwZT1tb2R1bGUpLCDmlYXlh7rnj77pjK/oqqTnhKHms5Xnt6jora8KICAgICAgICAKCiJ1c2Ugc3RyaWN0Ijt2YXIgdD1yZXF1aXJlKCJwYXRoIiksZT1yZXF1aXJlKCJmcyIpO2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7KytyPG4mJiExIT09ZSh0W3JdLHIsdCk7KTtyZXR1cm4gdH12YXIgbixvPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG89LTEsdT1PYmplY3QodCksaT1yKHQpLGE9aS5sZW5ndGg7YS0tOyl7dmFyIGM9aVtuP2E6KytvXTtpZighMT09PWUodVtjXSxjLHUpKWJyZWFrfXJldHVybiB0fTt2YXIgdT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9dXx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxjPWEuU3ltYm9sLGY9T2JqZWN0LnByb3RvdHlwZSxzPWYuaGFzT3duUHJvcGVydHksbD1mLnRvU3RyaW5nLHA9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB5PSJbb2JqZWN0IE51bGxdIixiPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHY9Yz9jLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBkKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/Yjp5OnYmJnYgaW4gT2JqZWN0KHQpP2Z1bmN0aW9uKHQpe3ZhciBlPXMuY2FsbCh0LHApLHI9dFtwXTt0cnl7dFtwXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2godCl7fXZhciBvPWwuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtwXT1yOmRlbGV0ZSB0W3BdKSxvfSh0KTpmdW5jdGlvbih0KXtyZXR1cm4gaC5jYWxsKHQpfSh0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gZyh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWQodCl9dmFyIGo9T2JqZWN0LnByb3RvdHlwZSxtPWouaGFzT3duUHJvcGVydHksTz1qLnByb3BlcnR5SXNFbnVtZXJhYmxlLHc9XyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP186ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJm0uY2FsbCh0LCJjYWxsZWUiKSYmIU8uY2FsbCh0LCJjYWxsZWUiKX0sUz1BcnJheS5pc0FycmF5O3ZhciBBPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMseD1BJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsej14JiZ4LmV4cG9ydHM9PT1BP2EuQnVmZmVyOnZvaWQgMCxQPSh6P3ouaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24oKXtyZXR1cm4hMX0sRT05MDA3MTk5MjU0NzQwOTkxLGs9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIEYodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/RTplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmay50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9dmFyICQ9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD0kfXZhciBUPXt9O1RbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVRbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPVRbIltvYmplY3QgSW50OEFycmF5XSJdPVRbIltvYmplY3QgSW50MTZBcnJheV0iXT1UWyJbb2JqZWN0IEludDMyQXJyYXldIl09VFsiW29iamVjdCBVaW50OEFycmF5XSJdPVRbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09VFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1UWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFRbIltvYmplY3QgQXJndW1lbnRzXSJdPVRbIltvYmplY3QgQXJyYXldIl09VFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1UWyJbb2JqZWN0IEJvb2xlYW5dIl09VFsiW29iamVjdCBEYXRhVmlld10iXT1UWyJbb2JqZWN0IERhdGVdIl09VFsiW29iamVjdCBFcnJvcl0iXT1UWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPVRbIltvYmplY3QgTWFwXSJdPVRbIltvYmplY3QgTnVtYmVyXSJdPVRbIltvYmplY3QgT2JqZWN0XSJdPVRbIltvYmplY3QgUmVnRXhwXSJdPVRbIltvYmplY3QgU2V0XSJdPVRbIltvYmplY3QgU3RyaW5nXSJdPVRbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgRCxJPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsTT1JJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsTj1NJiZNLmV4cG9ydHM9PT1JJiZ1LnByb2Nlc3MsVT1mdW5jdGlvbigpe3RyeXt2YXIgdD1NJiZNLnJlcXVpcmUmJk0ucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxOJiZOLmJpbmRpbmcmJk4uYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCksUj1VJiZVLmlzVHlwZWRBcnJheSxCPVI/KEQ9UixmdW5jdGlvbih0KXtyZXR1cm4gRCh0KX0pOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpJiZMKHQubGVuZ3RoKSYmISFUW2QodCldfSxDPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVyh0LGUpe3ZhciByPVModCksbj0hciYmdyh0KSxvPSFyJiYhbiYmUCh0KSx1PSFyJiYhbiYmIW8mJkIodCksaT1yfHxufHxvfHx1LGE9aT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPUFycmF5KHQpOysrcjx0OyluW3JdPWUocik7cmV0dXJuIG59KHQubGVuZ3RoLFN0cmluZyk6W10sYz1hLmxlbmd0aDtmb3IodmFyIGYgaW4gdCkhZSYmIUMuY2FsbCh0LGYpfHxpJiYoImxlbmd0aCI9PWZ8fG8mJigib2Zmc2V0Ij09Znx8InBhcmVudCI9PWYpfHx1JiYoImJ1ZmZlciI9PWZ8fCJieXRlTGVuZ3RoIj09Znx8ImJ5dGVPZmZzZXQiPT1mKXx8RihmLGMpKXx8YS5wdXNoKGYpO3JldHVybiBhfXZhciBxPU9iamVjdC5wcm90b3R5cGU7dmFyIFY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLEc9VixIPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSih0KXtpZihyPShlPXQpJiZlLmNvbnN0cnVjdG9yLGUhPT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxxKSlyZXR1cm4gRyh0KTt2YXIgZSxyLG49W107Zm9yKHZhciBvIGluIE9iamVjdCh0KSlILmNhbGwodCxvKSYmImNvbnN0cnVjdG9yIiE9byYmbi5wdXNoKG8pO3JldHVybiBufWZ1bmN0aW9uIEsodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIG51bGwhPXQmJigib2JqZWN0Ij09ZXx8ImZ1bmN0aW9uIj09ZSl9dmFyIFE9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLFg9IltvYmplY3QgRnVuY3Rpb25dIixZPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsWj0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIHR0KHQpe2lmKCFLKHQpKXJldHVybiExO3ZhciBlPWQodCk7cmV0dXJuIGU9PVh8fGU9PVl8fGU9PVF8fGU9PVp9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIG51bGwhPXQmJkwodC5sZW5ndGgpJiYhdHQodCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIGV0KHQpP1codCk6Sih0KX12YXIgbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFldChyKSlyZXR1cm4gdChyLG4pO2Zvcih2YXIgbz1yLmxlbmd0aCx1PWU/bzotMSxpPU9iamVjdChyKTsoZT91LS06Kyt1PG8pJiYhMSE9PW4oaVt1XSx1LGkpOyk7cmV0dXJuIHJ9fSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmbyh0LGUscnQpfSkpLG90PW50O2Z1bmN0aW9uIHV0KHQpe3JldHVybiB0fWZ1bmN0aW9uIGl0KHQsZSl7dmFyIG47cmV0dXJuKFModCk/cjpvdCkodCwiZnVuY3Rpb24iPT10eXBlb2Yobj1lKT9uOnV0KX12YXIgYXQsY3Q9YVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sZnQ9KGF0PS9bXi5dKyQvLmV4ZWMoY3QmJmN0LmtleXMmJmN0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIithdDoiIjt2YXIgc3Q9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGx0KHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gc3QuY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9dmFyIHB0PS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGh0PUZ1bmN0aW9uLnByb3RvdHlwZSx5dD1PYmplY3QucHJvdG90eXBlLGJ0PWh0LnRvU3RyaW5nLHZ0PXl0Lmhhc093blByb3BlcnR5LGR0PVJlZ0V4cCgiXiIrYnQuY2FsbCh2dCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7ZnVuY3Rpb24gZ3QodCl7cmV0dXJuISghSyh0KXx8ZnVuY3Rpb24odCl7cmV0dXJuISFmdCYmZnQgaW4gdH0odCkpJiYodHQodCk/ZHQ6cHQpLnRlc3QobHQodCkpfWZ1bmN0aW9uIF90KHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX0odCxlKTtyZXR1cm4gZ3Qocik/cjp2b2lkIDB9dmFyIGp0PV90KGEsIkRhdGFWaWV3IiksbXQ9X3QoYSwiTWFwIiksT3Q9X3QoYSwiUHJvbWlzZSIpLHd0PV90KGEsIlNldCIpLFN0PV90KGEsIldlYWtNYXAiKSxBdD0iW29iamVjdCBNYXBdIix4dD0iW29iamVjdCBQcm9taXNlXSIsenQ9IltvYmplY3QgU2V0XSIsUHQ9IltvYmplY3QgV2Vha01hcF0iLEV0PSJbb2JqZWN0IERhdGFWaWV3XSIsa3Q9bHQoanQpLEZ0PWx0KG10KSwkdD1sdChPdCksTHQ9bHQod3QpLFR0PWx0KFN0KSxEdD1kOyhqdCYmRHQobmV3IGp0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1FdHx8bXQmJkR0KG5ldyBtdCkhPUF0fHxPdCYmRHQoT3QucmVzb2x2ZSgpKSE9eHR8fHd0JiZEdChuZXcgd3QpIT16dHx8U3QmJkR0KG5ldyBTdCkhPVB0KSYmKER0PWZ1bmN0aW9uKHQpe3ZhciBlPWQodCkscj0iW29iamVjdCBPYmplY3RdIj09ZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/bHQocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBrdDpyZXR1cm4gRXQ7Y2FzZSBGdDpyZXR1cm4gQXQ7Y2FzZSAkdDpyZXR1cm4geHQ7Y2FzZSBMdDpyZXR1cm4genQ7Y2FzZSBUdDpyZXR1cm4gUHR9cmV0dXJuIGV9KTt2YXIgSXQ9RHQsTXQ9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gTnQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX12YXIgVXQ9TnQoImxlbmd0aCIpLFJ0PVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgQnQ9IlxcdWQ4MDAtXFx1ZGZmZiIsQ3Q9IlsiK0J0KyJdIixXdD0iW1xcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZl0iLHF0PSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLFZ0PSJbXiIrQnQrIl0iLEd0PSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixIdD0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsSnQ9Iig/OiIrV3QrInwiK3F0KyIpIisiPyIsS3Q9IltcXHVmZTBlXFx1ZmUwZl0/IixRdD1LdCtKdCsoIig/OlxcdTIwMGQoPzoiK1tWdCxHdCxIdF0uam9pbigifCIpKyIpIitLdCtKdCsiKSoiKSxYdD0iKD86IitbVnQrV3QrIj8iLFd0LEd0LEh0LEN0XS5qb2luKCJ8IikrIikiLFl0PVJlZ0V4cChxdCsiKD89IitxdCsiKXwiK1h0K1F0LCJnIik7ZnVuY3Rpb24gWnQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBSdC50ZXN0KHQpfSh0KT9mdW5jdGlvbih0KXtmb3IodmFyIGU9WXQubGFzdEluZGV4PTA7WXQudGVzdCh0KTspKytlO3JldHVybiBlfSh0KTpVdCh0KX1mdW5jdGlvbiB0ZSh0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGV0KHQpKXJldHVybiJzdHJpbmciPT10eXBlb2YoZT10KXx8IVMoZSkmJmcoZSkmJmQoZSk9PU10P1p0KHQpOnQubGVuZ3RoO3ZhciBlLHI9SXQodCk7cmV0dXJuIltvYmplY3QgTWFwXSI9PXJ8fCJbb2JqZWN0IFNldF0iPT1yP3Quc2l6ZTpKKHQpLmxlbmd0aH1mdW5jdGlvbiBlZSh0KXtyZXR1cm4hKCFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCl8fCIiPT09dCl9ZnVuY3Rpb24gcmUodCl7bGV0IGU9ITE7aWYoZWUodCkpZT0haXNOYU4oTnVtYmVyKHQpKTtlbHNlIGlmKGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KSl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9KHQpKXJldHVybiExO2U9ITB9cmV0dXJuIGV9dmFyIG5lPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIG9lKHQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgdHx8Zyh0KSYmZCh0KT09bmV9dmFyIHVlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGllPS9eXHcqJC87ZnVuY3Rpb24gYWUodCxlKXtpZihTKHQpKXJldHVybiExO3ZhciByPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPXImJiJzeW1ib2wiIT1yJiYiYm9vbGVhbiIhPXImJm51bGwhPXQmJiFvZSh0KSl8fChpZS50ZXN0KHQpfHwhdWUudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfXZhciBjZT1fdChPYmplY3QsImNyZWF0ZSIpO3ZhciBmZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGxlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHBlKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT10JiZlIT1lfWZ1bmN0aW9uIGhlKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYocGUodFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX1sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPWNlP2NlKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxsZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfSxsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoY2Upe3ZhciByPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09cj92b2lkIDA6cn1yZXR1cm4gZmUuY2FsbChlLHQpP2VbdF06dm9pZCAwfSxsZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIGNlP3ZvaWQgMCE9PWVbdF06c2UuY2FsbChlLHQpfSxsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1jZSYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfTt2YXIgeWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBiZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiB2ZSh0LGUpe3ZhciByLG4sbz10Ll9fZGF0YV9fO3JldHVybigic3RyaW5nIj09KG49dHlwZW9mKHI9ZSkpfHwibnVtYmVyIj09bnx8InN5bWJvbCI9PW58fCJib29sZWFuIj09bj8iX19wcm90b19fIiE9PXI6bnVsbD09PXIpP29bInN0cmluZyI9PXR5cGVvZiBlPyJzdHJpbmciOiJoYXNoIl06by5tYXB9ZnVuY3Rpb24gZGUodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19YmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sYmUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9aGUoZSx0KTtyZXR1cm4hKHI8MCkmJihyPT1lLmxlbmd0aC0xP2UucG9wKCk6eWUuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITApfSxiZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1oZShlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19LGJlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGhlKHRoaXMuX19kYXRhX18sdCk+LTF9LGJlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49aGUocix0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW3QsZV0pKTpyW25dWzFdPWUsdGhpc30sZGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgbGUsbWFwOm5ldyhtdHx8YmUpLHN0cmluZzpuZXcgbGV9fSxkZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXZlKHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LGRlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZlKHRoaXMsdCkuZ2V0KHQpfSxkZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB2ZSh0aGlzLHQpLmhhcyh0KX0sZGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXZlKHRoaXMsdCksbj1yLnNpemU7cmV0dXJuIHIuc2V0KHQsZSksdGhpcy5zaXplKz1yLnNpemU9PW4/MDoxLHRoaXN9O3ZhciBnZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gX2UodCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihnZSk7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsbz1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLHU9ci5jYWNoZTtpZih1LmhhcyhvKSlyZXR1cm4gdS5nZXQobyk7dmFyIGk9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPXUuc2V0KG8saSl8fHUsaX07cmV0dXJuIHIuY2FjaGU9bmV3KF9lLkNhY2hlfHxkZSkscn1fZS5DYWNoZT1kZTt2YXIgamU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csbWU9L1xcKFxcKT8vZyxPZT1mdW5jdGlvbih0KXt2YXIgZT1fZSh0LChmdW5jdGlvbih0KXtyZXR1cm4gNTAwPT09ci5zaXplJiZyLmNsZWFyKCksdH0pKSxyPWUuY2FjaGU7cmV0dXJuIGV9KChmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gNDY9PT10LmNoYXJDb2RlQXQoMCkmJmUucHVzaCgiIiksdC5yZXBsYWNlKGplLChmdW5jdGlvbih0LHIsbixvKXtlLnB1c2gobj9vLnJlcGxhY2UobWUsIiQxIik6cnx8dCl9KSksZX0pKSx3ZT1PZTtmdW5jdGlvbiBTZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPUFycmF5KG4pOysrcjxuOylvW3JdPWUodFtyXSxyLHQpO3JldHVybiBvfXZhciBBZT0xLzAseGU9Yz9jLnByb3RvdHlwZTp2b2lkIDAsemU9eGU/eGUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFBlKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZihTKHQpKXJldHVybiBTZSh0LFBlKSsiIjtpZihvZSh0KSlyZXR1cm4gemU/emUuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tQWU/Ii0wIjplfWZ1bmN0aW9uIEVlKHQsZSl7cmV0dXJuIFModCk/dDphZSh0LGUpP1t0XTp3ZShmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD8iIjpQZSh0KX0odCkpfXZhciBrZT0xLzA7ZnVuY3Rpb24gRmUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0fHxvZSh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0ta2U/Ii0wIjplfWZ1bmN0aW9uICRlKHQsZSl7Zm9yKHZhciByPTAsbj0oZT1FZShlLHQpKS5sZW5ndGg7bnVsbCE9dCYmcjxuOyl0PXRbRmUoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9ZnVuY3Rpb24gTGUodCxlLHIpe3ZhciBuPW51bGw9PXQ/dm9pZCAwOiRlKHQsZSk7cmV0dXJuIHZvaWQgMD09PW4/cjpufWZ1bmN0aW9uIFRlKHQsZT17fSl7bGV0IHI9TGUoZSwiZnMiKTtyZXR1cm4hIXIuZXhpc3RzU3luYyh0KSYmKCFyLmxzdGF0U3luYyh0KS5pc0RpcmVjdG9yeSgpJiYhci5sc3RhdFN5bmModCkuaXNTeW1ib2xpY0xpbmsoKSl9ZnVuY3Rpb24gRGUodCl7cmV0dXJuIFRlKHQse2ZzOmV9KX1mdW5jdGlvbiBJZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPTAsdT1bXTsrK3I8bjspe3ZhciBpPXRbcl07ZShpLHIsdCkmJih1W28rK109aSl9cmV0dXJuIHV9ZnVuY3Rpb24gTWUodCxlKXt2YXIgcj1bXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxuLG8pe2UodCxuLG8pJiZyLnB1c2godCl9KSkscn1mdW5jdGlvbiBOZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBiZSh0KTt0aGlzLnNpemU9ZS5zaXplfU5lLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IGJlLHRoaXMuc2l6ZT0wfSxOZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1lLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplPWUuc2l6ZSxyfSxOZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX0sTmUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9LE5lLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKHIgaW5zdGFuY2VvZiBiZSl7dmFyIG49ci5fX2RhdGFfXztpZighbXR8fG4ubGVuZ3RoPDE5OSlyZXR1cm4gbi5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGRlKG4pfXJldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZT1yLnNpemUsdGhpc307ZnVuY3Rpb24gVWUodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IGRlOysrZTxyOyl0aGlzLmFkZCh0W2VdKX1mdW5jdGlvbiBSZSh0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8bjspaWYoZSh0W3JdLHIsdCkpcmV0dXJuITA7cmV0dXJuITF9VWUucHJvdG90eXBlLmFkZD1VZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9LFVlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfTt2YXIgQmU9MSxDZT0yO2Z1bmN0aW9uIFdlKHQsZSxyLG4sbyx1KXt2YXIgaT1yJkJlLGE9dC5sZW5ndGgsYz1lLmxlbmd0aDtpZihhIT1jJiYhKGkmJmM+YSkpcmV0dXJuITE7dmFyIGY9dS5nZXQodCkscz11LmdldChlKTtpZihmJiZzKXJldHVybiBmPT1lJiZzPT10O3ZhciBsPS0xLHA9ITAsaD1yJkNlP25ldyBVZTp2b2lkIDA7Zm9yKHUuc2V0KHQsZSksdS5zZXQoZSx0KTsrK2w8YTspe3ZhciB5PXRbbF0sYj1lW2xdO2lmKG4pdmFyIHY9aT9uKGIseSxsLGUsdCx1KTpuKHksYixsLHQsZSx1KTtpZih2b2lkIDAhPT12KXtpZih2KWNvbnRpbnVlO3A9ITE7YnJlYWt9aWYoaCl7aWYoIVJlKGUsKGZ1bmN0aW9uKHQsZSl7aWYoaT1lLCFoLmhhcyhpKSYmKHk9PT10fHxvKHksdCxyLG4sdSkpKXJldHVybiBoLnB1c2goZSk7dmFyIGl9KSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoeSE9PWImJiFvKHksYixyLG4sdSkpe3A9ITE7YnJlYWt9fXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxwfXZhciBxZT1hLlVpbnQ4QXJyYXk7ZnVuY3Rpb24gVmUodCl7dmFyIGU9LTEscj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7clsrK2VdPVtuLHRdfSkpLHJ9ZnVuY3Rpb24gR2UodCl7dmFyIGU9LTEscj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbKytlXT10fSkpLHJ9dmFyIEhlPTEsSmU9MixLZT0iW29iamVjdCBCb29sZWFuXSIsUWU9IltvYmplY3QgRGF0ZV0iLFhlPSJbb2JqZWN0IEVycm9yXSIsWWU9IltvYmplY3QgTWFwXSIsWmU9IltvYmplY3QgTnVtYmVyXSIsdHI9IltvYmplY3QgUmVnRXhwXSIsZXI9IltvYmplY3QgU2V0XSIscnI9IltvYmplY3QgU3RyaW5nXSIsbnI9IltvYmplY3QgU3ltYm9sXSIsb3I9IltvYmplY3QgQXJyYXlCdWZmZXJdIix1cj0iW29iamVjdCBEYXRhVmlld10iLGlyPWM/Yy5wcm90b3R5cGU6dm9pZCAwLGFyPWlyP2lyLnZhbHVlT2Y6dm9pZCAwO3ZhciBjcj1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGZyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsc3I9ZnI/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLEllKGZyKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gY3IuY2FsbCh0LGUpfSkpKX06ZnVuY3Rpb24oKXtyZXR1cm5bXX07ZnVuY3Rpb24gbHIodCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKHQpO3JldHVybiBTKHQpP246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEsbj1lLmxlbmd0aCxvPXQubGVuZ3RoOysrcjxuOyl0W28rcl09ZVtyXTtyZXR1cm4gdH0obixyKHQpKX0odCxydCxzcil9dmFyIHByPTEsaHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgeXI9MSxicj0iW29iamVjdCBBcmd1bWVudHNdIix2cj0iW29iamVjdCBBcnJheV0iLGRyPSJbb2JqZWN0IE9iamVjdF0iLGdyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gX3IodCxlLHIsbixvLHUpe3ZhciBpPVModCksYT1TKGUpLGM9aT92cjpJdCh0KSxmPWE/dnI6SXQoZSkscz0oYz1jPT1icj9kcjpjKT09ZHIsbD0oZj1mPT1icj9kcjpmKT09ZHIscD1jPT1mO2lmKHAmJlAodCkpe2lmKCFQKGUpKXJldHVybiExO2k9ITAscz0hMX1pZihwJiYhcylyZXR1cm4gdXx8KHU9bmV3IE5lKSxpfHxCKHQpP1dlKHQsZSxyLG4sbyx1KTpmdW5jdGlvbih0LGUscixuLG8sdSxpKXtzd2l0Y2gocil7Y2FzZSB1cjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2Ugb3I6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IXUobmV3IHFlKHQpLG5ldyBxZShlKSkpO2Nhc2UgS2U6Y2FzZSBRZTpjYXNlIFplOnJldHVybiBwZSgrdCwrZSk7Y2FzZSBYZTpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UgdHI6Y2FzZSBycjpyZXR1cm4gdD09ZSsiIjtjYXNlIFllOnZhciBhPVZlO2Nhc2UgZXI6dmFyIGM9biZIZTtpZihhfHwoYT1HZSksdC5zaXplIT1lLnNpemUmJiFjKXJldHVybiExO3ZhciBmPWkuZ2V0KHQpO2lmKGYpcmV0dXJuIGY9PWU7bnw9SmUsaS5zZXQodCxlKTt2YXIgcz1XZShhKHQpLGEoZSksbixvLHUsaSk7cmV0dXJuIGkuZGVsZXRlKHQpLHM7Y2FzZSBucjppZihhcilyZXR1cm4gYXIuY2FsbCh0KT09YXIuY2FsbChlKX1yZXR1cm4hMX0odCxlLGMscixuLG8sdSk7aWYoIShyJnlyKSl7dmFyIGg9cyYmZ3IuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLHk9bCYmZ3IuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKGh8fHkpe3ZhciBiPWg/dC52YWx1ZSgpOnQsdj15P2UudmFsdWUoKTplO3JldHVybiB1fHwodT1uZXcgTmUpLG8oYix2LHIsbix1KX19cmV0dXJuISFwJiYodXx8KHU9bmV3IE5lKSxmdW5jdGlvbih0LGUscixuLG8sdSl7dmFyIGk9ciZwcixhPWxyKHQpLGM9YS5sZW5ndGg7aWYoYyE9bHIoZSkubGVuZ3RoJiYhaSlyZXR1cm4hMTtmb3IodmFyIGY9YztmLS07KXt2YXIgcz1hW2ZdO2lmKCEoaT9zIGluIGU6aHIuY2FsbChlLHMpKSlyZXR1cm4hMX12YXIgbD11LmdldCh0KSxwPXUuZ2V0KGUpO2lmKGwmJnApcmV0dXJuIGw9PWUmJnA9PXQ7dmFyIGg9ITA7dS5zZXQodCxlKSx1LnNldChlLHQpO2Zvcih2YXIgeT1pOysrZjxjOyl7dmFyIGI9dFtzPWFbZl1dLHY9ZVtzXTtpZihuKXZhciBkPWk/bih2LGIscyxlLHQsdSk6bihiLHYscyx0LGUsdSk7aWYoISh2b2lkIDA9PT1kP2I9PT12fHxvKGIsdixyLG4sdSk6ZCkpe2g9ITE7YnJlYWt9eXx8KHk9ImNvbnN0cnVjdG9yIj09cyl9aWYoaCYmIXkpe3ZhciBnPXQuY29uc3RydWN0b3IsXz1lLmNvbnN0cnVjdG9yO2c9PV98fCEoImNvbnN0cnVjdG9yImluIHQpfHwhKCJjb25zdHJ1Y3RvciJpbiBlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGcmJmcgaW5zdGFuY2VvZiBnJiYiZnVuY3Rpb24iPT10eXBlb2YgXyYmXyBpbnN0YW5jZW9mIF98fChoPSExKX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUoZSksaH0odCxlLHIsbixvLHUpKX1mdW5jdGlvbiBqcih0LGUscixuLG8pe3JldHVybiB0PT09ZXx8KG51bGw9PXR8fG51bGw9PWV8fCFnKHQpJiYhZyhlKT90IT10JiZlIT1lOl9yKHQsZSxyLG4sanIsbykpfXZhciBtcj0xLE9yPTI7ZnVuY3Rpb24gd3IodCl7cmV0dXJuIHQ9PXQmJiFLKHQpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiYoclt0XT09PWUmJih2b2lkIDAhPT1lfHx0IGluIE9iamVjdChyKSkpfX1mdW5jdGlvbiBBcih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9cnQodCkscj1lLmxlbmd0aDtyLS07KXt2YXIgbj1lW3JdLG89dFtuXTtlW3JdPVtuLG8sd3IobyldfXJldHVybiBlfSh0KTtyZXR1cm4gMT09ZS5sZW5ndGgmJmVbMF1bMl0/U3IoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihyKXtyZXR1cm4gcj09PXR8fGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPXIubGVuZ3RoLHU9byxpPSFuO2lmKG51bGw9PXQpcmV0dXJuIXU7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciBhPXJbb107aWYoaSYmYVsyXT9hWzFdIT09dFthWzBdXTohKGFbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzx1Oyl7dmFyIGM9KGE9cltvXSlbMF0sZj10W2NdLHM9YVsxXTtpZihpJiZhWzJdKXtpZih2b2lkIDA9PT1mJiYhKGMgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgbD1uZXcgTmU7aWYobil2YXIgcD1uKGYscyxjLHQsZSxsKTtpZighKHZvaWQgMD09PXA/anIocyxmLG1yfE9yLG4sbCk6cCkpcmV0dXJuITF9fXJldHVybiEwfShyLHQsZSl9fWZ1bmN0aW9uIHhyKHQsZSl7cmV0dXJuIG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpfWZ1bmN0aW9uIHpyKHQsZSl7cmV0dXJuIG51bGwhPXQmJmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49LTEsbz0oZT1FZShlLHQpKS5sZW5ndGgsdT0hMTsrK248bzspe3ZhciBpPUZlKGVbbl0pO2lmKCEodT1udWxsIT10JiZyKHQsaSkpKWJyZWFrO3Q9dFtpXX1yZXR1cm4gdXx8KytuIT1vP3U6ISEobz1udWxsPT10PzA6dC5sZW5ndGgpJiZMKG8pJiZGKGksbykmJihTKHQpfHx3KHQpKX0odCxlLHhyKX12YXIgUHI9MSxFcj0yO2Z1bmN0aW9uIGtyKHQpe3JldHVybiBhZSh0KT9OdChGZSh0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAkZShlLHQpfX0odCl9ZnVuY3Rpb24gRnIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsPT10P3V0OiJvYmplY3QiPT10eXBlb2YgdD9TKHQpP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGFlKHQpJiZ3cihlKT9TcihGZSh0KSxlKTpmdW5jdGlvbihyKXt2YXIgbj1MZShyLHQpO3JldHVybiB2b2lkIDA9PT1uJiZuPT09ZT96cihyLHQpOmpyKGUsbixQcnxFcil9fSh0WzBdLHRbMV0pOkFyKHQpOmtyKHQpfWZ1bmN0aW9uICRyKHQsZSl7dmFyIHI9LTEsbj1ldCh0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIG90KHQsKGZ1bmN0aW9uKHQsbyx1KXtuWysrcl09ZSh0LG8sdSl9KSksbn1mdW5jdGlvbiBMcih0LGU9e30pe2xldCByPUxlKGUsImZzIik7aWYoIXIuZXhpc3RzU3luYyh0KSlyZXR1cm4hMTtsZXQgbj1yLmxzdGF0U3luYyh0KTtyZXR1cm4hbi5pc0ZpbGUoKSYmIW4uaXNTeW1ib2xpY0xpbmsoKX1mdW5jdGlvbiBUcih0LGU9MSxyPXt9KXtsZXQgbj1MZShyLCJwYXRoIiksbz1MZShyLCJmcyIpO2lmKCFMcih0LHtmczpvfSkpdGhyb3cgbmV3IEVycm9yKGBmZFske3R9XSBpcyBub3QgYSBmb2xkZXJgKTtsZXQgdT1bXTt2YXIgaSxhO3JldHVybiB1PWZ1bmN0aW9uKHQsZT0xLHI9e30pe2xldCBuPTEsbz1MZShyLCJwYXRoIiksdT1MZShyLCJmcyIpO2lmKCFMcih0LHtmczp1fSkpdGhyb3cgbmV3IEVycm9yKGBmZFske3R9XSBpcyBub3QgYSBmb2xkZXJgKTtyZXR1cm4gZnVuY3Rpb24gdChyKXtsZXQgaT1bXTtyZXR1cm4gTHIocix7ZnM6dX0pPyhpdCh1LnJlYWRkaXJTeW5jKHIpLChmdW5jdGlvbihhKXtsZXQgYz1vLnJlc29sdmUocixhKSxmPW51bGw7dHJ5e2Y9dS5zdGF0U3luYyhjKX1jYXRjaCh0KXt9ZiYmZi5pc0RpcmVjdG9yeSgpPyhpLnB1c2goe2lzRm9sZGVyOiEwLGxldmVsOm4scGF0aDpjLG5hbWU6by5iYXNlbmFtZShjKX0pLG4rPTEsKG48PWV8fG51bGw9PT1lKSYmKGk9aS5jb25jYXQodChjKSkpLG4tPTEpOmkucHVzaCh7aXNGb2xkZXI6ITEsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSl9KSksaSk6aX0odCl9KHQsZSx7cGF0aDpuLGZzOm99KSxhPXtpc0ZvbGRlcjohMX0sdT0oUyhpPXUpP0llOk1lKShpLEZyKGEpKSx1PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKFModCk/U2U6JHIpKHQsRnIoZSkpfSh1LCh0PT4oZGVsZXRlIHQuaXNGb2xkZXIsdCkpKSx1fWZ1bmN0aW9uIERyKHQpe3JldHVybiBEcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sRHIodCl9ZnVuY3Rpb24gSXIodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9PURyKHQpfHxudWxsPT09dClyZXR1cm4gdDt2YXIgcj10W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PURyKG4pKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1EcihlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBNcih0LGUscil7cmV0dXJuKGU9SXIoZSkpaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9Y29uc3QgTnI9bmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNDgsOCw5NiwzLDEyNywxMjcsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjcsMCw5NiwyLDEyNywxMjcsMCw5NiwxLDEyNywxLDEyNyw5NiwzLDEyNywxMjcsMTI2LDEsMTI2LDk2LDMsMTI2LDEyNywxMjcsMSwxMjYsOTYsMiwxMjcsMTI2LDAsOTYsMSwxMjcsMSwxMjYsMywxMSwxMCwwLDAsMiwxLDMsNCw1LDYsMSw3LDUsMywxLDAsMSw3LDg1LDksMywxMDksMTAxLDEwOSwyLDAsNSwxMjAsMTIwLDEwNCw1MSw1MCwwLDAsNiwxMDUsMTEwLDEwNSwxMTYsNTEsNTAsMCwyLDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1MSw1MCwwLDMsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1MSw1MCwwLDQsNSwxMjAsMTIwLDEwNCw1NCw1MiwwLDUsNiwxMDUsMTEwLDEwNSwxMTYsNTQsNTIsMCw3LDgsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw1NCw1MiwwLDgsOCwxMDAsMTA1LDEwMywxMDEsMTE1LDExNiw1NCw1MiwwLDksMTAsMjUxLDIyLDEwLDI0MiwxLDEsNCwxMjcsMzIsMCwzMiwxLDEwNiwzMywzLDMyLDEsNjUsMTYsNzksNCwxMjcsMzIsMyw2NSwxNiwxMDcsMzMsNiwzMiwyLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiwzMywzLDMyLDIsNjUsMTM3LDIzNSwyMDgsMjA4LDcsMTA3LDMzLDQsMzIsMiw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsMzMsNSwzLDY0LDMyLDMsMzIsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDQsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDQsMzIsMiwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiw1LDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw1LDMyLDYsMzIsMCw2NSw0LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NSwxMiwxMTksMzIsNSw2NSwxOCwxMTksMTA2LDMyLDQsNjUsNywxMTksMTA2LDMyLDMsNjUsMSwxMTksMTA2LDUsMzIsMiw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDYsMTEsMzIsMSwxMDYsMzIsMCwzMiwxLDY1LDE1LDExMywxNiwxLDExLDE0NiwxLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMSw2NSw0LDEwNiwzMiwyLDc1LDY5LDQsNjQsMzIsMCwzMiwxLDQwLDIsMCw2NSwxODksMjIwLDIwMiwxNDksMTI0LDEwOCwxMDYsNjUsMTcsMTE5LDY1LDE3NSwyMTQsMjExLDE5MCwyLDEwOCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMiwxLDExLDExLDMsNjQsMzIsMSwzMiwyLDc5LDY5LDQsNjQsMzIsMCwzMiwxLDQ1LDAsMCw2NSwxNzcsMjA3LDIxNywxNzgsMSwxMDgsMTA2LDY1LDExLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywwLDMyLDEsNjUsMSwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDAsMzIsMCw2NSwxNSwxMTgsMTE1LDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDM0LDAsNjUsMTMsMTE4LDMyLDAsMTE1LDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDM0LDAsNjUsMTYsMTE4LDMyLDAsMTE1LDExLDYzLDAsMzIsMCw2NSw4LDEwNiwzMiwxLDY1LDE2OCwxMzYsMTQxLDE2MSwyLDEwNiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMSw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNTQsMiwwLDMyLDAsNjUsMjAsMTA2LDMyLDEsNjUsMjA3LDE0MCwxNjIsMTQyLDYsMTA2LDU0LDIsMCwxMSwxOTUsNCwxLDYsMTI3LDMyLDEsMzIsMiwxMDYsMzMsNiwzMiwwLDY1LDI0LDEwNiwzMyw0LDMyLDAsNjUsNDAsMTA2LDQwLDIsMCwzMywzLDMyLDAsMzIsMCw0MCwyLDAsMzIsMiwxMDYsNTQsMiwwLDMyLDAsNjUsNCwxMDYsMzQsNSwzMiw1LDQwLDIsMCwzMiwyLDY1LDE2LDc5LDMyLDAsNDAsMiwwLDY1LDE2LDc5LDExNCwxMTQsNTQsMiwwLDMyLDIsMzIsMywxMDYsNjUsMTYsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMTYsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsNCwxMDYsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw4LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDEyLDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSw0MCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsMzIsNiw2NSwxNiwxMDcsNzcsNCw2NCwzMiw2LDY1LDE2LDEwNywzMyw4LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDMzLDIsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDMzLDMsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDUsMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDMzLDcsMyw2NCwzMiwyLDMyLDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsMiwzMiwzLDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywzLDMyLDUsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNywzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNywzMiw4LDMyLDEsNjUsNCwxMDYsMzQsMSw3OSwxMywwLDExLDMyLDAsNjUsOCwxMDYsMzIsMiw1NCwyLDAsMzIsMCw2NSwxMiwxMDYsMzIsMyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsNSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsNyw1NCwyLDAsMTEsMzIsMSwzMiw2LDczLDQsNjQsMzIsNCwzMiwxLDMyLDYsMzIsMSwxMDcsMzQsMSwyNTIsMTAsMCwwLDMyLDAsNjUsNDAsMTA2LDMyLDEsNTQsMiwwLDExLDExLDk3LDEsMSwxMjcsMzIsMCw2NSwxNiwxMDYsNDAsMiwwLDMzLDEsMzIsMCw2NSw0LDEwNiw0MCwyLDAsNCwxMjcsMzIsMSw2NSwxMiwxMTksMzIsMCw2NSwyMCwxMDYsNDAsMiwwLDY1LDE4LDExOSwxMDYsMzIsMCw2NSwxMiwxMDYsNDAsMiwwLDY1LDcsMTE5LDEwNiwzMiwwLDY1LDgsMTA2LDQwLDIsMCw2NSwxLDExOSwxMDYsNSwzMiwxLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwwLDQwLDIsMCwxMDYsMzIsMCw2NSwyNCwxMDYsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDE2LDEsMTEsMjU1LDMsMiwzLDEyNiwxLDEyNywzMiwwLDMyLDEsMTA2LDMzLDYsMzIsMSw2NSwzMiw3OSw0LDEyNiwzMiw2LDY1LDMyLDEwNywzMyw2LDMyLDIsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsMzMsMywzMiwyLDY2LDE3NywxNjksMTcyLDE5MywxNzMsMTg0LDIxMiwxNjYsNjEsMTI1LDMzLDQsMzIsMiw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCwzMyw1LDMsNjQsMzIsMywzMiwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMywzMiw0LDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDQsMzIsMiwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywyLDMyLDUsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNSwzMiw2LDMyLDAsNjUsOCwxMDYsMzQsMCw3OSwxMywwLDExLDMyLDIsNjYsMTIsMTM3LDMyLDUsNjYsMTgsMTM3LDEyNCwzMiw0LDY2LDcsMTM3LDEyNCwzMiwzLDY2LDEsMTM3LDEyNCwzMiwzLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDQsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsMiw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw1LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDUsMzIsMiw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNCwxMSwzMiwxLDE3MywxMjQsMzIsMCwzMiwxLDY1LDMxLDExMywxNiw2LDExLDEzNCwyLDAsMzIsMSwzMiwyLDEwNiwzMywyLDMsNjQsMzIsMiwzMiwxLDY1LDgsMTA2LDc5LDQsNjQsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzIsMCwxMzMsNjYsMjcsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzMsMCwzMiwxLDY1LDgsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwxLDY1LDQsMTA2LDMyLDIsNzcsNCw2NCwzMiwwLDMyLDEsNTMsMiwwLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDIzLDEzNyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNCwzMywwLDMyLDEsNjUsNCwxMDYsMzMsMSwxMSwzLDY0LDMyLDEsMzIsMiw3Myw0LDY0LDMyLDAsMzIsMSw0OSwwLDAsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjYsMTMzLDY2LDExLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY2LDMzLDEzNiwxMzMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMzQsMCwzMiwwLDY2LDI5LDEzNiwxMzMsNjYsMjQ5LDI0MywyMjEsMjQxLDE1MywyNDYsMTUzLDE3MSwyMiwxMjYsMzQsMCwzMiwwLDY2LDMyLDEzNiwxMzMsMTEsNzcsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjYsMjE0LDIzNSwxMzAsMjM4LDIzNCwyNTMsMTM3LDI0NSwyMjQsMCwxMjQsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDEsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDEsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDEsNjYsMjQ5LDIzNCwyMDgsMjA4LDIzMSwyMDEsMTYxLDIyOCwyMjUsMCwxMjQsNTUsMywwLDExLDI0NCw0LDIsMywxMjcsNCwxMjYsMzIsMSwzMiwyLDEwNiwzMyw1LDMyLDAsNjUsNDAsMTA2LDMzLDQsMzIsMCw2NSwyMDAsMCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQxLDMsMCwzMiwyLDE3MywxMjQsNTUsMywwLDMyLDIsMzIsMywxMDYsNjUsMzIsNzMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsMzIsMiwyNTIsMTAsMCwwLDMyLDAsNjUsMjAwLDAsMTA2LDMyLDIsMzIsMywxMDYsNTQsMiwwLDE1LDExLDMyLDMsNCw2NCwzMiwzLDMyLDQsMTA2LDMyLDEsNjUsMzIsMzIsMywxMDcsMzQsMiwyNTIsMTAsMCwwLDMyLDAsNjUsOCwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSw4LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNjUsMTYsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwyNCwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwyMDAsMCwxMDYsNjUsMCw1NCwyLDAsMzIsMSwzMiwyLDEwNiwzMywxLDExLDMyLDEsNjUsMzIsMTA2LDMyLDUsNzcsNCw2NCwzMiw1LDY1LDMyLDEwNywzMywyLDMyLDAsNjUsOCwxMDYsNDEsMywwLDMzLDYsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDMzLDcsMzIsMCw2NSwyNCwxMDYsNDEsMywwLDMzLDgsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDMzLDksMyw2NCwzMiw2LDMyLDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw2LDMyLDcsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNywzMiw4LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDgsMzIsOSwzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw5LDMyLDIsMzIsMSw2NSw4LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiw2LDU1LDMsMCwzMiwwLDY1LDE2LDEwNiwzMiw3LDU1LDMsMCwzMiwwLDY1LDI0LDEwNiwzMiw4LDU1LDMsMCwzMiwwLDY1LDMyLDEwNiwzMiw5LDU1LDMsMCwxMSwzMiwxLDMyLDUsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNSwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsMTg4LDIsMSw1LDEyNiwzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsMSwzMiwwLDQxLDMsMCwzNCwyLDY2LDMyLDkwLDQsMTI2LDMyLDAsNjUsOCwxMDYsNDEsMywwLDM0LDMsNjYsMSwxMzcsMzIsMCw2NSwxNiwxMDYsNDEsMywwLDM0LDQsNjYsNywxMzcsMTI0LDMyLDEsNjYsMTIsMTM3LDMyLDAsNjUsMzIsMTA2LDQxLDMsMCwzNCw1LDY2LDE4LDEzNywxMjQsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwxLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwxLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDIsMTI0LDMyLDAsNjUsNDAsMTA2LDMyLDIsNjYsMzEsMTMxLDE2NywxNiw2LDExXSk7dmFyIFVyPS9ccy87dmFyIFJyPS9eXHMrLztmdW5jdGlvbiBCcih0KXtyZXR1cm4gdD90LnNsaWNlKDAsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmVXIudGVzdCh0LmNoYXJBdChlKSk7KTtyZXR1cm4gZX0odCkrMSkucmVwbGFjZShSciwiIik6dH12YXIgQ3I9TmFOLFdyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHFyPS9eMGJbMDFdKyQvaSxWcj0vXjBvWzAtN10rJC9pLEdyPXBhcnNlSW50O3ZhciBIcj0xLzAsSnI9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIEtyKHQpe3JldHVybiB0Pyh0PWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDtpZihvZSh0KSlyZXR1cm4gQ3I7aWYoSyh0KSl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQudmFsdWVPZj90LnZhbHVlT2YoKTp0O3Q9SyhlKT9lKyIiOmV9aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiAwPT09dD90Oit0O3Q9QnIodCk7dmFyIHI9cXIudGVzdCh0KTtyZXR1cm4gcnx8VnIudGVzdCh0KT9Hcih0LnNsaWNlKDIpLHI/Mjo4KTpXci50ZXN0KHQpP0NyOit0fSh0KSk9PT1Icnx8dD09PS1Icj8odDwwPy0xOjEpKkpyOnQ9PXQ/dDowOjA9PT10P3Q6MH1hc3luYyBmdW5jdGlvbiBRcih0LGU9e30pe2xldCByPUxlKGUsImZzIiksbj1MZShlLCJjaHVua1NpemUiKTt2YXIgbztpZihyZShuKXx8KG49NjcxMDg4NjQpLG49cmUobz1uKT9LcihvKTowLCFUZSh0LHtmczpyfSkpcmV0dXJuIFByb21pc2UucmVqZWN0KCJmcCBpcyBub3QgYSBmaWxlIik7bGV0IHU9ZnVuY3Rpb24oKXtsZXQgdCxlLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKCl7dD1hcmd1bWVudHNbMF0sZT1hcmd1bWVudHNbMV19KSk7cmV0dXJuIHIucmVzb2x2ZT10LHIucmVqZWN0PWUscn0oKTt0cnl7bGV0e2NyZWF0ZTY0OmV9PWF3YWl0IGFzeW5jIGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e2V4cG9ydHM6e21lbTplLHh4aDMyOnIseHhoNjQ6bixpbml0MzI6byx1cGRhdGUzMjp1LGRpZ2VzdDMyOmksaW5pdDY0OmEsdXBkYXRlNjQ6YyxkaWdlc3Q2NDpmfX09dDtsZXQgcz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcik7ZnVuY3Rpb24gbCh0LHIpe2lmKGUuYnVmZmVyLmJ5dGVMZW5ndGg8dCtyKXtjb25zdCBuPU1hdGguY2VpbCgodCtyLWUuYnVmZmVyLmJ5dGVMZW5ndGgpLzY1NTM2KTtlLmdyb3cobikscz1uZXcgVWludDhBcnJheShlLmJ1ZmZlcil9fWZ1bmN0aW9uIHAodCxlLHIsbixvLHUpe2wodCk7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gcy5zZXQoaSkscigwLGUpLGkuc2V0KHMuc3ViYXJyYXkoMCx0KSkse3VwZGF0ZShlKXtsZXQgcjtyZXR1cm4gcy5zZXQoaSksInN0cmluZyI9PXR5cGVvZiBlPyhsKDMqZS5sZW5ndGgsdCkscj12LmVuY29kZUludG8oZSxzLnN1YmFycmF5KHQpKS53cml0dGVuKToobChlLmJ5dGVMZW5ndGgsdCkscy5zZXQoZSx0KSxyPWUuYnl0ZUxlbmd0aCksbigwLHQsciksaS5zZXQocy5zdWJhcnJheSgwLHQpKSx0aGlzfSxkaWdlc3Q6KCk9PihzLnNldChpKSx1KG8oMCkpKX19ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdD4+PjB9Y29uc3QgeT0ybioqNjRuLTFuO2Z1bmN0aW9uIGIodCl7cmV0dXJuIHQmeX1jb25zdCB2PW5ldyBUZXh0RW5jb2RlcixkPTAsZz0wbjtmdW5jdGlvbiBfKHQsZT1kKXtyZXR1cm4gbCgzKnQubGVuZ3RoLDApLGgocigwLHYuZW5jb2RlSW50byh0LHMpLndyaXR0ZW4sZSkpfWZ1bmN0aW9uIGoodCxlPWcpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksYihuKDAsdi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9cmV0dXJue2gzMjpfLGgzMlRvU3RyaW5nOih0LGU9ZCk9Pl8odCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpLGgzMlJhdzoodCxlPWQpPT4obCh0LmJ5dGVMZW5ndGgsMCkscy5zZXQodCksaChyKDAsdC5ieXRlTGVuZ3RoLGUpKSksY3JlYXRlMzI6KHQ9ZCk9PnAoNDgsdCxvLHUsaSxoKSxoNjQ6aixoNjRUb1N0cmluZzoodCxlPWcpPT5qKHQsZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIiksaDY0UmF3Oih0LGU9Zyk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSxiKG4oMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGU2NDoodD1nKT0+cCg4OCx0LGEsYyxmLGIpfX0oKGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKE5yKSkuaW5zdGFuY2UpfSgpLG89ZSgpLGk9ci5jcmVhdGVSZWFkU3RyZWFtKHQse2hpZ2hXYXRlck1hcms6bn0pO2kub24oImRhdGEiLCh0PT57by51cGRhdGUodCl9KSksaS5vbigiZW5kIiwoKCk9PntsZXQgdD1vLmRpZ2VzdCgpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwiMCIpO3UucmVzb2x2ZSh0KX0pKSxpLm9uKCJlcnJvciIsdS5yZWplY3QpfWNhdGNoKHQpe3UucmVqZWN0KHQudG9TdHJpbmcoKSl9cmV0dXJuIHV9ZnVuY3Rpb24gWHIodCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIFlyKHQscj17fSl7cmV0dXJuIFFyKHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/WHIoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNcih0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6WHIoT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9KHtmczplfSxyKSl9bGV0IGNoZWNrVG90YWxIYXNoPWFzeW5jKHIsbixvLHUpPT57bGV0IGk9dC5qb2luKHUsbyksYT0hMTtpZihhPURlKGkpLCFyZShyKSl7cmV0dXJue2Vycm9yOiJpbnZhbGlkIGZpbGVTaXplIGluIHBheWxvYWQifX1sZXQgYz0hMTtpZihhKXtjPXI9PT1lLnN0YXRTeW5jKGkpLnNpemV9bGV0IGY9ITE7YSYmYyYmYXdhaXQgWXIoaSkudGhlbigodD0+e2Y9bz09PXR9KSkuY2F0Y2goKHQ9Pntjb25zb2xlLmxvZyh0KSxjb25zb2xlLmxvZygiZnNJc0ZpbGUocGF0aEZpbGUpIixpLERlKGkpKSxmPSExfSkpO2xldCBzPWZ1bmN0aW9uKHIsbj0xKXtyZXR1cm4gVHIocixuLHtwYXRoOnQsZnM6ZX0pfSh1KSxsPVtdO2l0KHMsKCh0LHIpPT57bGV0IHU9dC5uYW1lLmluZGV4T2YoYCR7b31fYCk+PTAsaT1lLnN0YXRTeW5jKHQucGF0aCkuc2l6ZT09PW47dSYmaSYmbC5wdXNoKHIpfSkpO2xldCBwPXRlKGwpPjA7cmV0dXJue3N1Y2Nlc3M6e3BhdGg6aSxiQWxsRXhpc3Q6YSxiQWxsU2l6ZTpjLGJBbGxIYXNoOmYsYlNsczpwLHNsa3M6bH19fTsKCgpsZXQgaW5zdGFuY2UgPSBudWxsCmZ1bmN0aW9uIGluaXQoaW5wdXQpewoKICAgIC8vaW5pdAogICAgbGV0IHIKICAgIAogICAgICAgIHIgPSB7CiAgICAgICAgICAgIG1haW46IGNoZWNrVG90YWxIYXNoCiAgICAgICAgfQogICAgICAgIAoKICAgIC8vb24KICAgIAoKICAgIC8vc2F2ZQogICAgaW5zdGFuY2UgPSByCgp9CgpmdW5jdGlvbiBzZW5kTWVzc2FnZShkYXRhKSB7CiAgICAKICAgICAgICBwYXJlbnRQb3J0LnBvc3RNZXNzYWdlKGRhdGEpCiAgICAgICAgCn0KCmFzeW5jIGZ1bmN0aW9uIHJ1bihkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJ1bicsZGF0YSkKCiAgICAvL21vZGUKICAgIGxldCBtb2RlID0gZGF0YS5tb2RlCgogICAgLy9jaGVjawogICAgaWYobW9kZSAhPT0gJ2luaXQnICYmIG1vZGUgIT09ICdjYWxsJyl7CiAgICAgICAgcmV0dXJuCiAgICB9CgogICAgLy9pbml0CiAgICBpZihtb2RlID09PSAnaW5pdCcpewogICAgICAgIAogICAgICAgIHRyeXsKCiAgICAgICAgICAgIC8vdHlwZQogICAgICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CiAgICAKICAgICAgICAgICAgLy9pbnN0YW5jZQogICAgICAgICAgICBpZih0eXBlID09PSAnZnVuY3Rpb24nKXsKICAgICAgICAgICAgICAgIGluaXQoLi4uaW5wdXQpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZih0eXBlID09PSAnb2JqZWN0Jyl7CiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGNoZWNrVG90YWxIYXNoCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgCiAgICAgICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdlbWl0JywKICAgICAgICAgICAgICAgIGV2TmFtZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgIG1zZzogZXJyLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICAgICAgfQogICAgICAgICAgICAKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9mdW4KICAgICAgICAgICAgbGV0IGZ1biA9IGluc3RhbmNlW2RhdGEuZnVuXQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CgogICAgICAgICAgICAvL2V4ZWMKICAgICAgICAgICAgYXdhaXQgZnVuKC4uLmlucHV0KQogICAgICAgICAgICAgICAgLnRoZW4oKHN1YykgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdzdWNjZXNzJwogICAgICAgICAgICAgICAgICAgIG1zZz1zdWMKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdlcnJvcicKICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyCiAgICAgICAgICAgICAgICB9KQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBwYXJlbnRQb3J0Lm9uKCdtZXNzYWdlJywgcmVjdk1lc3NhZ2UpCiAgICAgICAgCgp0cnl7CiAgICBwcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuaGFuZGxlZFJlamVjdGlvbicsIGVycikKICAgIH0pCiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5jYXVnaHRFeGNlcHRpb24nLCBlcnIpCiAgICB9KQogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCBlcnIpCiAgICB9KQp9CmNhdGNoKGVycil7fQoK",Buffer.from(I,"base64").toString("utf8"));var I;function D(){let L=new w,I=function(s){try{return new M.Worker(s,{eval:!0})}catch(M){y(M)}}(s);if(!I)return y("invalid worker"),null;function D(){let M=function(){let M,s,w=new Promise((function(){M=arguments[0],s=arguments[1]}));return w.resolve=M,w.reject=s,w}(),s=function(){let M=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,s=[],w="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),L=w.length;for(let I=0;I<M;I++)s[I]=w[0|Math.random()*L];return s.join("")}(),w={mode:"call",id:s,fun:"main",input:[...arguments]};return I.postMessage(w),L.once(s,(s=>{"success"===s.state?M.resolve(s.msg):M.reject(s.msg)})),M}function y(M){L.emit("error",M)}return I.on("message",(function(M){let s=M,w=s.mode;"emit"!==w&&"return"!==w||("emit"===w&&L.emit(s.evName,s.msg),"return"===w&&L.emit(s.id,s))})),I.on("error",y),I.on("exit",(M=>{1!==M&&y("exit code["+M+"] !== 1")})),function(){let M={mode:"init",type:"function",input:[...arguments]};I.postMessage(M)}([...arguments]),L.main=D,L.main=D,L.terminate=function(){I?(I.terminate(),I=void 0):y("worker has been terminated")},L}L=async function(){let M=[...arguments],s=D();return await s.main(...M).finally((()=>{s.terminate()}))}}();try{process.on("unhandledRejection",(M=>{console.log("outer:unhandledRejection",M)})),process.on("uncaughtException",(M=>{console.log("outer:uncaughtException",M)})),process.on("uncaughtExceptionMonitor",(M=>{console.log("outer:uncaughtExceptionMonitor",M)}))}catch(M){}return L}(M)}({get exports(){return s},set exports(M){s=M}});var w=s,L={};!function(M,s){M.exports=function(){const M="function"==typeof Buffer,s="function"==typeof TextDecoder?new TextDecoder:void 0,w=(M=>{let s={};return M.forEach(((M,w)=>s[M]=w)),s})(("function"==typeof TextEncoder&&new TextEncoder,Array.prototype.slice.call("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="))),L=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,I=String.fromCharCode.bind(String),D="function"==typeof Uint8Array.from?Uint8Array.from.bind(Uint8Array):M=>new Uint8Array(Array.prototype.slice.call(M,0)),y=M=>M.replace(/[^A-Za-z0-9\+\/]/g,""),i=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,d=M=>{switch(M.length){case 4:var s=((7&M.charCodeAt(0))<<18|(63&M.charCodeAt(1))<<12|(63&M.charCodeAt(2))<<6|63&M.charCodeAt(3))-65536;return I(55296+(s>>>10))+I(56320+(1023&s));case 3:return I((15&M.charCodeAt(0))<<12|(63&M.charCodeAt(1))<<6|63&M.charCodeAt(2));default:return I((31&M.charCodeAt(0))<<6|63&M.charCodeAt(1))}},l=M=>M.replace(i,d),Z=M=>{if(M=M.replace(/\s+/g,""),!L.test(M))throw new TypeError("malformed base64.");M+="==".slice(2-(3&M.length));let s,D,y,i="";for(let L=0;L<M.length;)s=w[M.charAt(L++)]<<18|w[M.charAt(L++)]<<12|(D=w[M.charAt(L++)])<<6|(y=w[M.charAt(L++)]),i+=64===D?I(s>>16&255):64===y?I(s>>16&255,s>>8&255):I(s>>16&255,s>>8&255,255&s);return i},c="function"==typeof atob?M=>atob(y(M)):M?M=>Buffer.from(M,"base64").toString("binary"):Z,C=M?M=>D(Buffer.from(M,"base64")):M=>D(c(M).split("").map((M=>M.charCodeAt(0)))),N=M?M=>Buffer.from(M,"base64").toString("utf8"):s?M=>s.decode(C(M)):M=>l(c(M)),x=M=>y(M.replace(/[-_]/g,(M=>"-"==M?"+":"/"))),m=M=>N(x(M)),X=m;var Y={};!function(M){var s=Object.prototype.hasOwnProperty,w="~";function L(){}function I(M,s,w){this.fn=M,this.context=s,this.once=w||!1}function D(M,s,L,D,y){if("function"!=typeof L)throw new TypeError("The listener must be a function");var i=new I(L,D||M,y),d=w?w+s:s;return M._events[d]?M._events[d].fn?M._events[d]=[M._events[d],i]:M._events[d].push(i):(M._events[d]=i,M._eventsCount++),M}function y(M,s){0==--M._eventsCount?M._events=new L:delete M._events[s]}function i(){this._events=new L,this._eventsCount=0}Object.create&&(L.prototype=Object.create(null),(new L).__proto__||(w=!1)),i.prototype.eventNames=function(){var M,L,I=[];if(0===this._eventsCount)return I;for(L in M=this._events)s.call(M,L)&&I.push(w?L.slice(1):L);return Object.getOwnPropertySymbols?I.concat(Object.getOwnPropertySymbols(M)):I},i.prototype.listeners=function(M){var s=w?w+M:M,L=this._events[s];if(!L)return[];if(L.fn)return[L.fn];for(var I=0,D=L.length,y=new Array(D);I<D;I++)y[I]=L[I].fn;return y},i.prototype.listenerCount=function(M){var s=w?w+M:M,L=this._events[s];return L?L.fn?1:L.length:0},i.prototype.emit=function(M,s,L,I,D,y){var i=w?w+M:M;if(!this._events[i])return!1;var d,l,Z=this._events[i],c=arguments.length;if(Z.fn){switch(Z.once&&this.removeListener(M,Z.fn,void 0,!0),c){case 1:return Z.fn.call(Z.context),!0;case 2:return Z.fn.call(Z.context,s),!0;case 3:return Z.fn.call(Z.context,s,L),!0;case 4:return Z.fn.call(Z.context,s,L,I),!0;case 5:return Z.fn.call(Z.context,s,L,I,D),!0;case 6:return Z.fn.call(Z.context,s,L,I,D,y),!0}for(l=1,d=new Array(c-1);l<c;l++)d[l-1]=arguments[l];Z.fn.apply(Z.context,d)}else{var C,N=Z.length;for(l=0;l<N;l++)switch(Z[l].once&&this.removeListener(M,Z[l].fn,void 0,!0),c){case 1:Z[l].fn.call(Z[l].context);break;case 2:Z[l].fn.call(Z[l].context,s);break;case 3:Z[l].fn.call(Z[l].context,s,L);break;case 4:Z[l].fn.call(Z[l].context,s,L,I);break;default:if(!d)for(C=1,d=new Array(c-1);C<c;C++)d[C-1]=arguments[C];Z[l].fn.apply(Z[l].context,d)}}return!0},i.prototype.on=function(M,s,w){return D(this,M,s,w,!1)},i.prototype.once=function(M,s,w){return D(this,M,s,w,!0)},i.prototype.removeListener=function(M,s,L,I){var D=w?w+M:M;if(!this._events[D])return this;if(!s)return y(this,D),this;var i=this._events[D];if(i.fn)i.fn!==s||I&&!i.once||L&&i.context!==L||y(this,D);else{for(var d=0,l=[],Z=i.length;d<Z;d++)(i[d].fn!==s||I&&!i[d].once||L&&i[d].context!==L)&&l.push(i[d]);l.length?this._events[D]=1===l.length?l[0]:l:y(this,D)}return this},i.prototype.removeAllListeners=function(M){var s;return M?(s=w?w+M:M,this._events[s]&&y(this,s)):(this._events=new L,this._eventsCount=0),this},i.prototype.off=i.prototype.removeListener,i.prototype.addListener=i.prototype.on,i.prefixed=w,i.EventEmitter=i,M.exports=i}({get exports(){return Y},set exports(M){Y=M}});var T=Y;let b;!function(){if("browser"!=("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;let M=X("CgoKInVzZSBzdHJpY3QiO3ZhciB0PXJlcXVpcmUoInBhdGgiKSxlPXJlcXVpcmUoImZzIik7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgcj0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK3I8biYmITEhPT1lKHRbcl0scix0KTspO3JldHVybiB0fXZhciBuLG89ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0tMSx1PU9iamVjdCh0KSxpPXIodCksYT1pLmxlbmd0aDthLS07KXt2YXIgYz1pW24/YTorK29dO2lmKCExPT09ZSh1W2NdLGMsdSkpYnJlYWt9cmV0dXJuIHR9O3ZhciB1PSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT11fHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGM9YS5TeW1ib2wsZj1PYmplY3QucHJvdG90eXBlLHM9Zi5oYXNPd25Qcm9wZXJ0eSxsPWYudG9TdHJpbmcscD1jP2MudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIHk9IltvYmplY3QgTnVsbF0iLGI9IltvYmplY3QgVW5kZWZpbmVkXSIsdj1jP2MudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD9iOnk6diYmdiBpbiBPYmplY3QodCk/ZnVuY3Rpb24odCl7dmFyIGU9cy5jYWxsKHQscCkscj10W3BdO3RyeXt0W3BdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89bC5jYWxsKHQpO3JldHVybiBuJiYoZT90W3BdPXI6ZGVsZXRlIHRbcF0pLG99KHQpOmZ1bmN0aW9uKHQpe3JldHVybiBoLmNhbGwodCl9KHQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBfKHQpe3JldHVybiBnKHQpJiYiW29iamVjdCBBcmd1bWVudHNdIj09ZCh0KX12YXIgaj1PYmplY3QucHJvdG90eXBlLG09ai5oYXNPd25Qcm9wZXJ0eSxPPWoucHJvcGVydHlJc0VudW1lcmFibGUsdz1fKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/XzpmdW5jdGlvbih0KXtyZXR1cm4gZyh0KSYmbS5jYWxsKHQsImNhbGxlZSIpJiYhTy5jYWxsKHQsImNhbGxlZSIpfSxTPUFycmF5LmlzQXJyYXk7dmFyIEE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx4PUEmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx6PXgmJnguZXhwb3J0cz09PUE/YS5CdWZmZXI6dm9pZCAwLFA9KHo/ei5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbigpe3JldHVybiExfSxFPTkwMDcxOTkyNTQ3NDA5OTEsaz0vXig/OjB8WzEtOV1cZCopJC87ZnVuY3Rpb24gRih0LGUpe3ZhciByPXR5cGVvZiB0O3JldHVybiEhKGU9bnVsbD09ZT9FOmUpJiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZrLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX12YXIgJD05MDA3MTk5MjU0NzQwOTkxO2Z1bmN0aW9uIEwodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PSR9dmFyIFQ9e307VFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09VFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09VFsiW29iamVjdCBJbnQ4QXJyYXldIl09VFsiW29iamVjdCBJbnQxNkFycmF5XSJdPVRbIltvYmplY3QgSW50MzJBcnJheV0iXT1UWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09VFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1UWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVRbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsVFsiW29iamVjdCBBcmd1bWVudHNdIl09VFsiW29iamVjdCBBcnJheV0iXT1UWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPVRbIltvYmplY3QgQm9vbGVhbl0iXT1UWyJbb2JqZWN0IERhdGFWaWV3XSJdPVRbIltvYmplY3QgRGF0ZV0iXT1UWyJbb2JqZWN0IEVycm9yXSJdPVRbIltvYmplY3QgRnVuY3Rpb25dIl09VFsiW29iamVjdCBNYXBdIl09VFsiW29iamVjdCBOdW1iZXJdIl09VFsiW29iamVjdCBPYmplY3RdIl09VFsiW29iamVjdCBSZWdFeHBdIl09VFsiW29iamVjdCBTZXRdIl09VFsiW29iamVjdCBTdHJpbmddIl09VFsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciBELEk9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxNPUkmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxOPU0mJk0uZXhwb3J0cz09PUkmJnUucHJvY2VzcyxVPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PU0mJk0ucmVxdWlyZSYmTS5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fE4mJk4uYmluZGluZyYmTi5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKSxSPVUmJlUuaXNUeXBlZEFycmF5LEI9Uj8oRD1SLGZ1bmN0aW9uKHQpe3JldHVybiBEKHQpfSk6ZnVuY3Rpb24odCl7cmV0dXJuIGcodCkmJkwodC5sZW5ndGgpJiYhIVRbZCh0KV19LEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBXKHQsZSl7dmFyIHI9Uyh0KSxuPSFyJiZ3KHQpLG89IXImJiFuJiZQKHQpLHU9IXImJiFuJiYhbyYmQih0KSxpPXJ8fG58fG98fHUsYT1pP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLG49QXJyYXkodCk7KytyPHQ7KW5bcl09ZShyKTtyZXR1cm4gbn0odC5sZW5ndGgsU3RyaW5nKTpbXSxjPWEubGVuZ3RoO2Zvcih2YXIgZiBpbiB0KSFlJiYhQy5jYWxsKHQsZil8fGkmJigibGVuZ3RoIj09Znx8byYmKCJvZmZzZXQiPT1mfHwicGFyZW50Ij09Zil8fHUmJigiYnVmZmVyIj09Znx8ImJ5dGVMZW5ndGgiPT1mfHwiYnl0ZU9mZnNldCI9PWYpfHxGKGYsYykpfHxhLnB1c2goZik7cmV0dXJuIGF9dmFyIHE9T2JqZWN0LnByb3RvdHlwZTt2YXIgVj1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChlKHIpKX19KE9iamVjdC5rZXlzLE9iamVjdCksRz1WLEg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBKKHQpe2lmKHI9KGU9dCkmJmUuY29uc3RydWN0b3IsZSE9PSgiZnVuY3Rpb24iPT10eXBlb2YgciYmci5wcm90b3R5cGV8fHEpKXJldHVybiBHKHQpO3ZhciBlLHIsbj1bXTtmb3IodmFyIG8gaW4gT2JqZWN0KHQpKUguY2FsbCh0LG8pJiYiY29uc3RydWN0b3IiIT1vJiZuLnB1c2gobyk7cmV0dXJuIG59ZnVuY3Rpb24gSyh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX12YXIgUT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsWD0iW29iamVjdCBGdW5jdGlvbl0iLFk9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixaPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gdHQodCl7aWYoIUsodCkpcmV0dXJuITE7dmFyIGU9ZCh0KTtyZXR1cm4gZT09WHx8ZT09WXx8ZT09UXx8ZT09Wn1mdW5jdGlvbiBldCh0KXtyZXR1cm4gbnVsbCE9dCYmTCh0Lmxlbmd0aCkmJiF0dCh0KX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZXQodCk/Vyh0KTpKKHQpfXZhciBudD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKG51bGw9PXIpcmV0dXJuIHI7aWYoIWV0KHIpKXJldHVybiB0KHIsbik7Zm9yKHZhciBvPXIubGVuZ3RoLHU9ZT9vOi0xLGk9T2JqZWN0KHIpOyhlP3UtLTorK3U8bykmJiExIT09bihpW3VdLHUsaSk7KTtyZXR1cm4gcn19KChmdW5jdGlvbih0LGUpe3JldHVybiB0JiZvKHQsZSxydCl9KSksb3Q9bnQ7ZnVuY3Rpb24gdXQodCl7cmV0dXJuIHR9ZnVuY3Rpb24gaXQodCxlKXt2YXIgbjtyZXR1cm4oUyh0KT9yOm90KSh0LCJmdW5jdGlvbiI9PXR5cGVvZihuPWUpP246dXQpfXZhciBhdCxjdD1hWyJfX2NvcmUtanNfc2hhcmVkX18iXSxmdD0oYXQ9L1teLl0rJC8uZXhlYyhjdCYmY3Qua2V5cyYmY3Qua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2F0OiIiO3ZhciBzdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbHQodCl7aWYobnVsbCE9dCl7dHJ5e3JldHVybiBzdC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn12YXIgcHQ9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8saHQ9RnVuY3Rpb24ucHJvdG90eXBlLHl0PU9iamVjdC5wcm90b3R5cGUsYnQ9aHQudG9TdHJpbmcsdnQ9eXQuaGFzT3duUHJvcGVydHksZHQ9UmVnRXhwKCJeIitidC5jYWxsKHZ0KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBndCh0KXtyZXR1cm4hKCFLKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hIWZ0JiZmdCBpbiB0fSh0KSkmJih0dCh0KT9kdDpwdCkudGVzdChsdCh0KSl9ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfSh0LGUpO3JldHVybiBndChyKT9yOnZvaWQgMH12YXIganQ9X3QoYSwiRGF0YVZpZXciKSxtdD1fdChhLCJNYXAiKSxPdD1fdChhLCJQcm9taXNlIiksd3Q9X3QoYSwiU2V0IiksU3Q9X3QoYSwiV2Vha01hcCIpLEF0PSJbb2JqZWN0IE1hcF0iLHh0PSJbb2JqZWN0IFByb21pc2VdIix6dD0iW29iamVjdCBTZXRdIixQdD0iW29iamVjdCBXZWFrTWFwXSIsRXQ9IltvYmplY3QgRGF0YVZpZXddIixrdD1sdChqdCksRnQ9bHQobXQpLCR0PWx0KE90KSxMdD1sdCh3dCksVHQ9bHQoU3QpLER0PWQ7KGp0JiZEdChuZXcganQobmV3IEFycmF5QnVmZmVyKDEpKSkhPUV0fHxtdCYmRHQobmV3IG10KSE9QXR8fE90JiZEdChPdC5yZXNvbHZlKCkpIT14dHx8d3QmJkR0KG5ldyB3dCkhPXp0fHxTdCYmRHQobmV3IFN0KSE9UHQpJiYoRHQ9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0KSxyPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLG49cj9sdChyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIGt0OnJldHVybiBFdDtjYXNlIEZ0OnJldHVybiBBdDtjYXNlICR0OnJldHVybiB4dDtjYXNlIEx0OnJldHVybiB6dDtjYXNlIFR0OnJldHVybiBQdH1yZXR1cm4gZX0pO3ZhciBJdD1EdCxNdD0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBOdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmVbdF19fXZhciBVdD1OdCgibGVuZ3RoIiksUnQ9UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3ZhciBCdD0iXFx1ZDgwMC1cXHVkZmZmIixDdD0iWyIrQnQrIl0iLFd0PSJbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXSIscXQ9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsVnQ9IlteIitCdCsiXSIsR3Q9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLEh0PSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixKdD0iKD86IitXdCsifCIrcXQrIikiKyI/IixLdD0iW1xcdWZlMGVcXHVmZTBmXT8iLFF0PUt0K0p0KygiKD86XFx1MjAwZCg/OiIrW1Z0LEd0LEh0XS5qb2luKCJ8IikrIikiK0t0K0p0KyIpKiIpLFh0PSIoPzoiK1tWdCtXdCsiPyIsV3QsR3QsSHQsQ3RdLmpvaW4oInwiKSsiKSIsWXQ9UmVnRXhwKHF0KyIoPz0iK3F0KyIpfCIrWHQrUXQsImciKTtmdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFJ0LnRlc3QodCl9KHQpP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1ZdC5sYXN0SW5kZXg9MDtZdC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9KHQpOlV0KHQpfWZ1bmN0aW9uIHRlKHQpe2lmKG51bGw9PXQpcmV0dXJuIDA7aWYoZXQodCkpcmV0dXJuInN0cmluZyI9PXR5cGVvZihlPXQpfHwhUyhlKSYmZyhlKSYmZChlKT09TXQ/WnQodCk6dC5sZW5ndGg7dmFyIGUscj1JdCh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOkoodCkubGVuZ3RofWZ1bmN0aW9uIGVlKHQpe3JldHVybiEoIWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSh0KXx8IiI9PT10KX1mdW5jdGlvbiByZSh0KXtsZXQgZT0hMTtpZihlZSh0KSllPSFpc05hTihOdW1iZXIodCkpO2Vsc2UgaWYoZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpKXtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH0odCkpcmV0dXJuITE7ZT0hMH1yZXR1cm4gZX12YXIgbmU9IltvYmplY3QgU3ltYm9sXSI7ZnVuY3Rpb24gb2UodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fHxnKHQpJiZkKHQpPT1uZX12YXIgdWU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8saWU9L15cdyokLztmdW5jdGlvbiBhZSh0LGUpe2lmKFModCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9ciYmInN5bWJvbCIhPXImJiJib29sZWFuIiE9ciYmbnVsbCE9dCYmIW9lKHQpKXx8KGllLnRlc3QodCl8fCF1ZS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKSl9dmFyIGNlPV90KE9iamVjdCwiY3JlYXRlIik7dmFyIGZlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIHNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbGUodCl7dmFyIGU9LTEscj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gcGUodCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9ZnVuY3Rpb24gaGUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihwZSh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfWxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189Y2U/Y2UobnVsbCk6e30sdGhpcy5zaXplPTB9LGxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9LGxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihjZSl7dmFyIHI9ZVt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1yP3ZvaWQgMDpyfXJldHVybiBmZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9LGxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gY2U/dm9pZCAwIT09ZVt0XTpzZS5jYWxsKGUsdCl9LGxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPWNlJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9O3ZhciB5ZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGJlKHQpe3ZhciBlPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHZlKHQsZSl7dmFyIHIsbixvPXQuX19kYXRhX187cmV0dXJuKCJzdHJpbmciPT0obj10eXBlb2Yocj1lKSl8fCJudW1iZXIiPT1ufHwic3ltYm9sIj09bnx8ImJvb2xlYW4iPT1uPyJfX3Byb3RvX18iIT09cjpudWxsPT09cik/b1sic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpvLm1hcH1mdW5jdGlvbiBkZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1iZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxiZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1oZShlLHQpO3JldHVybiEocjwwKSYmKHI9PWUubGVuZ3RoLTE/ZS5wb3AoKTp5ZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMCl9LGJlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPWhlKGUsdCk7cmV0dXJuIHI8MD92b2lkIDA6ZVtyXVsxXX0sYmUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gaGUodGhpcy5fX2RhdGFfXyx0KT4tMX0sYmUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1oZShyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfSxkZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBsZSxtYXA6bmV3KG10fHxiZSksc3RyaW5nOm5ldyBsZX19LGRlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dmUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX0sZGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdmUodGhpcyx0KS5nZXQodCl9LGRlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHZlKHRoaXMsdCkuaGFzKHQpfSxkZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dmUodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc307dmFyIGdlPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBfZSh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHxudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGdlKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxvPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sdT1yLmNhY2hlO2lmKHUuaGFzKG8pKXJldHVybiB1LmdldChvKTt2YXIgaT10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9dS5zZXQobyxpKXx8dSxpfTtyZXR1cm4gci5jYWNoZT1uZXcoX2UuQ2FjaGV8fGRlKSxyfV9lLkNhY2hlPWRlO3ZhciBqZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxtZT0vXFwoXFwpPy9nLE9lPWZ1bmN0aW9uKHQpe3ZhciBlPV9lKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1yLnNpemUmJnIuY2xlYXIoKSx0fSkpLHI9ZS5jYWNoZTtyZXR1cm4gZX0oKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoamUsKGZ1bmN0aW9uKHQscixuLG8pe2UucHVzaChuP28ucmVwbGFjZShtZSwiJDEiKTpyfHx0KX0pKSxlfSkpLHdlPU9lO2Z1bmN0aW9uIFNlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89QXJyYXkobik7KytyPG47KW9bcl09ZSh0W3JdLHIsdCk7cmV0dXJuIG99dmFyIEFlPTEvMCx4ZT1jP2MucHJvdG90eXBlOnZvaWQgMCx6ZT14ZT94ZS50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gUGUodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0O2lmKFModCkpcmV0dXJuIFNlKHQsUGUpKyIiO2lmKG9lKHQpKXJldHVybiB6ZT96ZS5jYWxsKHQpOiIiO3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1BZT8iLTAiOmV9ZnVuY3Rpb24gRWUodCxlKXtyZXR1cm4gUyh0KT90OmFlKHQsZSk/W3RdOndlKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10PyIiOlBlKHQpfSh0KSl9dmFyIGtlPTEvMDtmdW5jdGlvbiBGZSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fG9lKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIjAiPT1lJiYxL3Q9PS1rZT8iLTAiOmV9ZnVuY3Rpb24gJGUodCxlKXtmb3IodmFyIHI9MCxuPShlPUVlKGUsdCkpLmxlbmd0aDtudWxsIT10JiZyPG47KXQ9dFtGZShlW3IrK10pXTtyZXR1cm4gciYmcj09bj90OnZvaWQgMH1mdW5jdGlvbiBMZSh0LGUscil7dmFyIG49bnVsbD09dD92b2lkIDA6JGUodCxlKTtyZXR1cm4gdm9pZCAwPT09bj9yOm59ZnVuY3Rpb24gVGUodCxlPXt9KXtsZXQgcj1MZShlLCJmcyIpO3JldHVybiEhci5leGlzdHNTeW5jKHQpJiYoIXIubHN0YXRTeW5jKHQpLmlzRGlyZWN0b3J5KCkmJiFyLmxzdGF0U3luYyh0KS5pc1N5bWJvbGljTGluaygpKX1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gVGUodCx7ZnM6ZX0pfWZ1bmN0aW9uIEllKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoLG89MCx1PVtdOysrcjxuOyl7dmFyIGk9dFtyXTtlKGkscix0KSYmKHVbbysrXT1pKX1yZXR1cm4gdX1mdW5jdGlvbiBNZSh0LGUpe3ZhciByPVtdO3JldHVybiBvdCh0LChmdW5jdGlvbih0LG4sbyl7ZSh0LG4sbykmJnIucHVzaCh0KX0pKSxyfWZ1bmN0aW9uIE5lKHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IGJlKHQpO3RoaXMuc2l6ZT1lLnNpemV9TmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgYmUsdGhpcy5zaXplPTB9LE5lLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLHJ9LE5lLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfSxOZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX0sTmUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIGJlKXt2YXIgbj1yLl9fZGF0YV9fO2lmKCFtdHx8bi5sZW5ndGg8MTk5KXJldHVybiBuLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK3Iuc2l6ZSx0aGlzO3I9dGhpcy5fX2RhdGFfXz1uZXcgZGUobil9cmV0dXJuIHIuc2V0KHQsZSksdGhpcy5zaXplPXIuc2l6ZSx0aGlzfTtmdW5jdGlvbiBVZSh0KXt2YXIgZT0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgZGU7KytlPHI7KXRoaXMuYWRkKHRbZV0pfWZ1bmN0aW9uIFJlKHQsZSl7Zm9yKHZhciByPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoOysrcjxuOylpZihlKHRbcl0scix0KSlyZXR1cm4hMDtyZXR1cm4hMX1VZS5wcm90b3R5cGUuYWRkPVVlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh0LCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIiksdGhpc30sVWUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9O3ZhciBCZT0xLENlPTI7ZnVuY3Rpb24gV2UodCxlLHIsbixvLHUpe3ZhciBpPXImQmUsYT10Lmxlbmd0aCxjPWUubGVuZ3RoO2lmKGEhPWMmJiEoaSYmYz5hKSlyZXR1cm4hMTt2YXIgZj11LmdldCh0KSxzPXUuZ2V0KGUpO2lmKGYmJnMpcmV0dXJuIGY9PWUmJnM9PXQ7dmFyIGw9LTEscD0hMCxoPXImQ2U/bmV3IFVlOnZvaWQgMDtmb3IodS5zZXQodCxlKSx1LnNldChlLHQpOysrbDxhOyl7dmFyIHk9dFtsXSxiPWVbbF07aWYobil2YXIgdj1pP24oYix5LGwsZSx0LHUpOm4oeSxiLGwsdCxlLHUpO2lmKHZvaWQgMCE9PXYpe2lmKHYpY29udGludWU7cD0hMTticmVha31pZihoKXtpZighUmUoZSwoZnVuY3Rpb24odCxlKXtpZihpPWUsIWguaGFzKGkpJiYoeT09PXR8fG8oeSx0LHIsbix1KSkpcmV0dXJuIGgucHVzaChlKTt2YXIgaX0pKSl7cD0hMTticmVha319ZWxzZSBpZih5IT09YiYmIW8oeSxiLHIsbix1KSl7cD0hMTticmVha319cmV0dXJuIHUuZGVsZXRlKHQpLHUuZGVsZXRlKGUpLHB9dmFyIHFlPWEuVWludDhBcnJheTtmdW5jdGlvbiBWZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtyWysrZV09W24sdF19KSkscn1mdW5jdGlvbiBHZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7clsrK2VdPXR9KSkscn12YXIgSGU9MSxKZT0yLEtlPSJbb2JqZWN0IEJvb2xlYW5dIixRZT0iW29iamVjdCBEYXRlXSIsWGU9IltvYmplY3QgRXJyb3JdIixZZT0iW29iamVjdCBNYXBdIixaZT0iW29iamVjdCBOdW1iZXJdIix0cj0iW29iamVjdCBSZWdFeHBdIixlcj0iW29iamVjdCBTZXRdIixycj0iW29iamVjdCBTdHJpbmddIixucj0iW29iamVjdCBTeW1ib2xdIixvcj0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLHVyPSJbb2JqZWN0IERhdGFWaWV3XSIsaXI9Yz9jLnByb3RvdHlwZTp2b2lkIDAsYXI9aXI/aXIudmFsdWVPZjp2b2lkIDA7dmFyIGNyPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZnI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzcj1mcj9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCksSWUoZnIodCksKGZ1bmN0aW9uKGUpe3JldHVybiBjci5jYWxsKHQsZSl9KSkpfTpmdW5jdGlvbigpe3JldHVybltdfTtmdW5jdGlvbiBscih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIFModCk/bjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWUubGVuZ3RoLG89dC5sZW5ndGg7KytyPG47KXRbbytyXT1lW3JdO3JldHVybiB0fShuLHIodCkpfSh0LHJ0LHNyKX12YXIgcHI9MSxocj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciB5cj0xLGJyPSJbb2JqZWN0IEFyZ3VtZW50c10iLHZyPSJbb2JqZWN0IEFycmF5XSIsZHI9IltvYmplY3QgT2JqZWN0XSIsZ3I9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfcih0LGUscixuLG8sdSl7dmFyIGk9Uyh0KSxhPVMoZSksYz1pP3ZyOkl0KHQpLGY9YT92cjpJdChlKSxzPShjPWM9PWJyP2RyOmMpPT1kcixsPShmPWY9PWJyP2RyOmYpPT1kcixwPWM9PWY7aWYocCYmUCh0KSl7aWYoIVAoZSkpcmV0dXJuITE7aT0hMCxzPSExfWlmKHAmJiFzKXJldHVybiB1fHwodT1uZXcgTmUpLGl8fEIodCk/V2UodCxlLHIsbixvLHUpOmZ1bmN0aW9uKHQsZSxyLG4sbyx1LGkpe3N3aXRjaChyKXtjYXNlIHVyOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSBvcjpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhdShuZXcgcWUodCksbmV3IHFlKGUpKSk7Y2FzZSBLZTpjYXNlIFFlOmNhc2UgWmU6cmV0dXJuIHBlKCt0LCtlKTtjYXNlIFhlOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSB0cjpjYXNlIHJyOnJldHVybiB0PT1lKyIiO2Nhc2UgWWU6dmFyIGE9VmU7Y2FzZSBlcjp2YXIgYz1uJkhlO2lmKGF8fChhPUdlKSx0LnNpemUhPWUuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGY9aS5nZXQodCk7aWYoZilyZXR1cm4gZj09ZTtufD1KZSxpLnNldCh0LGUpO3ZhciBzPVdlKGEodCksYShlKSxuLG8sdSxpKTtyZXR1cm4gaS5kZWxldGUodCkscztjYXNlIG5yOmlmKGFyKXJldHVybiBhci5jYWxsKHQpPT1hci5jYWxsKGUpfXJldHVybiExfSh0LGUsYyxyLG4sbyx1KTtpZighKHImeXIpKXt2YXIgaD1zJiZnci5jYWxsKHQsIl9fd3JhcHBlZF9fIikseT1sJiZnci5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYoaHx8eSl7dmFyIGI9aD90LnZhbHVlKCk6dCx2PXk/ZS52YWx1ZSgpOmU7cmV0dXJuIHV8fCh1PW5ldyBOZSksbyhiLHYscixuLHUpfX1yZXR1cm4hIXAmJih1fHwodT1uZXcgTmUpLGZ1bmN0aW9uKHQsZSxyLG4sbyx1KXt2YXIgaT1yJnByLGE9bHIodCksYz1hLmxlbmd0aDtpZihjIT1scihlKS5sZW5ndGgmJiFpKXJldHVybiExO2Zvcih2YXIgZj1jO2YtLTspe3ZhciBzPWFbZl07aWYoIShpP3MgaW4gZTpoci5jYWxsKGUscykpKXJldHVybiExfXZhciBsPXUuZ2V0KHQpLHA9dS5nZXQoZSk7aWYobCYmcClyZXR1cm4gbD09ZSYmcD09dDt2YXIgaD0hMDt1LnNldCh0LGUpLHUuc2V0KGUsdCk7Zm9yKHZhciB5PWk7KytmPGM7KXt2YXIgYj10W3M9YVtmXV0sdj1lW3NdO2lmKG4pdmFyIGQ9aT9uKHYsYixzLGUsdCx1KTpuKGIsdixzLHQsZSx1KTtpZighKHZvaWQgMD09PWQ/Yj09PXZ8fG8oYix2LHIsbix1KTpkKSl7aD0hMTticmVha315fHwoeT0iY29uc3RydWN0b3IiPT1zKX1pZihoJiYheSl7dmFyIGc9dC5jb25zdHJ1Y3RvcixfPWUuY29uc3RydWN0b3I7Zz09X3x8ISgiY29uc3RydWN0b3IiaW4gdCl8fCEoImNvbnN0cnVjdG9yImluIGUpfHwiZnVuY3Rpb24iPT10eXBlb2YgZyYmZyBpbnN0YW5jZW9mIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBfJiZfIGluc3RhbmNlb2YgX3x8KGg9ITEpfXJldHVybiB1LmRlbGV0ZSh0KSx1LmRlbGV0ZShlKSxofSh0LGUscixuLG8sdSkpfWZ1bmN0aW9uIGpyKHQsZSxyLG4sbyl7cmV0dXJuIHQ9PT1lfHwobnVsbD09dHx8bnVsbD09ZXx8IWcodCkmJiFnKGUpP3QhPXQmJmUhPWU6X3IodCxlLHIsbixqcixvKSl9dmFyIG1yPTEsT3I9MjtmdW5jdGlvbiB3cih0KXtyZXR1cm4gdD09dCYmIUsodCl9ZnVuY3Rpb24gU3IodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KHIpKSl9fWZ1bmN0aW9uIEFyKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0sbz10W25dO2Vbcl09W24sbyx3cihvKV19cmV0dXJuIGV9KHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT9TcihlWzBdWzBdLGVbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09dHx8ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ci5sZW5ndGgsdT1vLGk9IW47aWYobnVsbD09dClyZXR1cm4hdTtmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIGE9cltvXTtpZihpJiZhWzJdP2FbMV0hPT10W2FbMF1dOiEoYVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHU7KXt2YXIgYz0oYT1yW29dKVswXSxmPXRbY10scz1hWzFdO2lmKGkmJmFbMl0pe2lmKHZvaWQgMD09PWYmJiEoYyBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBsPW5ldyBOZTtpZihuKXZhciBwPW4oZixzLGMsdCxlLGwpO2lmKCEodm9pZCAwPT09cD9qcihzLGYsbXJ8T3IsbixsKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9KHIsdCxlKX19ZnVuY3Rpb24geHIodCxlKXtyZXR1cm4gbnVsbCE9dCYmZSBpbiBPYmplY3QodCl9ZnVuY3Rpb24genIodCxlKXtyZXR1cm4gbnVsbCE9dCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0tMSxvPShlPUVlKGUsdCkpLmxlbmd0aCx1PSExOysrbjxvOyl7dmFyIGk9RmUoZVtuXSk7aWYoISh1PW51bGwhPXQmJnIodCxpKSkpYnJlYWs7dD10W2ldfXJldHVybiB1fHwrK24hPW8/dTohIShvPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJkwobykmJkYoaSxvKSYmKFModCl8fHcodCkpfSh0LGUseHIpfXZhciBQcj0xLEVyPTI7ZnVuY3Rpb24ga3IodCl7cmV0dXJuIGFlKHQpP050KEZlKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuICRlKGUsdCl9fSh0KX1mdW5jdGlvbiBGcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90Om51bGw9PXQ/dXQ6Im9iamVjdCI9PXR5cGVvZiB0P1ModCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gYWUodCkmJndyKGUpP1NyKEZlKHQpLGUpOmZ1bmN0aW9uKHIpe3ZhciBuPUxlKHIsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1lP3pyKHIsdCk6anIoZSxuLFByfEVyKX19KHRbMF0sdFsxXSk6QXIodCk6a3IodCl9ZnVuY3Rpb24gJHIodCxlKXt2YXIgcj0tMSxuPWV0KHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gb3QodCwoZnVuY3Rpb24odCxvLHUpe25bKytyXT1lKHQsbyx1KX0pKSxufWZ1bmN0aW9uIExyKHQsZT17fSl7bGV0IHI9TGUoZSwiZnMiKTtpZighci5leGlzdHNTeW5jKHQpKXJldHVybiExO2xldCBuPXIubHN0YXRTeW5jKHQpO3JldHVybiFuLmlzRmlsZSgpJiYhbi5pc1N5bWJvbGljTGluaygpfWZ1bmN0aW9uIFRyKHQsZT0xLHI9e30pe2xldCBuPUxlKHIsInBhdGgiKSxvPUxlKHIsImZzIik7aWYoIUxyKHQse2ZzOm99KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO2xldCB1PVtdO3ZhciBpLGE7cmV0dXJuIHU9ZnVuY3Rpb24odCxlPTEscj17fSl7bGV0IG49MSxvPUxlKHIsInBhdGgiKSx1PUxlKHIsImZzIik7aWYoIUxyKHQse2ZzOnV9KSl0aHJvdyBuZXcgRXJyb3IoYGZkWyR7dH1dIGlzIG5vdCBhIGZvbGRlcmApO3JldHVybiBmdW5jdGlvbiB0KHIpe2xldCBpPVtdO3JldHVybiBMcihyLHtmczp1fSk/KGl0KHUucmVhZGRpclN5bmMociksKGZ1bmN0aW9uKGEpe2xldCBjPW8ucmVzb2x2ZShyLGEpLGY9bnVsbDt0cnl7Zj11LnN0YXRTeW5jKGMpfWNhdGNoKHQpe31mJiZmLmlzRGlyZWN0b3J5KCk/KGkucHVzaCh7aXNGb2xkZXI6ITAsbGV2ZWw6bixwYXRoOmMsbmFtZTpvLmJhc2VuYW1lKGMpfSksbis9MSwobjw9ZXx8bnVsbD09PWUpJiYoaT1pLmNvbmNhdCh0KGMpKSksbi09MSk6aS5wdXNoKHtpc0ZvbGRlcjohMSxsZXZlbDpuLHBhdGg6YyxuYW1lOm8uYmFzZW5hbWUoYyl9KX0pKSxpKTppfSh0KX0odCxlLHtwYXRoOm4sZnM6b30pLGE9e2lzRm9sZGVyOiExfSx1PShTKGk9dSk/SWU6TWUpKGksRnIoYSkpLHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oUyh0KT9TZTokcikodCxGcihlKSl9KHUsKHQ9PihkZWxldGUgdC5pc0ZvbGRlcix0KSkpLHV9ZnVuY3Rpb24gRHIodCl7cmV0dXJuIERyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxEcih0KX1mdW5jdGlvbiBJcih0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT09RHIodCl8fG51bGw9PT10KXJldHVybiB0O3ZhciByPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09RHIobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1lP1N0cmluZzpOdW1iZXIpKHQpfSh0LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PURyKGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIE1yKHQsZSxyKXtyZXR1cm4oZT1JcihlKSlpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH1jb25zdCBOcj1uZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw0OCw4LDk2LDMsMTI3LDEyNywxMjcsMSwxMjcsOTYsMywxMjcsMTI3LDEyNywwLDk2LDIsMTI3LDEyNywwLDk2LDEsMTI3LDEsMTI3LDk2LDMsMTI3LDEyNywxMjYsMSwxMjYsOTYsMywxMjYsMTI3LDEyNywxLDEyNiw5NiwyLDEyNywxMjYsMCw5NiwxLDEyNywxLDEyNiwzLDExLDEwLDAsMCwyLDEsMyw0LDUsNiwxLDcsNSwzLDEsMCwxLDcsODUsOSwzLDEwOSwxMDEsMTA5LDIsMCw1LDEyMCwxMjAsMTA0LDUxLDUwLDAsMCw2LDEwNSwxMTAsMTA1LDExNiw1MSw1MCwwLDIsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDUxLDUwLDAsMyw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDUxLDUwLDAsNCw1LDEyMCwxMjAsMTA0LDU0LDUyLDAsNSw2LDEwNSwxMTAsMTA1LDExNiw1NCw1MiwwLDcsOCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDU0LDUyLDAsOCw4LDEwMCwxMDUsMTAzLDEwMSwxMTUsMTE2LDU0LDUyLDAsOSwxMCwyNTEsMjIsMTAsMjQyLDEsMSw0LDEyNywzMiwwLDMyLDEsMTA2LDMzLDMsMzIsMSw2NSwxNiw3OSw0LDEyNywzMiwzLDY1LDE2LDEwNywzMyw2LDMyLDIsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDMzLDMsMzIsMiw2NSwxMzcsMjM1LDIwOCwyMDgsNywxMDcsMzMsNCwzMiwyLDY1LDIwNywxNDAsMTYyLDE0Miw2LDEwNiwzMyw1LDMsNjQsMzIsMywzMiwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNCwzMiwwLDY1LDQsMTA2LDM0LDAsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNCwzMiwyLDMyLDAsNjUsNCwxMDYsMzQsMCw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDUsMzIsMCw2NSw0LDEwNiwzNCwwLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDUsMzIsNiwzMiwwLDY1LDQsMTA2LDM0LDAsNzksMTMsMCwxMSwzMiwyLDY1LDEyLDExOSwzMiw1LDY1LDE4LDExOSwxMDYsMzIsNCw2NSw3LDExOSwxMDYsMzIsMyw2NSwxLDExOSwxMDYsNSwzMiwyLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwNiwxMSwzMiwxLDEwNiwzMiwwLDMyLDEsNjUsMTUsMTEzLDE2LDEsMTEsMTQ2LDEsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwxLDY1LDQsMTA2LDMyLDIsNzUsNjksNCw2NCwzMiwwLDMyLDEsNDAsMiwwLDY1LDE4OSwyMjAsMjAyLDE0OSwxMjQsMTA4LDEwNiw2NSwxNywxMTksNjUsMTc1LDIxNCwyMTEsMTkwLDIsMTA4LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDEyLDEsMTEsMTEsMyw2NCwzMiwxLDMyLDIsNzksNjksNCw2NCwzMiwwLDMyLDEsNDUsMCwwLDY1LDE3NywyMDcsMjE3LDE3OCwxLDEwOCwxMDYsNjUsMTEsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDAsMzIsMSw2NSwxLDEwNiwzMywxLDEyLDEsMTEsMTEsMzIsMCwzMiwwLDY1LDE1LDExOCwxMTUsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMzQsMCw2NSwxMywxMTgsMzIsMCwxMTUsNjUsMTg5LDIyMCwyMDIsMTQ5LDEyNCwxMDgsMzQsMCw2NSwxNiwxMTgsMzIsMCwxMTUsMTEsNjMsMCwzMiwwLDY1LDgsMTA2LDMyLDEsNjUsMTY4LDEzNiwxNDEsMTYxLDIsMTA2LDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwxLDY1LDEzNywyMzUsMjA4LDIwOCw3LDEwNyw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw1NCwyLDAsMzIsMCw2NSwyMCwxMDYsMzIsMSw2NSwyMDcsMTQwLDE2MiwxNDIsNiwxMDYsNTQsMiwwLDExLDE5NSw0LDEsNiwxMjcsMzIsMSwzMiwyLDEwNiwzMyw2LDMyLDAsNjUsMjQsMTA2LDMzLDQsMzIsMCw2NSw0MCwxMDYsNDAsMiwwLDMzLDMsMzIsMCwzMiwwLDQwLDIsMCwzMiwyLDEwNiw1NCwyLDAsMzIsMCw2NSw0LDEwNiwzNCw1LDMyLDUsNDAsMiwwLDMyLDIsNjUsMTYsNzksMzIsMCw0MCwyLDAsNjUsMTYsNzksMTE0LDExNCw1NCwyLDAsMzIsMiwzMiwzLDEwNiw2NSwxNiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwxNiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsNTQsMiwwLDMyLDAsNjUsMTIsMTA2LDM0LDMsMzIsMyw0MCwyLDAsMzIsNCw2NSw0LDEwNiw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCw1NCwyLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQwLDIsMCwzMiw0LDY1LDgsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzNCwzLDMyLDMsNDAsMiwwLDMyLDQsNjUsMTIsMTA2LDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDU0LDIsMCwzMiwwLDY1LDQwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSwzMiw2LDY1LDE2LDEwNyw3Nyw0LDY0LDMyLDYsNjUsMTYsMTA3LDMzLDgsMzIsMCw2NSw4LDEwNiw0MCwyLDAsMzMsMiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsMzMsMywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsNSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsMzMsNywzLDY0LDMyLDIsMzIsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMywyLDMyLDMsMzIsMSw2NSw0LDEwNiwzNCwxLDQwLDIsMCw2NSwyNDcsMTQ4LDE3NSwxNzUsMTIwLDEwOCwxMDYsNjUsMTMsMTE5LDY1LDE3NywyNDMsMjIxLDI0MSwxMjEsMTA4LDMzLDMsMzIsNSwzMiwxLDY1LDQsMTA2LDM0LDEsNDAsMiwwLDY1LDI0NywxNDgsMTc1LDE3NSwxMjAsMTA4LDEwNiw2NSwxMywxMTksNjUsMTc3LDI0MywyMjEsMjQxLDEyMSwxMDgsMzMsNSwzMiw3LDMyLDEsNjUsNCwxMDYsMzQsMSw0MCwyLDAsNjUsMjQ3LDE0OCwxNzUsMTc1LDEyMCwxMDgsMTA2LDY1LDEzLDExOSw2NSwxNzcsMjQzLDIyMSwyNDEsMTIxLDEwOCwzMyw3LDMyLDgsMzIsMSw2NSw0LDEwNiwzNCwxLDc5LDEzLDAsMTEsMzIsMCw2NSw4LDEwNiwzMiwyLDU0LDIsMCwzMiwwLDY1LDEyLDEwNiwzMiwzLDU0LDIsMCwzMiwwLDY1LDE2LDEwNiwzMiw1LDU0LDIsMCwzMiwwLDY1LDIwLDEwNiwzMiw3LDU0LDIsMCwxMSwzMiwxLDMyLDYsNzMsNCw2NCwzMiw0LDMyLDEsMzIsNiwzMiwxLDEwNywzNCwxLDI1MiwxMCwwLDAsMzIsMCw2NSw0MCwxMDYsMzIsMSw1NCwyLDAsMTEsMTEsOTcsMSwxLDEyNywzMiwwLDY1LDE2LDEwNiw0MCwyLDAsMzMsMSwzMiwwLDY1LDQsMTA2LDQwLDIsMCw0LDEyNywzMiwxLDY1LDEyLDExOSwzMiwwLDY1LDIwLDEwNiw0MCwyLDAsNjUsMTgsMTE5LDEwNiwzMiwwLDY1LDEyLDEwNiw0MCwyLDAsNjUsNywxMTksMTA2LDMyLDAsNjUsOCwxMDYsNDAsMiwwLDY1LDEsMTE5LDEwNiw1LDMyLDEsNjUsMTc3LDIwNywyMTcsMTc4LDEsMTA2LDExLDMyLDAsNDAsMiwwLDEwNiwzMiwwLDY1LDI0LDEwNiwzMiwwLDY1LDQwLDEwNiw0MCwyLDAsMTYsMSwxMSwyNTUsMywyLDMsMTI2LDEsMTI3LDMyLDAsMzIsMSwxMDYsMzMsNiwzMiwxLDY1LDMyLDc5LDQsMTI2LDMyLDYsNjUsMzIsMTA3LDMzLDYsMzIsMiw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCwzMywzLDMyLDIsNjYsMTc3LDE2OSwxNzIsMTkzLDE3MywxODQsMjEyLDE2Niw2MSwxMjUsMzMsNCwzMiwyLDY2LDI0OSwyMzQsMjA4LDIwOCwyMzEsMjAxLDE2MSwyMjgsMjI1LDAsMTI0LDMzLDUsMyw2NCwzMiwzLDMyLDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMywzLDMyLDQsMzIsMCw2NSw4LDEwNiwzNCwwLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsNCwzMiwyLDMyLDAsNjUsOCwxMDYsMzQsMCw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDIsMzIsNSwzMiwwLDY1LDgsMTA2LDM0LDAsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw1LDMyLDYsMzIsMCw2NSw4LDEwNiwzNCwwLDc5LDEzLDAsMTEsMzIsMiw2NiwxMiwxMzcsMzIsNSw2NiwxOCwxMzcsMTI0LDMyLDQsNjYsNywxMzcsMTI0LDMyLDMsNjYsMSwxMzcsMTI0LDMyLDMsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiwyLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDUsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsNSwzMiwyLDY2LDE5NywyMDcsMjE3LDE3OCwyNDEsMjI5LDE4NiwyMzQsMzksMTI0LDExLDMyLDEsMTczLDEyNCwzMiwwLDMyLDEsNjUsMzEsMTEzLDE2LDYsMTEsMTM0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDIsMyw2NCwzMiwyLDMyLDEsNjUsOCwxMDYsNzksNCw2NCwzMiwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMiwwLDEzMyw2NiwyNywxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMywwLDMyLDEsNjUsOCwxMDYsMzMsMSwxMiwxLDExLDExLDMyLDEsNjUsNCwxMDYsMzIsMiw3Nyw0LDY0LDMyLDAsMzIsMSw1MywyLDAsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMjMsMTM3LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDI0OSwyNDMsMjIxLDI0MSwxNTMsMjQ2LDE1MywxNzEsMjIsMTI0LDMzLDAsMzIsMSw2NSw0LDEwNiwzMywxLDExLDMsNjQsMzIsMSwzMiwyLDczLDQsNjQsMzIsMCwzMiwxLDQ5LDAsMCw2NiwxOTcsMjA3LDIxNywxNzgsMjQxLDIyOSwxODYsMjM0LDM5LDEyNiwxMzMsNjYsMTEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsMCwzMiwxLDY1LDEsMTA2LDMzLDEsMTIsMSwxMSwxMSwzMiwwLDMyLDAsNjYsMzMsMTM2LDEzMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwzNCwwLDMyLDAsNjYsMjksMTM2LDEzMyw2NiwyNDksMjQzLDIyMSwyNDEsMTUzLDI0NiwxNTMsMTcxLDIyLDEyNiwzNCwwLDMyLDAsNjYsMzIsMTM2LDEzMywxMSw3NywwLDMyLDAsNjUsOCwxMDYsMzIsMSw2NiwyMTQsMjM1LDEzMCwyMzgsMjM0LDI1MywxMzcsMjQ1LDIyNCwwLDEyNCw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzIsMSw2NiwxNzcsMTY5LDE3MiwxOTMsMTczLDE4NCwyMTIsMTY2LDYxLDEyNSw1NSwzLDAsMzIsMCw2NSwyNCwxMDYsMzIsMSw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzIsMSw2NiwyNDksMjM0LDIwOCwyMDgsMjMxLDIwMSwxNjEsMjI4LDIyNSwwLDEyNCw1NSwzLDAsMTEsMjQ0LDQsMiwzLDEyNyw0LDEyNiwzMiwxLDMyLDIsMTA2LDMzLDUsMzIsMCw2NSw0MCwxMDYsMzMsNCwzMiwwLDY1LDIwMCwwLDEwNiw0MCwyLDAsMzMsMywzMiwwLDMyLDAsNDEsMywwLDMyLDIsMTczLDEyNCw1NSwzLDAsMzIsMiwzMiwzLDEwNiw2NSwzMiw3Myw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSwzMiwyLDI1MiwxMCwwLDAsMzIsMCw2NSwyMDAsMCwxMDYsMzIsMiwzMiwzLDEwNiw1NCwyLDAsMTUsMTEsMzIsMyw0LDY0LDMyLDMsMzIsNCwxMDYsMzIsMSw2NSwzMiwzMiwzLDEwNywzNCwyLDI1MiwxMCwwLDAsMzIsMCw2NSw4LDEwNiwzNCwzLDMyLDMsNDEsMywwLDMyLDQsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwxNiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDgsMTA2LDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDM0LDMsMzIsMyw0MSwzLDAsMzIsNCw2NSwxNiwxMDYsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw1NSwzLDAsMzIsMCw2NSwzMiwxMDYsMzQsMywzMiwzLDQxLDMsMCwzMiw0LDY1LDI0LDEwNiw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDU1LDMsMCwzMiwwLDY1LDIwMCwwLDEwNiw2NSwwLDU0LDIsMCwzMiwxLDMyLDIsMTA2LDMzLDEsMTEsMzIsMSw2NSwzMiwxMDYsMzIsNSw3Nyw0LDY0LDMyLDUsNjUsMzIsMTA3LDMzLDIsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzMsNiwzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzMsNywzMiwwLDY1LDI0LDEwNiw0MSwzLDAsMzMsOCwzMiwwLDY1LDMyLDEwNiw0MSwzLDAsMzMsOSwzLDY0LDMyLDYsMzIsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDYsMzIsNywzMiwxLDY1LDgsMTA2LDM0LDEsNDEsMywwLDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDEyNCw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwzMyw3LDMyLDgsMzIsMSw2NSw4LDEwNiwzNCwxLDQxLDMsMCw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiwxMjQsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMzMsOCwzMiw5LDMyLDEsNjUsOCwxMDYsMzQsMSw0MSwzLDAsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsMTI0LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDMzLDksMzIsMiwzMiwxLDY1LDgsMTA2LDM0LDEsNzksMTMsMCwxMSwzMiwwLDY1LDgsMTA2LDMyLDYsNTUsMywwLDMyLDAsNjUsMTYsMTA2LDMyLDcsNTUsMywwLDMyLDAsNjUsMjQsMTA2LDMyLDgsNTUsMywwLDMyLDAsNjUsMzIsMTA2LDMyLDksNTUsMywwLDExLDMyLDEsMzIsNSw3Myw0LDY0LDMyLDQsMzIsMSwzMiw1LDMyLDEsMTA3LDM0LDEsMjUyLDEwLDAsMCwzMiwwLDY1LDIwMCwwLDEwNiwzMiwxLDU0LDIsMCwxMSwxMSwxODgsMiwxLDUsMTI2LDMyLDAsNjUsMjQsMTA2LDQxLDMsMCwzMywxLDMyLDAsNDEsMywwLDM0LDIsNjYsMzIsOTAsNCwxMjYsMzIsMCw2NSw4LDEwNiw0MSwzLDAsMzQsMyw2NiwxLDEzNywzMiwwLDY1LDE2LDEwNiw0MSwzLDAsMzQsNCw2Niw3LDEzNywxMjQsMzIsMSw2NiwxMiwxMzcsMzIsMCw2NSwzMiwxMDYsNDEsMywwLDM0LDUsNjYsMTgsMTM3LDEyNCwxMjQsMzIsMyw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSwzMiw0LDY2LDIwNywyMTQsMjExLDE5MCwyMTAsMTk5LDE3MSwyMTcsNjYsMTI2LDY2LDMxLDEzNyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDEzMyw2NiwxMzUsMTQ5LDE3NSwxNzUsMTUyLDE4MiwyMjIsMTU1LDE1OCwxMjcsMTI2LDY2LDE1NywxNjMsMTgxLDIzNCwxMzEsMTc3LDE0MSwxMzgsMjUwLDAsMTI1LDMyLDEsNjYsMjA3LDIxNCwyMTEsMTkwLDIxMCwxOTksMTcxLDIxNyw2NiwxMjYsNjYsMzEsMTM3LDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsMTMzLDY2LDEzNSwxNDksMTc1LDE3NSwxNTIsMTgyLDIyMiwxNTUsMTU4LDEyNywxMjYsNjYsMTU3LDE2MywxODEsMjM0LDEzMSwxNzcsMTQxLDEzOCwyNTAsMCwxMjUsMzIsNSw2NiwyMDcsMjE0LDIxMSwxOTAsMjEwLDE5OSwxNzEsMjE3LDY2LDEyNiw2NiwzMSwxMzcsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiwxMzMsNjYsMTM1LDE0OSwxNzUsMTc1LDE1MiwxODIsMjIyLDE1NSwxNTgsMTI3LDEyNiw2NiwxNTcsMTYzLDE4MSwyMzQsMTMxLDE3NywxNDEsMTM4LDI1MCwwLDEyNSw1LDMyLDEsNjYsMTk3LDIwNywyMTcsMTc4LDI0MSwyMjksMTg2LDIzNCwzOSwxMjQsMTEsMzIsMiwxMjQsMzIsMCw2NSw0MCwxMDYsMzIsMiw2NiwzMSwxMzEsMTY3LDE2LDYsMTFdKTt2YXIgVXI9L1xzLzt2YXIgUnI9L15ccysvO2Z1bmN0aW9uIEJyKHQpe3JldHVybiB0P3Quc2xpY2UoMCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZVci50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfSh0KSsxKS5yZXBsYWNlKFJyLCIiKTp0fXZhciBDcj1OYU4sV3I9L15bLStdMHhbMC05YS1mXSskL2kscXI9L14wYlswMV0rJC9pLFZyPS9eMG9bMC03XSskL2ksR3I9cGFyc2VJbnQ7dmFyIEhyPTEvMCxKcj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gS3IodCl7cmV0dXJuIHQ/KHQ9ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O2lmKG9lKHQpKXJldHVybiBDcjtpZihLKHQpKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdC52YWx1ZU9mP3QudmFsdWVPZigpOnQ7dD1LKGUpP2UrIiI6ZX1pZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIDA9PT10P3Q6K3Q7dD1Ccih0KTt2YXIgcj1xci50ZXN0KHQpO3JldHVybiByfHxWci50ZXN0KHQpP0dyKHQuc2xpY2UoMikscj8yOjgpOldyLnRlc3QodCk/Q3I6K3R9KHQpKT09PUhyfHx0PT09LUhyPyh0PDA/LTE6MSkqSnI6dD09dD90OjA6MD09PXQ/dDowfWFzeW5jIGZ1bmN0aW9uIFFyKHQsZT17fSl7bGV0IHI9TGUoZSwiZnMiKSxuPUxlKGUsImNodW5rU2l6ZSIpO3ZhciBvO2lmKHJlKG4pfHwobj02NzEwODg2NCksbj1yZShvPW4pP0tyKG8pOjAsIVRlKHQse2ZzOnJ9KSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoImZwIGlzIG5vdCBhIGZpbGUiKTtsZXQgdT1mdW5jdGlvbigpe2xldCB0LGUscj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oKXt0PWFyZ3VtZW50c1swXSxlPWFyZ3VtZW50c1sxXX0pKTtyZXR1cm4gci5yZXNvbHZlPXQsci5yZWplY3Q9ZSxyfSgpO3RyeXtsZXR7Y3JlYXRlNjQ6ZX09YXdhaXQgYXN5bmMgZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7ZXhwb3J0czp7bWVtOmUseHhoMzI6cix4eGg2NDpuLGluaXQzMjpvLHVwZGF0ZTMyOnUsZGlnZXN0MzI6aSxpbml0NjQ6YSx1cGRhdGU2NDpjLGRpZ2VzdDY0OmZ9fT10O2xldCBzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKTtmdW5jdGlvbiBsKHQscil7aWYoZS5idWZmZXIuYnl0ZUxlbmd0aDx0K3Ipe2NvbnN0IG49TWF0aC5jZWlsKCh0K3ItZS5idWZmZXIuYnl0ZUxlbmd0aCkvNjU1MzYpO2UuZ3JvdyhuKSxzPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKX19ZnVuY3Rpb24gcCh0LGUscixuLG8sdSl7bCh0KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBzLnNldChpKSxyKDAsZSksaS5zZXQocy5zdWJhcnJheSgwLHQpKSx7dXBkYXRlKGUpe2xldCByO3JldHVybiBzLnNldChpKSwic3RyaW5nIj09dHlwZW9mIGU/KGwoMyplLmxlbmd0aCx0KSxyPXYuZW5jb2RlSW50byhlLHMuc3ViYXJyYXkodCkpLndyaXR0ZW4pOihsKGUuYnl0ZUxlbmd0aCx0KSxzLnNldChlLHQpLHI9ZS5ieXRlTGVuZ3RoKSxuKDAsdCxyKSxpLnNldChzLnN1YmFycmF5KDAsdCkpLHRoaXN9LGRpZ2VzdDooKT0+KHMuc2V0KGkpLHUobygwKSkpfX1mdW5jdGlvbiBoKHQpe3JldHVybiB0Pj4+MH1jb25zdCB5PTJuKio2NG4tMW47ZnVuY3Rpb24gYih0KXtyZXR1cm4gdCZ5fWNvbnN0IHY9bmV3IFRleHRFbmNvZGVyLGQ9MCxnPTBuO2Z1bmN0aW9uIF8odCxlPWQpe3JldHVybiBsKDMqdC5sZW5ndGgsMCksaChyKDAsdi5lbmNvZGVJbnRvKHQscykud3JpdHRlbixlKSl9ZnVuY3Rpb24gaih0LGU9Zyl7cmV0dXJuIGwoMyp0Lmxlbmd0aCwwKSxiKG4oMCx2LmVuY29kZUludG8odCxzKS53cml0dGVuLGUpKX1yZXR1cm57aDMyOl8saDMyVG9TdHJpbmc6KHQsZT1kKT0+Xyh0LGUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIiksaDMyUmF3Oih0LGU9ZCk9PihsKHQuYnl0ZUxlbmd0aCwwKSxzLnNldCh0KSxoKHIoMCx0LmJ5dGVMZW5ndGgsZSkpKSxjcmVhdGUzMjoodD1kKT0+cCg0OCx0LG8sdSxpLGgpLGg2NDpqLGg2NFRvU3RyaW5nOih0LGU9Zyk9PmoodCxlKS50b1N0cmluZygxNikucGFkU3RhcnQoMTYsIjAiKSxoNjRSYXc6KHQsZT1nKT0+KGwodC5ieXRlTGVuZ3RoLDApLHMuc2V0KHQpLGIobigwLHQuYnl0ZUxlbmd0aCxlKSkpLGNyZWF0ZTY0Oih0PWcpPT5wKDg4LHQsYSxjLGYsYil9fSgoYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoTnIpKS5pbnN0YW5jZSl9KCksbz1lKCksaT1yLmNyZWF0ZVJlYWRTdHJlYW0odCx7aGlnaFdhdGVyTWFyazpufSk7aS5vbigiZGF0YSIsKHQ9PntvLnVwZGF0ZSh0KX0pKSxpLm9uKCJlbmQiLCgoKT0+e2xldCB0PW8uZGlnZXN0KCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCIwIik7dS5yZXNvbHZlKHQpfSkpLGkub24oImVycm9yIix1LnJlamVjdCl9Y2F0Y2godCl7dS5yZWplY3QodC50b1N0cmluZygpKX1yZXR1cm4gdX1mdW5jdGlvbiBYcih0LGUpe3ZhciByPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gWXIodCxyPXt9KXtyZXR1cm4gUXIodCxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9YcihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe01yKHQsZSxyW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpYcihPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pKX1yZXR1cm4gdH0oe2ZzOmV9LHIpKX1sZXQgY2hlY2tUb3RhbEhhc2g9YXN5bmMocixuLG8sdSk9PntsZXQgaT10LmpvaW4odSxvKSxhPSExO2lmKGE9RGUoaSksIXJlKHIpKXtyZXR1cm57ZXJyb3I6ImludmFsaWQgZmlsZVNpemUgaW4gcGF5bG9hZCJ9fWxldCBjPSExO2lmKGEpe2M9cj09PWUuc3RhdFN5bmMoaSkuc2l6ZX1sZXQgZj0hMTthJiZjJiZhd2FpdCBZcihpKS50aGVuKCh0PT57Zj1vPT09dH0pKS5jYXRjaCgodD0+e2NvbnNvbGUubG9nKHQpLGNvbnNvbGUubG9nKCJmc0lzRmlsZShwYXRoRmlsZSkiLGksRGUoaSkpLGY9ITF9KSk7bGV0IHM9ZnVuY3Rpb24ocixuPTEpe3JldHVybiBUcihyLG4se3BhdGg6dCxmczplfSl9KHUpLGw9W107aXQocywoKHQscik9PntsZXQgdT10Lm5hbWUuaW5kZXhPZihgJHtvfV9gKT49MCxpPWUuc3RhdFN5bmModC5wYXRoKS5zaXplPT09bjt1JiZpJiZsLnB1c2gocil9KSk7bGV0IHA9dGUobCk+MDtyZXR1cm57c3VjY2Vzczp7cGF0aDppLGJBbGxFeGlzdDphLGJBbGxTaXplOmMsYkFsbEhhc2g6ZixiU2xzOnAsc2xrczpsfX19OwoKCmxldCBpbnN0YW5jZSA9IG51bGwKZnVuY3Rpb24gaW5pdChpbnB1dCl7CgogICAgLy9pbml0CiAgICBsZXQgcgogICAgCiAgICAgICAgciA9IHsKICAgICAgICAgICAgbWFpbjogY2hlY2tUb3RhbEhhc2gKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gY2hlY2tUb3RhbEhhc2gKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAKICAgICAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICAgICAgbW9kZTogJ2VtaXQnLAogICAgICAgICAgICAgICAgZXZOYW1lOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbXNnOiBlcnIsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgICAgICB9CiAgICAgICAgICAgIAogICAgfQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgPT09ICdjYWxsJyl7CiAgICAgICAgbGV0IHN0YXRlID0gJycKICAgICAgICBsZXQgbXNnID0gbnVsbAoKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL2Z1bgogICAgICAgICAgICBsZXQgZnVuID0gaW5zdGFuY2VbZGF0YS5mdW5dCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKCiAgICAgICAgICAgIC8vZXhlYwogICAgICAgICAgICBhd2FpdCBmdW4oLi4uaW5wdXQpCiAgICAgICAgICAgICAgICAudGhlbigoc3VjKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J3N1Y2Nlc3MnCiAgICAgICAgICAgICAgICAgICAgbXNnPXN1YwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J2Vycm9yJwogICAgICAgICAgICAgICAgICAgIG1zZz1lcnIKICAgICAgICAgICAgICAgIH0pCgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgICAgICBzdGF0ZSA9ICdlcnJvcicKICAgICAgICAgICAgbXNnID0gZXJyCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICBtb2RlOiAncmV0dXJuJywKICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgIGZ1bjogZGF0YS5mdW4sCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICBtc2csCiAgICAgICAgfQogICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICB9Cgp9CgpmdW5jdGlvbiByZWN2TWVzc2FnZShkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJlY3Y6JywgZGF0YSkKCiAgICAvL2RhdGFSZWN2CiAgICBsZXQgZGF0YVJlY3YgPSBkYXRhCgogICAgLy9ydW4KICAgIHJ1bihkYXRhUmVjdikKCn0KCgogICAgICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmVjdk1lc3NhZ2UoZS5kYXRhKQogICAgICAgIH0KICAgICAgICAKCnRyeXsKICAgIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyKQogICAgfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbicsIGVycikKICAgIH0pCiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikKICAgIH0pCn0KY2F0Y2goZXJyKXt9Cgo=");function s(){let s=new T,w=function(M){try{let s=new Blob([M]),w=window.URL||window.webkitURL;return new Worker(w.createObjectURL(s))}catch(M){I(M)}}(M);if(!w)return I("invalid worker"),null;function L(){let M=function(){let M,s,w=new Promise((function(){M=arguments[0],s=arguments[1]}));return w.resolve=M,w.reject=s,w}(),L=function(){let M=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,s=[],w="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),L=w.length;for(let I=0;I<M;I++)s[I]=w[0|Math.random()*L];return s.join("")}(),I={mode:"call",id:L,fun:"main",input:[...arguments]};return w.postMessage(I),s.once(L,(s=>{"success"===s.state?M.resolve(s.msg):M.reject(s.msg)})),M}function I(M){s.emit("error",M)}return w.onmessage=function(M){!function(M){let w=M,L=w.mode;"emit"!==L&&"return"!==L||("emit"===L&&s.emit(w.evName,w.msg),"return"===L&&s.emit(w.id,w))}(M.data)},w.onerror=I,w.onmessageerror=function(M){I(M.data)},function(){let M={mode:"init",type:"function",input:[...arguments]};w.postMessage(M)}([...arguments]),s.main=L,s.main=L,s.terminate=function(){w?(w.terminate(),w=void 0):I("worker has been terminated")},s}b=async function(){let M=[...arguments],w=s();return await w.main(...M).finally((()=>{w.terminate()}))}}();try{process.on("unhandledRejection",(M=>{console.log("outer:unhandledRejection",M)})),process.on("uncaughtException",(M=>{console.log("outer:uncaughtException",M)})),process.on("uncaughtExceptionMonitor",(M=>{console.log("outer:uncaughtExceptionMonitor",M)}))}catch(M){}return b}()}({get exports(){return L},set exports(M){L=M}});var I=L;let D;return D="undefined"!=typeof window&&void 0!==window.document?I:w,D}));