w-converhp 2.0.36 → 2.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/w-converhp-client.umd.js +2 -2
- package/dist/w-converhp-client.umd.js.map +1 -1
- package/dist/w-converhp-server.umd.js +2 -2
- package/dist/w-converhp-server.umd.js.map +1 -1
- package/docs/WConverhpClient.html +1 -1
- package/docs/WConverhpClient.mjs.html +81 -33
- package/docs/WConverhpServer.html +2 -2
- package/docs/WConverhpServer.mjs.html +147 -155
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/scla.mjs +3 -0
- package/sclb.mjs +3 -0
- package/sclc.mjs +4 -1
- package/scld.mjs +3 -0
- package/src/WConverhpClient.mjs +80 -32
- package/src/WConverhpServer.mjs +146 -154
- package/src/checkSlicesHash.mjs +1 -3
- package/src/checkSlicesHash.wk.umd.js +1 -1
- package/src/checkTotalHash.mjs +6 -8
- package/src/checkTotalHash.wk.umd.js +1 -1
- package/src/managerMergeSlices.mjs +82 -0
- package/src/mergeSlices.mjs +31 -0
- package/src/mergeSlices.wk.umd.js +1 -0
- package/srv.mjs +1 -1
- package/test/downloadLargeFile.test.mjs +3 -0
- package/test/executeWithFile.test.mjs +3 -0
- package/test/executeWithU8a.test.mjs +3 -0
- package/test/uploadLargeFile.test.mjs +9 -5
- package/toolg/gDistRollup.mjs +22 -0
- package/src/mergeFiles.mjs +0 -27
- package/src/mergeFiles.wk.umd.js +0 -1
|
@@ -1 +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}));
|
|
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,c=this._events[i],C=arguments.length;if(c.fn){switch(c.once&&this.removeListener(M,c.fn,void 0,!0),C){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,s),!0;case 3:return c.fn.call(c.context,s,L),!0;case 4:return c.fn.call(c.context,s,L,I),!0;case 5:return c.fn.call(c.context,s,L,I,D),!0;case 6:return c.fn.call(c.context,s,L,I,D,y),!0}for(l=1,d=new Array(C-1);l<C;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var Z,N=c.length;for(l=0;l<N;l++)switch(c[l].once&&this.removeListener(M,c[l].fn,void 0,!0),C){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,s);break;case 3:c[l].fn.call(c[l].context,s,L);break;case 4:c[l].fn.call(c[l].context,s,L,I);break;default:if(!d)for(Z=1,d=new Array(C-1);Z<C;Z++)d[Z-1]=arguments[Z];c[l].fn.apply(c[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=[],c=i.length;d<c;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+PTAsaT1lLnN0YXRTeW5jKHQucGF0aCkuc2l6ZT09PW47dSYmaSYmbC5wdXNoKHIpfSkpO2xldCBwPXRlKGwpPjA7cmV0dXJue3BhdGg6aSxiQWxsRXhpc3Q6YSxiQWxsU2l6ZTpjLGJBbGxIYXNoOmYsYlNsczpwLHNsa3M6bH19OwoKCmxldCBpbnN0YW5jZSA9IG51bGwKZnVuY3Rpb24gaW5pdChpbnB1dCl7CgogICAgLy9pbml0CiAgICBsZXQgcgogICAgCiAgICAgICAgciA9IHsKICAgICAgICAgICAgbWFpbjogY2hlY2tUb3RhbEhhc2gKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHBhcmVudFBvcnQucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gY2hlY2tUb3RhbEhhc2gKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAKICAgICAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICAgICAgbW9kZTogJ2VtaXQnLAogICAgICAgICAgICAgICAgZXZOYW1lOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbXNnOiBlcnIsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgICAgICB9CiAgICAgICAgICAgIAogICAgfQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgPT09ICdjYWxsJyl7CiAgICAgICAgbGV0IHN0YXRlID0gJycKICAgICAgICBsZXQgbXNnID0gbnVsbAoKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL2Z1bgogICAgICAgICAgICBsZXQgZnVuID0gaW5zdGFuY2VbZGF0YS5mdW5dCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKCiAgICAgICAgICAgIC8vZXhlYwogICAgICAgICAgICBhd2FpdCBmdW4oLi4uaW5wdXQpCiAgICAgICAgICAgICAgICAudGhlbigoc3VjKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J3N1Y2Nlc3MnCiAgICAgICAgICAgICAgICAgICAgbXNnPXN1YwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGU9J2Vycm9yJwogICAgICAgICAgICAgICAgICAgIG1zZz1lcnIKICAgICAgICAgICAgICAgIH0pCgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgICAgICBzdGF0ZSA9ICdlcnJvcicKICAgICAgICAgICAgbXNnID0gZXJyCiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICBsZXQgcmVzID0gewogICAgICAgICAgICBtb2RlOiAncmV0dXJuJywKICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgIGZ1bjogZGF0YS5mdW4sCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICBtc2csCiAgICAgICAgfQogICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICB9Cgp9CgpmdW5jdGlvbiByZWN2TWVzc2FnZShkYXRhKSB7CiAgICAvLyBjb25zb2xlLmxvZygnaW5uZXIgd29ya2VyIHJlY3Y6JywgZGF0YSkKCiAgICAvL2RhdGFSZWN2CiAgICBsZXQgZGF0YVJlY3YgPSBkYXRhCgogICAgLy9ydW4KICAgIHJ1bihkYXRhUmVjdikKCn0KCgogICAgICAgIHBhcmVudFBvcnQub24oJ21lc3NhZ2UnLCByZWN2TWVzc2FnZSkKICAgICAgICAKCnRyeXsKICAgIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyKQogICAgfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmNhdWdodEV4Y2VwdGlvbicsIGVycikKICAgIH0pCiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3InLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIGVycikKICAgIH0pCn0KY2F0Y2goZXJyKXt9Cgo=",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),c=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"):c,Z=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(Z(M)):M=>l(C(M)),x=M=>y(M.replace(/[-_]/g,(M=>"-"==M?"+":"/"))),m=M=>N(x(M)),X=m;var T={};!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,c=this._events[i],C=arguments.length;if(c.fn){switch(c.once&&this.removeListener(M,c.fn,void 0,!0),C){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,s),!0;case 3:return c.fn.call(c.context,s,L),!0;case 4:return c.fn.call(c.context,s,L,I),!0;case 5:return c.fn.call(c.context,s,L,I,D),!0;case 6:return c.fn.call(c.context,s,L,I,D,y),!0}for(l=1,d=new Array(C-1);l<C;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var Z,N=c.length;for(l=0;l<N;l++)switch(c[l].once&&this.removeListener(M,c[l].fn,void 0,!0),C){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,s);break;case 3:c[l].fn.call(c[l].context,s,L);break;case 4:c[l].fn.call(c[l].context,s,L,I);break;default:if(!d)for(Z=1,d=new Array(C-1);Z<C;Z++)d[Z-1]=arguments[Z];c[l].fn.apply(c[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=[],c=i.length;d<c;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 T},set exports(M){T=M}});var b=T;let Y;!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+MDtyZXR1cm57cGF0aDppLGJBbGxFeGlzdDphLGJBbGxTaXplOmMsYkFsbEhhc2g6ZixiU2xzOnAsc2xrczpsfX07CgoKbGV0IGluc3RhbmNlID0gbnVsbApmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBjaGVja1RvdGFsSGFzaAogICAgICAgIH0KICAgICAgICAKCiAgICAvL29uCiAgICAKCiAgICAvL3NhdmUKICAgIGluc3RhbmNlID0gcgoKfQoKZnVuY3Rpb24gc2VuZE1lc3NhZ2UoZGF0YSkgewogICAgCiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShkYXRhKQogICAgICAgIAp9Cgphc3luYyBmdW5jdGlvbiBydW4oZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciBydW4nLGRhdGEpCgogICAgLy9tb2RlCiAgICBsZXQgbW9kZSA9IGRhdGEubW9kZQoKICAgIC8vY2hlY2sKICAgIGlmKG1vZGUgIT09ICdpbml0JyAmJiBtb2RlICE9PSAnY2FsbCcpewogICAgICAgIHJldHVybgogICAgfQoKICAgIC8vaW5pdAogICAgaWYobW9kZSA9PT0gJ2luaXQnKXsKICAgICAgICAKICAgICAgICB0cnl7CgogICAgICAgICAgICAvL3R5cGUKICAgICAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGUKCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAogICAgCiAgICAgICAgICAgIC8vaW5zdGFuY2UKICAgICAgICAgICAgaWYodHlwZSA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgICAgICAgICBpbml0KC4uLmlucHV0KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYodHlwZSA9PT0gJ29iamVjdCcpewogICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBjaGVja1RvdGFsSGFzaAogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBjYXRjaChlcnIpewogICAgICAgIAogICAgICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgICAgICBtb2RlOiAnZW1pdCcsCiAgICAgICAgICAgICAgICBldk5hbWU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtc2c6IGVyciwKICAgICAgICAgICAgfQogICAgICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgICAgIH0KICAgICAgICAgICAgCiAgICB9CgogICAgLy9jaGVjawogICAgaWYobW9kZSA9PT0gJ2NhbGwnKXsKICAgICAgICBsZXQgc3RhdGUgPSAnJwogICAgICAgIGxldCBtc2cgPSBudWxsCgogICAgICAgIHRyeXsKCiAgICAgICAgICAgIC8vZnVuCiAgICAgICAgICAgIGxldCBmdW4gPSBpbnN0YW5jZVtkYXRhLmZ1bl0KCiAgICAgICAgICAgIC8vaW5wdXQKICAgICAgICAgICAgbGV0IGlucHV0ID0gZGF0YS5pbnB1dAoKICAgICAgICAgICAgLy9leGVjCiAgICAgICAgICAgIGF3YWl0IGZ1biguLi5pbnB1dCkKICAgICAgICAgICAgICAgIC50aGVuKChzdWMpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nc3VjY2VzcycKICAgICAgICAgICAgICAgICAgICBtc2c9c3VjCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0nZXJyb3InCiAgICAgICAgICAgICAgICAgICAgbXNnPWVycgogICAgICAgICAgICAgICAgfSkKCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgICAgIHN0YXRlID0gJ2Vycm9yJwogICAgICAgICAgICBtc2cgPSBlcnIKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy9zZW5kTWVzc2FnZQogICAgICAgIGxldCByZXMgPSB7CiAgICAgICAgICAgIG1vZGU6ICdyZXR1cm4nLAogICAgICAgICAgICBpZDogZGF0YS5pZCwKICAgICAgICAgICAgZnVuOiBkYXRhLmZ1biwKICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgIG1zZywKICAgICAgICB9CiAgICAgICAgc2VuZE1lc3NhZ2UocmVzKQoKICAgIH0KCn0KCmZ1bmN0aW9uIHJlY3ZNZXNzYWdlKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcmVjdjonLCBkYXRhKQoKICAgIC8vZGF0YVJlY3YKICAgIGxldCBkYXRhUmVjdiA9IGRhdGEKCiAgICAvL3J1bgogICAgcnVuKGRhdGFSZWN2KQoKfQoKCiAgICAgICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZWN2TWVzc2FnZShlLmRhdGEpCiAgICAgICAgfQogICAgICAgIAoKdHJ5ewogICAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKGVycikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCdpbm5lcjp1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpCiAgICB9KQogICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coJ2lubmVyOnVuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKQogICAgfSkKICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uTW9uaXRvcicsIChlcnIpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygnaW5uZXI6dW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yJywgZXJyKQogICAgfSkKfQpjYXRjaChlcnIpe30KCg==");function s(){let s=new b,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}Y=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 Y}()}({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}));
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import get from 'lodash-es/get.js'
|
|
3
|
+
import now2strp from 'wsemi/src/now2strp.mjs'
|
|
4
|
+
import genID from 'wsemi/src/genID.mjs'
|
|
5
|
+
import sep from 'wsemi/src/sep.mjs'
|
|
6
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
7
|
+
import fsIsFile from 'wsemi/src/fsIsFile.mjs'
|
|
8
|
+
import fsDeleteFile from 'wsemi/src/fsDeleteFile.mjs'
|
|
9
|
+
// import mergeSlices from './mergeSlices.mjs'
|
|
10
|
+
import mergeSlices from './mergeSlices.wk.umd.js'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
//managerMergeSlices
|
|
14
|
+
let managerMergeSlices = () => {
|
|
15
|
+
|
|
16
|
+
//qPush
|
|
17
|
+
let qPush = (fileHash, chunkTotal, pathUploadTemp) => {
|
|
18
|
+
|
|
19
|
+
//id
|
|
20
|
+
let id = `${now2strp()}:${genID(6)}:${fileHash}`
|
|
21
|
+
|
|
22
|
+
//setTimeout, 脫勾觸發
|
|
23
|
+
setTimeout(() => {
|
|
24
|
+
mergeSlices(fileHash, chunkTotal, pathUploadTemp)
|
|
25
|
+
.catch((err) => {
|
|
26
|
+
console.log(err)
|
|
27
|
+
})
|
|
28
|
+
}, 1)
|
|
29
|
+
|
|
30
|
+
return id
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//qGet
|
|
34
|
+
let qGet = (id, pathUploadTemp) => {
|
|
35
|
+
|
|
36
|
+
//fileHash
|
|
37
|
+
let s = sep(id, ':')
|
|
38
|
+
let fileHash = get(s, 2, '')
|
|
39
|
+
if (!isestr(fileHash)) {
|
|
40
|
+
throw new Error(`can not find fileHash in id[${id}]`)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//fp
|
|
44
|
+
let fp = path.resolve(pathUploadTemp, fileHash)
|
|
45
|
+
// console.log('fp', fp)
|
|
46
|
+
|
|
47
|
+
//fpd
|
|
48
|
+
let fpd = path.resolve(pathUploadTemp, `${fileHash}.done`)
|
|
49
|
+
// console.log('fpd', fpd)
|
|
50
|
+
|
|
51
|
+
//bfp, bfpd, b
|
|
52
|
+
let bfp = fsIsFile(fp)
|
|
53
|
+
let bfpd = fsIsFile(fpd)
|
|
54
|
+
let b = bfp && bfpd //記得要同時偵測fp與fpd, 否則有些已經移動fp但fpd忘記刪, 就會造成誤判
|
|
55
|
+
|
|
56
|
+
//check, 若有.done檔但沒合併檔, 就代表合併檔已被處理或移動, .done檔須自動刪除
|
|
57
|
+
if (!bfp && bfpd) {
|
|
58
|
+
fsDeleteFile(fpd)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
//check, 若已經完成任務, 且外部調用get取得完成訊息, 則可自動刪除.done檔, 但因不能保證合併後有完成再處理動作, 例如移動至處理資料夾再處理, 故保留.done檔
|
|
62
|
+
if (b) {
|
|
63
|
+
// fsDeleteFile(fpd)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
state: b ? 'done' : 'merging',
|
|
68
|
+
path: fp,
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//r
|
|
73
|
+
let r = {
|
|
74
|
+
push: qPush,
|
|
75
|
+
get: qGet,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return r
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
export default managerMergeSlices
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import fsMergeFiles from 'wsemi/src/fsMergeFiles.mjs'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
let mergeSlices = async (fileHash, chunkTotal, pathUploadTemp) => {
|
|
7
|
+
|
|
8
|
+
//fpsIn
|
|
9
|
+
let fpsIn = []
|
|
10
|
+
for (let i = 0; i < chunkTotal; i++) {
|
|
11
|
+
let fpIn = path.join(pathUploadTemp, `${fileHash}_${i}`)
|
|
12
|
+
// console.log('fpIn', fpIn)
|
|
13
|
+
fpsIn.push(fpIn)
|
|
14
|
+
}
|
|
15
|
+
// console.log('fpsIn', fpsIn)
|
|
16
|
+
|
|
17
|
+
//fpOut
|
|
18
|
+
let fpOut = path.join(pathUploadTemp, fileHash)
|
|
19
|
+
// console.log('fpOut', fpOut)
|
|
20
|
+
|
|
21
|
+
//mergeSlices
|
|
22
|
+
let r = await fsMergeFiles(fileHash, fpsIn, fpOut)
|
|
23
|
+
// console.log('r', r)
|
|
24
|
+
|
|
25
|
+
//writeFileSync, 因可能合併大檔, 故於合併結束後才輸出無內容之.done檔案, 可供外部輪循偵測.done檔是否存在, 藉此判識合併大檔任務是否完成
|
|
26
|
+
fs.writeFileSync(`${fpOut}.done`, '', 'utf8')
|
|
27
|
+
|
|
28
|
+
return r
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default mergeSlices
|